Redis数据类型及使用场景

Redis数据类型及使用场景redis

String

get/set mget/mset

说明:设置/批量设置键值信息,value能够是任何形式的字符串数据库

用法:json

set key value缓存

get key数据结构

场景:分布式

常规缓存使用方式优化

incr/decr

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

用法:对象

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来获取