Redis-入门学习一小时学会redis的使用方法!RedisRedis简介Redis常用命令Redis实用案例Redis简介Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API.速度非常快的非关系数据库,它可以存储键(key)与5种不同类型的值(value)之间的映射。KV存储适合涉及数据关系和业务关系较少的场景。有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。Redis数据类型Keys非二进制安全的字符类型ValuesStrings字符串Lists列表Sets集合Sortedsets有序集合Hash哈希KeyKey也是一个字符串类型非二进制安全,不允许出现空格或换行符命名时避免过长或过短Key相关命令existskey测试指定key是否存在,返回1表示存在delkey1key2...keyN删除给定key,返回删除key的数目,0表示给定key都不存在typekey返回给定key的value类型,返回none表示不存在。keyspattern支持*,等正则符号。键值过期EXPIREkeyseconds,为给定key设置过期时间EXPIREATkeytimestamp,EXPIREAT的作用和EXPIRE类似Redis数据类型(1)-StringRedis中最简单的类型二进制安全可以包含图片或序列化对象在内的任何数据最大上限1GString相关命令Set(key,value):设置key对应的值为String类型的value,返回1表示成功。Setnx(key,value):同上,如果key已经存在,返回0。Get(key):获取key对应的string值,如果不存在返回nilGetset(key,value):设置key的值,并返回key的原有值。Mget(key1key2...keyN):一次获取多个值,不存在则返回nil。Mset(key1,value1..keyN,valueN):一次设置多个值,返回OK表示所有值都设置了,失败返回0表示没有任何值被设置。msetnx:同上,但是不会覆盖已经存在的key。incr(key):对key的值做加加操作,并返回新的值。decr(key):对可以的值做减减操作,decr一个不存在的key,则设置key为-1。Incrby(key)integer:同incr,加指定值。Decrby(key)integer:同decr,减去指定值。Append(keyvalue):给指定的key的字符串追加value,返回新的字符串长度。Substr(keystartend):返回截取过的key的字符串值,但不修改原有字符串值。Redis数据类型(2)-Listlist主要功能是push、pop、获取一个范围的所有值等。list类型其实就是一个每个子元素都是string类型的双向链表。链表的最大长度是2的32次方。list既可以用作栈,也可以用作队列。List相关命令lpush,在key对应list的头部添加字符串元素rpush,在key对应list的尾部添加字符串元素linsert,在key对应list的特定位置之前或之后添加字符串元素lset,设置list中指定下标的元素值lrem,从key对应list中删除count个和value相同的元素。count0时,按从头到尾的顺序删除,count0时,按从尾到头的顺序删除,count=0时,删除全部.Rpopkey,移除并返回列表最右端的元素Lpopkey,移除并返回列表最左端的元素Lindexkeyoffset,返回列表中偏移量为offset的元素Redis数据类型(3)-setRedis的set是string类型的无序集合。Set元素最大可以包含2^32−1个元素hashtable实现的,所以CRUD的复杂度都O(1)。set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐和blog的tag功能.Set相关命令sadd,向名称为key的set中添加元素srem,删除名称为key的set中的元素memberspop,随机返回并删除名称为key的set中一个元素smembers,查看set中的所有元素scard,返回名称为key的set的元素个数sdiff,返回所有给定key与第一个key的差集sinter,返回所有给定key的交集sunion,返回所有给定key的并集Redis数据类型(4)-zsetsortedset(zset)是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。zset也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sortedset的实现是skiplist和hashtable的混合体。当元素被添加到集合中时,一个元素到score的映射被添加到hashtable中,所以给定一个元素获取score的开销是O(1),另一个score到元素的映射被添加到skiplist,并按照score排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是O(log(N))和skiplist的开销一致,redis的skiplist实现用的是双向链表,这样就可以逆序从尾部取元素。sortedset最经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为score存储,对象的id当元素存储。Sortedset相关命令zadd,向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序zrem,删除名称为key的zset中的元素memberzincrby,如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为incrementzrank,返回名称为key的zset中member元素的排名(按score从小到大排序)即下标zrevrank,返回名称为key的zset中member元素的排名(按score从大到小排序)即下标zcard,返回集合中元素个数Redis数据类型-hash(5)RedisHash是一个string类型的field和value的映射表hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。Hash相关命令hset,设置hashfield为指定值,如果key不存在,则先创建。hsetnx,设置hashfield为指定值,如果key不存在,则先创建hmset,同时设置hash的多个field。hget,获取指定的hashfieldahmget,获取全部指定的hashfiled。发布与订阅Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。Redis发布订阅命令PSUBSCRIBEpattern[pattern...]订阅一个或多个符合给定模式的频道。PUBSUBsubcommand[argument[argument...]]查看订阅与发布系统状态。PUBLISHchannelmessage将信息发送到指定的频道。PUNSUBSCRIBE[pattern[pattern...]]退订所有给定模式的频道。SUBSCRIBEchannel[channel...]订阅给定的一个或多个频道的信息。UNSUBSCRIBE[channel[channel...]]只退订给定的频道。实例事务事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务命令DISCARD取消事务,放弃执行事务块内的所有命令。EXEC执行所有事务块内的命令。MULTI标记一个事务块的开始。UNWATCH取消WATCH命令对所有key的监视。WATCHkey[key...]监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。实例Redis使用场景Counting(计数)Top10list(排行榜)、用户投票和时间排序LastIndex删除与过滤消息队列缓存Thanks