Redis数据类型的使用场景

String

get/set mget/mset

说明:设置/批量设置键值信息,value可以是任何形式的字符串

用法:

set key value

get key

场景:

常规缓存使用方式

incr/decr

说明:将key中的数值增/减1,如果key不存在会先初始化为0再加1,该操作是原子性的

用法:

incr key

get key

场景:

结合expire用做计数器和限数器

如某篇文章点击量通过incr article:id来计数,用get article:id来获取

setbit/getbit/bitcount

说明:设置指定偏移量上的位;获取指定偏移量上的位;指定key中,位值为1的数量

用法:

setbit key offset value

getbit key offset

bitcount key

场景:

活跃数统计,开关等

如日活跃人数,通过setbit dayactive:yyyyMMdd userid 1,通过bitcount dayactive:yyyyMMdd来获取

setnx/getset

说明:当key不存在时候将key的值设为value,存在不做操作;将key的值设为value,并返回key的旧值

用法:

setnx a 11

getset a 22

场景:

分布式锁实现

Hash

hset/hget/hkeys/hgetall

说明:当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

lpush/rpop/brpop/lrange/llen

说明:list是redis比较重要的一个数据结构,支持插入列表、弹出队列、阻塞弹出队列、返回列表元素、获取列表长度等操作

用法:

lpush ls 1 2 3 4 5

lrange ls 0 -1

场景:

列表、消息队列等

如列表反向cache,通过列表存储数据库存储信息,然后在从数据库中获取详细信息

如生产者往队列中插入消息lpush queue:topic:name msg,消费者通过rpop lsbrpop ls 10来消费消息

Set

sadd/srem/sdiff/sinter/smembers/sunion

说明:实现了集合相关的添加、删除、差集、交集、并集等操作

用法:

sadd s1 1 2 3 5 6

sinter s1 s2

场景:

好友、关注、被关注、共同好友等

如关注我的人,通过sadd user:myid 10来关注我,通过smembers user:myid来获取关注我的人

SortedSet

zadd/zrem/zcard/zrange/zrank/zrangebyscore

说明:可以添加元素的权重和值到key中,并按权重来获取序列

用法:

zadd ls 10 a1 6 a2 17 a3

zrange ls 0 -1

场景:

排行榜、有序队列

如排名前10的玩家,通过zadd user:leaderboard score userid来设置玩家分值,通过zrevrange user:leaderboard 0 10来获取