redis使用场景
string类型
-
字符串常见操作
set key value //存入键值对
mset key value [key value…] //批量存储字符串键值对
setnx key value //存入一个不存在的字符串键值对
get key //获取一个字符串
mget key [key…] //批量获取字符串键值
del key [key…] //删除一个键
expire key seconds //设置一个键的过期时间(秒)
-
原子加减
incr key //将key中存储的数字值加一
decr key //将key中存储的数字值减一
incrby key increment //将key中所存储的值加上increment
decrby key decrement //将key所存储的值减去decrement
-
string应用场景
-
单值缓存
- set key value
- get key
-
对象缓存
-
set name value (一般会使用json格式当作value数据)
-
mset 可以将json数据解开,存成多个键值对
-
案例:set customer:1 value(json数据)
mset customer:1:xx value customer:1:yy value
-
-
分布式锁
- setnx product true //返回1代表获取锁成功
- setnx product true //返回0代表获取锁失败
- del product //执行完业务释放锁
-
计数器
- 文章计数器 阅读量 incr article:num
-
hash类型
-
hash常用操作
hset key field value //存储一个哈希key的键值
hsetnx key field value //存储一个不存在的哈希表key的键值
hmseet key field value[field value…] //在一个哈希表key中存储多个键值对
hget key field //获取哈希表key对应的field 的值
hmget key field[field…] //批量获取哈希表key中多个field 的值
hdel key field [field…] //删除哈希表key中的field的键值
hlen key //返回哈希表key中的field的数量
hgetall key //返回哈希表key中所有的键值
hincrby key field increment //为哈希表key中field键的值加上增量increment
-
hash应用场景
-
对象缓存
- hmset user userid1:name value userid1:age 14
- hmset user userid2:name value userid2:age
-
购物车
hmset user product1:name value prodeuct1:num value
-
-
hash优缺点
- 优点
- 同类数据归类整合存储,方便数据管理
- 相比string操作消耗内存与cpu更小
- 相比string存储更节省空间
- 缺点
- 过期功能不能使用在field上,只能使用在key上
- Redis集群架构下不适合大规模使用
- 优点
list类型
-
list常用操作
lpush key value[value…] //将一个或多个值value插入到key列表的表头(最左边)
rpush key value[value…] //将一个或多个value插入到key列表的表尾(最右边)
lpop key //移除并返回key列表的头元素
rpop key //移除并返回key列表的尾元素
lrange key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定
blpop key [key…] timeout //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout
秒,如果timeout=0,一直阻塞等待
brpop key [key…] timeout //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout
秒,如果timeout=0,一直阻塞等待
-
list应用场景
- 栈(stack)
- lpush + lpop —>FILO
- 队列(queue)
- lpush + rpop
- 阻塞队列(Blocking MQ)
- lpush + brpop
- 微博微信消息流
- 使用lpush放入用户ID消息,然后使用lrange 来获取消息
- 栈(stack)
set类型
-
set常用操作
sadd key member [member…] //往集合key中存入元素,元素存在则忽略,若key不存在则创建
srem key member[member…] //从集合key中删除元素
smembers key //获取集合key中的所有元素
scard key //获取集合key中的元素的个数
sismemver key member //判断member元素是否存在于集合key中
srandmember key [count] //从集合key中选出count个元素,元素不从key中删除
spop key [count] //从集合key中选出count个元素,元素从key中删除
-
set运算操作
sinter key [key…] //交集运算
sinterstore destination key [key…] //交集结果存入新集合destination中
sunion key [key…] //并集运算
sunionstore destination key [key…]//并集结果存入新集合destination中
sdiff key [key…] //差集运算
sdiffstore destination key [key…] //差集结果存入新集合destination中
-
set使用场景
- 微信抽奖小程序
- 点击参与抽奖加入集合 sadd key {userID}
- 查看参与抽奖所有用户 smembers key
- 抽取count名中奖者 srandmember key [count]/spop key [count]
- 微信微博点赞、收藏、标签
- 点赞 sadd user ID
- 取消点赞 srem user ID
- 检查用户是否点过赞 sismember user ID
- 获取用户点赞列表 smembers user
- 获取点赞用户数 scard user
- 关注模型 (使用集合)
- 共同关注的人 ------ 交集
- 可能认识的人 ------- 差集
- 微信抽奖小程序