redis支持五种数据类型:字符串、哈希表、列表、集合和有序集合。
下面介绍这几种数据类型分别能实现哪些功能。
字符串(String)
锁
使用setnx实现。
setnx key value
,只有在key不存在时,将key的值设置为value。
设置成功(key不存在)返回1,设置失败返回0。
setnx获取锁:如果返回1,获取成功;如果返回0,则锁已经被其他线程获取。
del释放锁。
ID生成器
使用incr实现。
incr key
,为key存储的值上加1。
哈希表(Hash)
生成短网址
使用hset实现。
hset hash field value
,将哈希表hash中域field的值设置为value。hash找到哈希表,field找到此哈希表中对应的key-value。
通过incr生成唯一id,再将id转成36进制,然后将得到的值做field,真实网址做value,存到redis中。
通过hget取出真实网址。
列表(List)
先进先出队列
使用rpush,lpop实现
rpush key value
,将值插入列表key的尾部。
lpop key
,移除并返回列表key的头元素。
带阻塞功能的先进先出队列
使用rpush,blpop实现
rpush key value
,将值插入列表key的尾部。
blpop key timeout
,当列表内没有任何元素可以弹出的时候,blpop将会阻塞,等待timeout时间或者发现可弹出元素为止。
集合(Set)
点赞功能
使用sadd,srem实现。
sadd key member
,往集合key中添加member元素。如果集合中没有此member,添加成功,返回1,表示点赞成功。如果集合中有此member,添加失败,返回0,表示点赞无效(不能重复点赞)。
srem key member
,移除集合key中的member元素,表示取消点赞。
注意:redis中的Set是String类型的无序集合
抽奖功能
使用sadd,srandmember实现。
sadd key member
,往集合key中添加member元素。表示所有的抽奖用户。可以使用smembers key
查询集合中所有成员。
srandmember key
,返回集合中的一个随机元素。从2.6版本开始,可以使用srandmember key count
同时返回几个随机元素。
如果抽过奖的元素不能再此抽奖,可以使用spop key
移除并返回集合中的一个随机元素。
有序集合(sorted set)
排行榜
使用zadd,zrange实现。
zadd key score member
,将一个member元素及其score值加入到有序集合key中。score值可以是整数或者浮点数。
zrange key start stop withscores
,返回一个递增集合(score从小到大),下标从start开始到stop结束,0表示第一个元素,1表示第二个元素,-1表示最后一个元素,-2表示倒数第二个元素。withscores表示成员和score一起返回。
如果需要返回递减集合,可以使用zrevrange key start stop withscores
来实现。
zrank key member
,返回有序集合key中成员member的排名。