一、基础知识1.1数据库在Redis中,数据库只是简单地用一个数字来标识。数据库的默认编号是0。如果你想切换到不同的数据库,你可以使用select命令来完成。在命令行界面输入select1,Redis应该回复OK信息,然后命令行界面的提示符会变成类似redis127.0.0.1:6379[1]>。如果要切换回默认数据库,只需在命令行界面中键入select0即可。1.2命令、关键字和值Redis不仅仅是一个简单的关键字-值存储。从它的核心概念来看,Redis的5种数据结构中的每一种都至少有一个关键字和一个值。键(Keys)用于标识数据块。值(Values)是与关键字关联的实际值,可以是字符串、整数、序列化对象(使用JSON、XML或其他格式)Redis命令的基本组成,如:setusers:leto"{name:leto,planet:dune,likes:[spice]}”关键字和值是Redis的基本概念,get和set命令最容易用在这个1.3的Redis查询中对于Redis来说,关键字就是一切,而值是没有意义的。Redis不允许按值查询1.4存储和持久化Redis是一种持久化的内存存储(in-memorypersistentstore)默认情况下,Redis会根据发生变化的关键字的个数进行判断,然后存储到磁盘上创建数据库的快照(snapshot)。您可以将其设置为如果X关键字已更改,则每Y秒存储一次数据库。默认情况下,如果更改了1000个或更多关键字,Redis每60秒存储一次数据库,如果更改了9个或更少关键字,则每15分钟存储一次数据库。至于存储,Redis的所有数据都会保存在内存中。显然,运行Redis的成本很高:因为RAM仍然是最昂贵的服务器硬件组件1.5总结关键字(Keys)是一个字符串值(Values),用来标识一段数据是任意字节序列,Redis我不会注意它们的本质。Redis展示(并实现)了5种专门的数据结构。以上几点让Redis快速易用,但要知道Redis并不是适合所有的应用场景。2、Redis数据key的结构不要太长,尽量不要超过1024字节,这样不仅消耗内存,还会降低查找效率。键不能太短。如果太短,键的可读性会降低。在一个项目中,key最好使用统一的命名模式,比如user:10000:passwd2.1strings127.0.0.1:6379>setmynum"2"OK127.0.0.1:6379>getmynum"2"127.0.0.1:6379>incrmynum(integer)3127.0.0.1:6379>getmynum"3"由于INCR等指令具有原子操作的特点,我们可以使用redis的INCR、INCRBY、DECR、DECRBY等指令来实现原子计数的作用,如果,在某个场景下,3个client同时读取mynum的值(值为2),然后同时给它加1,那么mynum的最终值一定是5、很多网站都是利用redis的这个特性来实现业务统计和统计的需求。2.2列表列表常用的操作有LPUSH、RPUSH、LRANGE等。我们可以用LPUSH在列表左边插入一个新元素,用RPUSH在列表右边插入一个新元素,用LRANGE命令指定从列表中提取元素的范围。//创建一个名为mylist的新列表,并在列表头部插入元素“1”127.0.0.1:6379>lpushmylist"1"//返回当前mylist的元素个数(整数)1//插入ontherightsideofmylistElement"2"127.0.0.1:6379>rpushmylist"2"(integer)2//在mylist左侧插入元素"0"127.0.0.1:6379>lpushmylist"0"(integer)3//列出mylist127.0.0.1:6379中0号到1号的元素>lrangemylist011)"0"2)"1"//列出mylist127.0中0号到1号的第一个元素.0.1:6379>lrangemylist0-11)"0"2)"1"3)"2"列表应用广泛,举几个例子:我们可以用列表来实现一个消息队列,并且可以保证顺序,不像MySQL也需要按ORDERBY排序。使用LRANGE也可以轻松实现分页功能。在博客系统中,每篇博文的评论也可以单独存放在一个列表中。2.3集合setredis的集合是一个无序集合,集合中的元素是无序的。集合相关的操作也很丰富,比如添加新元素、删除已有元素、取交、取并、取差等//向集合中添加新元素“一”myset127.0.0.1:6379>saddmyset"one"(integer)1127.0.0.1:6379>saddmyset"two"(integer)1//列出集合中的所有元素myset127.0.0.1:6379>smembersmyset1)"one"2)"two"//判断元素1是否在集合myset中,返回1表示存在127.0.0.1:6379>sismembermyset"one"(integer)1//判断元素3是否在集合myset中,返回0表示不存在of127.0.0.1:6379>sismembermyset"three"(integer)0//新建一个setyourset127.0.0.1:6379>saddyourset"1"(integer)1127.0.0.1:6379>saddyourset"2"(integer)1127.0.0.1:6379>smembersyourset1)"1"2)"2"//求两个集合的并集127.0.0.1:6379>sunionmysetyourset1)"1"2)"one"3)"2"4)“二”对于收藏的使用,也有一些常见的方式,比如QQ有个社交功能叫“好友标签”。2.4有序集sortedsetsRedis也提供了有序集(sortedsets)。有序集合中的每个元素都与一个序列号(分数)相关联,这是排序的基础。很多时候,我们把redis中的有序集称为zsets,因为在redis中,与有序集相关的操作指令都是以z开头的,比如zrange、zadd、zrevrange、zrangebyscore等//新建一个有序集myzset,并添加一个元素baidu.com,分配给它的序号是1:127.0.0.1:6379>zaddmyzset1baidu.com(integer)1//给myzset添加一个元素360.com,分配给它的序号是3127.0.0.1:6379>zaddmyzset3360.com(integer)1//在myzset中添加一个元素google.com,赋给它的编号为2127.0.0.1:6379>zaddmyzset2google.com(integer)1//列出myzset的所有元素,同时列出它们的序号,可见myzset已经有序了。127.0.0.1:6379>zrangemyzset0-1withscores1)"baidu.com"2)"1"3)"google.com"4)"2"5)"360.com"6)"3"//只列出myzset127.0.0.1:6379的元素>zrangemyzset0-11)"baidu.com"2)"google.com"3)"360.com"2.5hash散列存储字符串和字符串值之间的映射,比如一个用户想存储自己的全名、姓氏、年龄等,就很适合使用hash//构建一个hash并赋值127.0.0.1:6379>HMSETuserusernameantirezpasswordP1pp0age34OK//列出hash的内容127.0.0.1:6379>HGETALLuser1)"username"2)"antirez"3)"password"4)"P1pp0"5)"age"6)"34"//改ha某某valueinGreek127.0.0.1:6379>HSETuserpassword12345(integer)0//再次列出hash的内容127.0.0.1:6379>HGETALLuser1)"username"2)"antirez"3)"password"4)"12345"5)"age"6)"34"3、Redis持久化——RDB和AOF持久化不在入门范围。我找到了几篇不错的文章。有兴趣欢迎阅读redis持久化RDB和AOF【Redis持久化RDB和AOF对比】【redis系列:RDB持久化和AOF持久化】四、Redis.conf文件配置项redis.conf配置项解释如下:Redis默认不作为守护进程运行,你可以通过这个配置项修改,使用yes启用守护进程daemonizeno当Redis作为守护进程运行时,Redis会将pid写入/var/run/redis.pid默认为file,可以通过pidfile指定pidfile/var/run/redis.pid指定Redis监听端口。默认端口是6379,这里有个故事,因为6379是手机按键上MERZ对应的号码,MERZ取从意大利歌手AlessiaMerz的名字6379端口绑定的主机地址是bind127.0.0.1。当客户端长时间空闲时,连接将被关闭。如果指定为0,则意味着该函数将被关闭。timeout30指定日志记录级别,Redis一共支持四种Level:debug、verbose、notice、warning,默认为verboseloglevel详细日志记录方式,默认为标准输出,如果Redis配置为守护进程运行,以及日志记录模式在这里配置为标准输出,日志将被发送到/dev/nulllogfilestdout设置数据库的数量。默认数据库为0。您可以使用SELECT
