工作一两年以上的小伙伴应该都知道redis,相信基本的五种数据结构类型也能说出来,但是不一定能说出来其他特殊数据类型以及各种数据类型的使用场景。今天我们就一起来看看redis各种基础数据类型的使用场景吧,本来就很熟悉的大佬全当复习了。
一 string应用场景
1,单值缓存
set key value
get key
这个应该是大家最熟悉的。比如存某商品的库存数量,某个分布式场景下需要共同分享的值等等。
2,对象缓存
set user:1001 userstr
比如把用户对象转成json窜存储,这个也是可以的。
3,分布式锁
setnx redislock value
提到分布式锁,就不得不提redis了,但是要想基于redis自己写出一把完善的分布式锁还是有点难度的,当然redisson很多方面做得很完善了,有兴趣的小伙伴可以自行百度。
4,计数器
incr key
get key
比如说文章点赞数的累加,阅读量的累加等等。
5,分布式系统全局系列号
incrby id step
用这个方法时需考虑在高并发场景下,获取全局序列号过于频繁,可以增大步长,一次性获取多个序列号。
二 hash应用场景
1,对象缓存
hmset user:1001 id 1 name zhangsan
hmget user:1001 id name
对象属性比较多,需要修改的属性又比较少的情况就很适合。
2,购物车
添加购物车:hset cart:用户id 商品id 商品数量
增加商品数量:incrby cart:用户id 商品id 增加商品数
删除商品:hdel cart:用户id 商品id
获取总的商品类别数:hlen cart:用户id
获取所有商品:hgetall cart:用户id
三 list应用场景
1,实现常用数据结构
stack(栈):lpush+lpop 或者 rpush+rpop
queue(队列):lpush+rpop 或者 rpush+lpop
blocking queue(阻塞队列):lpush +brpop 或者 rpush+blpop
jdk里的数结构很丰富,但是仅限于本地jvm操作,redis实现的数据结构可实现分布式服务共同操作。
四 set应用场景
1,抽奖活动
参与抽奖:sadd key 用户id
查看参与者:smembers key
开奖(两名):srandmember key 2 或者 spop key 2
2,数据去重
set当中存在的值,再次存储将返回0。
3,集合操作
交集:sinter set1 set2 set3...
并集:sunion set1 set2 set3...
差集:sdiff set1 set2 set3 (以set1为基准)
这个实现社交软件的获取共同好友,好友推荐是很简单的。
五 zset应用场景
1,排行榜
zadd key score value
zrange key start stop [withscores]
当然,这只是很小一部分,redis绝不是只能做缓存存数据,熟练应用redis的话,很多功能都会变得很简单。
学无止境,让学习成为一种习惯。
本人水平有限,有不对的地方请指教,谢谢。