多语言展示
当前在线:368今日阅读:84今日分享:32

纯手工整理Redis详细教程,学不会都难!

Linux中的Redis缓存服务器一、Redis基础部分:1、redis介绍与安装比mysql快10倍以上*****************redis适用场合****************1.取最新N个数据的操作2.排行榜应用,取TOPN操作3.需要精确设定过期时间的应用4.计数器应用5.Uniq操作,获取某段时间所有数据排重值6.实时系统,反垃圾系统7.Pub/Sub构建实时消息系统7.Pub/Sub构建实时消息系统8.构建队列系统9.缓存=============================================SET操作每秒钟110000次,GET操作每秒钟81000次,服务器配置如下:Linux2.6,XeonX33202.5Ghz.stackoverflow网站使用Redis做为缓存服务器。同时也会将数据写到硬盘上。所以数据是安全的(除突然断电外,重启服务会写到dump.rdb文件中)********************************************************************目前最新稳定版本为:2.4.17.tar.gz、redis-2.6.10.tar.gzwgethttp://redis.googlecode.com/files/redis-2.4.17.tar.gzPHP模块:owlient-phpredis-2.1.1-1-g90ecd17.tar.gz1.安装:tarzxvfredis-2.4.17.tar.gzcdredis-2.4.17makecdsrc&&makeinstall2.移动配置文件位置(为了便于管理)cd/usr/local/mkdir-p/usr/local/redis/binmkdir-p/usr/local/redis/etcmv/lamp/redis-2.4.17/redis.conf/usr/local/redis/etccd/lamp/redis-2.4.17/srcmvmkreleasehdr.shredis-benchmarkredis-check-aofredis-check-dumpredis-cliredis-server/usr/local/redis/bin3.修改配置文件vi/usr/local/redis/etc/redis.conf一、将daemonizeno中no改为yes[yes指后台运行]4.启动/随机启动:cd/usr/local/redis/bin./redis-server/usr/local/redis/etc/redis.conf#启动redis并指定配置文件。#vi/etc/rc.local#设置随机启动。/usr/local/redis/bin/redis-server/usr/local/redis/etc/redis.conf5.查看是否启动成功ps-ef|grepredisnetstat-tunpl|grep6379#查看端口是否占用。6.进入客户端/退出cd/usr/local/redis/bin./redis-cli#进入quit#退出7.关闭redispkillredis-server#关闭./redis-clishutdown#关闭************************************Redis安全************************************Redis的安全性???(由以下4种方式)1.用ACL控制器安全性。2.在redis.conf配置文件增加下面这一行配置,即可把redis绑定在单个接口上(但并不是只有接受这个网卡的数据)。bind127.0.0.13.给redis加上较长密码(无需要记住)4.在redis.conf配置启用认证功能。5.SSL代理6.禁用指定命令。**************************************Redis配置**********************************************daemonize如果需要在后台运行,把该项改为yespidfile配置多个pid的地址默认在/var/run/redis.pidbind绑定ip,设置后只接受来自该ip的请求port监听端口,默认为6379timeout设置客户端连接时的超时时间,单位为秒loglevel分为4级,debug、verbose、notice、warninglogfile配置log文件地址databases设置数据库的个数,默认使用的数据库为0save设置redis进行数据库镜像的频率rdbcompression在进行镜像备份时,是否进行压缩Dbfilename镜像备份文件的文件名Dir数据库镜像备份的文件放置路径Slaveof设置数据库为其他数据库的从数据库Masterauth主数据库连接需要的密码验证Requirepass设置登录时需要使用的密码Maxclients限制同时连接的客户数量Maxmemory设置redis能够使用的最大内存Appendonly开启appendonly模式以下了解即可:Appendfsync设置对appendonly.aof文件同步的频率vm-enabled是否开启虚拟内存支持vm-swap-file设置虚拟内存的交换文件路径vm-max-memory设置redis使用的最大物理内存大小vm-page-size设置虚拟内存的页大小vm-pages设置交换文件的总的page数量vm-max-threads设置VMIO同时使用的线程数量Glueoutputbuf把小的输出缓存存放在一起hash-max-zipmap-entries设置hash的临界值Activerehashing重新hash*******************************************************************5种数据类型:字符串、哈希、链表、集合、有序集合。支持:push/pop、add/remove、取交集、并集、差集、排序。redis<===同步====>mysql同时也会将数据写到硬盘上。所以数据是安全的(除突然断电外,重启服务会写到dump.rdb文件中)*******************************************************************selectnum#选择库,默认在0库,共16个库authliweijie#授权用户所需密码(密码就是redis.conf中配置的密码)flushdb#清空数据库。String(字符串)类型:setnamelijie#设置键name的值为lijiegetname#获取name的值。keys*#查询所有的键。setnxnameliweijie#如果键已存在则返回0,不更新,防止覆盖。setexhaircolor10red#设置键的值的有效期为10秒。setrangeemail6lampbre.com#替换键的值从第6个字符开始换为lampbre.commsetname1李大伟name2李小伟#设置多个键的值。msetnxname1张三name3李四#判断键是否存在,不存在则设置,否则不设置返回0mgetname1name2name3#一次获取多个键的值。getsetname1Tom#重新设置键的值,并返回旧的键值。getrangeemail618#截取email键的值,从第6-18位间的字符。incruid#每次自增1(如果key中uid不存在,则设置并从0开始,下同)incrbyuid5#每次自增5incrbyuid-5#每次自减5decruid#每次自减1decrbyuid5#每次自减5appendname1@126.com#给name1的值,添加字符串@126.comstrlenname1#返回键name1的值的长度。*************************************************************************Hashes(哈希)类型:hsetuser:001nameliweijie#哈希设置用户user:001的name键值为liweijiehsetuser:001age21#同样,增加一个age键值为21hsetnxuser:001age22#同上,但检测键是否存在。若不存在创建。hmsetuser:002nameliweijie2age26sex1#同时设置多个键的值。hgetuser:001name#哈希获取用户user:001的name键的值。hgetuser:001age#同上。hmgetuser:001nameagesex#获取多个指定的键的值。hgetalluser:001#获取所有键的值。hincrbyuser:001age-8#在指定键上加上给定的值。hexistsuser:001sex#检测指定的键值是否存在。hlenuser:001#返回指定哈希的键个数/字段个数。hdeluser:001sex#删除指定(user:001)哈希的指定字段或是键值。hkeysuser:003#返回哈希里所有字段或是键值。*********************************************************************Lists(链表)类型及操作(棧或队列):lpushmylist'world'#从头部插入字符串lpushmylist'hello'#同上lrangemylist0-1#获取从0到最后一个如[1)'hello'2)'world']rpushmylist'jiejie'#在尾部插入linsertmylistbefore'hello''thisislinsert'#指定插入位置(在hello之前插入)。lsetmylist0'what'#设置修改指定下标的值。lremmylist1'hello'#删除(1个)一个值为hello的元素。(n<0从尾部删除,n=0全部删除)ltrimmylist12#保留表中下标为1/2的元素。lpopmylist#弹出开头元素并返回。rpopmylist#弹出尾部元素并返回。rpoplpushmylistmylist2#从mylist尾部弹出插入到mylist2的头部。lindexmylist0#获取表下标为0的元素值。llenmylist#返回表元素个数(相当于count($arr))。*********************************************************************sets(集合)类型及操作(好友推荐、blog、tag功能):smembersmyset#查看myset集合中所有元素值。saddmyset'hello'#向mysets集合中添加一个值hellosremmyset'hello'#删除myset集合中名称为hello的元素。spopmyset#随机弹出并返回mysets中的一个元素。sdiffmyset2myset3#返回myset2中的与myset3的差集(以myset2为准)。sdiffstoremyset4myset2myset3#返回myset2中的与myset3的差集,并存入myset4中去。sintermyset2myset3#返回myset2与myset3的交集。sinterstoremyset5myset2myset3#返回myset2与myset3的交集,并存入myset5中去。sunionmyset2myset3#求并集(去重复)sunionstoremyset6myset2myset3#求并集,并存入myset6中去。smovemyset2myset3'three'#将myset2中的three移到myset3中去。scardmyset2#返回元素个数。sismembermyset2'one'#判断元素one是不是myset2集合的(相当于is_array())。srandmembermyset2#随机返回myset2集合中的一个元素,但不删除(相当于array_rand())。*********************************************************************sortedsets(有序集合)类型及操作(以scores排序):zaddmyzset1'one'#向顺序1的添加元素onezaddmyzset2'two'#同上。zaddmyzset3'two'#相当于更新顺序为2的值zrangemyzset0-1withscores#查看所有元素并带上排序(默认升序)。zremmyzset'two'#删除twozincrbymyzset2'two'#将two的顺序值加上2zrankmyzset'two'#返回集合中元素的索引下标值。zrevrankmyzsettwo#元素反转并返回新下标值。zrevrangemyzset0-1withscores#按顺序反转(相当于降序排序)zrangebyscoremyzset110withscores#返回顺序为1-10的元素(可做分页)。zcountmyzset110#返回顺序在1-10之间元素的个数。zcardmyzset#返回集合中所有元素的个数。zremrangebyrankmyzset12#删除集合中下标为1到2的元素。zremrangebyscoremyzset110#删除集合中顺序为1到10的元素。Redis常用命令键/值相关命令。keys*#查询所有keysuser*#查询指定的existsuser:001#判断是否存在。delname#删除指定的键。expireaddr10#设置过期时间ttladdr#查询过期时间select0#选择数据库moveage1#将age移到1数据库。getage#获取persistage#移除age的过期时间。randomkey#随机返回一个keyrenamename1name2#重命名键typemyset#返回键的类型。ping#测试redis连接是否存活。echolamp#输出一个lampselect10#选择数据库。quit/exit/crtl+C#退出客户端dbsize#返回库里的键的个数。服务器相关命令:info#显示redis服务器的相关信息。configget*/loglevel#返回所有/指定的配置信息。flushdb#删除当前库中的所有键/表。flushall#删除所有数据库中的所有键/表二、Redis高级部分:1、Redis安全性:1.用ACL控制器安全性。2.给redis加上较长密码#requirepassfoobaredrequirepassbeijing3.在redis.conf配置启用认证功能。方式一:Authbeijing方式二:./redis-cli-abeijing4.在redis.conf配置文件增加下面这一行配置,即可把redis绑定在单个接口上(但并不是只有接受这个网卡的数据)。bind127.0.0.1(单台机器的时候可以配置,分布式或主从复制时最好不要配置)5.SSL代理6.禁用指定命令。2、Redis主从复制:redis只需在从服务器(slave)上配置即可:slaveof211.122.11.116379#指定master的ip和端口masterauthbeijing#这是master主机的密码Info#查看主/从服务器的状态。3、Redis事务处理:Redis事务很不完善。4、Redis持久化机制:1.两种方式:一、备份数据到磁盘(快照)[snapshotting(快照)也是默认方式]二、记录操作命令[Append-onlyfile(缩写aof)的方式]一、备份数据到磁盘(快照)[snapshotting(快照)也是默认方式]save9001#900秒内如果超过1个key被修改,则发起快照保存save30010#300秒内容如超过10个key被修改,则发起快照保存save6010000二、记录操作命令[Append-onlyfile(缩写aof)的方式](较安全持久化)appendonlyyes#启用aof持久化方式#appendfsyncalways//收到写命令就立即写入磁盘,最慢,但是保证完全的持久化appendfsynceverysec//每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中#appendfsyncno//完全依赖os,性能最好,持久化没保证三、PHP+Redis组合1.上传模块:owlient-phpredis-2.1.1-1-g90ecd17.tar.gz文件解压tarzxfowlient-phpredis-2.1.1-1-g90ecd17.tar.gzCdowlient-phpredis-g90ecd17//usr/local/php/bin/phpize#执行生成configure文件./configure--with-php-config=/usr/local/php/bin/php-config#配置编译Make&&makeinstall2.修改php.ini文件添加如下:Extension=redis.so重启apache服务器。3.PHP连接Redis服务器connect('localhost',6379);?>
推荐信息