Redis数据类型及使用场景redis
说明:设置/批量设置键值信息,value能够是任何形式的字符串数据库
用法:json
set key value
缓存
get key
数据结构
场景:分布式
常规缓存使用方式优化
说明:将key中的数值增/减1,若是key不存在会先初始化为0再加1,该操做是原子性的code
用法:对象
incr key
队列
get key
场景:
结合expire
用作计数器和限数器
如某篇文章点击量经过incr article:id
来计数,用get article:id
来获取
说明:设置指定偏移量上的位;获取指定偏移量上的位;指定key中,位值为1的数量
用法:
setbit key offset value
getbit key offset
bitcount key
场景:
活跃数统计,开关等
如日活跃人数,经过setbit dayactive:yyyyMMdd userid 1
,经过bitcount dayactive:yyyyMMdd
来获取
说明:当key不存在时候将key的值设为value,存在不作操做;将key的值设为value,并返回key的旧值
用法:
setnx a 11
getset a 22
场景:
分布式锁实现
说明:当key不存在时候将key的值设为value,存在不作操做;将key的值设为value,并返回key的旧值
用法:
hset key field value
hget key field
hkeys key
hgetall key
场景:
存储对象信息,用于优化普通键值存储
如原来存储用户的年龄、姓名、性别等信息须要set user:userid {\"name\":\"lily\",\"age\":18,\"sex\":1}
这样把信息转出json后再存,
当数据量大的时候十分占用内存;
用hash类型能够很好解决这个问题
经过hmset user:userid name lily age 18 sex 1
来存储
经过hgetall user:userid
获取所有内容
经过hget user:userid name
获取某个属性
说明:list是redis比较重要的一个数据结构,支持插入列表、弹出队列、阻塞弹出队列、返回列表元素、获取列表长度等操做
用法:
lpush ls 1 2 3 4 5
lrange ls 0 -1
场景:
列表、消息队列等
如列表反向cache,经过列表存储数据库存储信息,而后在从数据库中获取详细信息
如生产者往队列中插入消息lpush queue:topic:name msg
,消费者经过rpop ls
和brpop ls 10
来消费消息
说明:实现了集合相关的添加、删除、差集、交集、并集等操做
用法:
sadd s1 1 2 3 5 6
sinter s1 s2
场景:
好友、关注、被关注、共同好友等
如关注个人人,经过sadd user:myid 10
来关注我,经过smembers user:myid
来获取关注个人人
说明:能够添加元素的权重和值到key中,并按权重来获取序列
用法:
zadd ls 10 a1 6 a2 17 a3
zrange ls 0 -1
场景:
排行榜、有序队列
如排名前10的玩家,经过zadd user:leaderboard score userid
来设置玩家分值,经过zrevrange user:leaderboard 0 10
来获取