Redis核心数据结构及使用场景

大家现在估计都在项目中或多或少的使用redis,这篇文章主要叙述它主要的数据结构。
redis的存储数据结构大致分为5种:
在这里插入图片描述
1.String

set k1 jsonc ---------->get k1
append k1 abc 追加
mset k2 a k3 a  批量操作
getset k2 c  对c 重新赋值并返回旧值
setex k3 2 k3 设置值 并且2s中后过期
setnx k4 k4 如果没有k4 则设置成功,返回1,若有则设置不成功
strlen k4 返回k4的string类型value的长度
incr k 对k 每次增加一
decr k 每次减一
incrby  key  increment 		将key所储存的值加上increment
decrby  key  decrement 	将key所储存的值减去decremen

通过以上列举3个使用场景:

单值缓存:set k1 value 
                  get key 
 对象缓存:
                set user value(json格式数据)
                mset user:name cgm user:age 18 user:tel 10086
                mget user:name user:age user:tel 
 分布式锁:
                 setnx key  value 如果key不存在则成功,反之不成功
                 。。。。业务逻辑
                 del key  使用完释放锁
                 set key key ex 10 nx  解决上述的锁在异常情况的死锁问题
  网页浏览次数、文章点击量:
                  set www  0  
                  incr www  每次浏览加1 
                  get www
 web集群session共享 
                  spring session  +redis 实现

2.Hash

hset k f v  设置k 中f字段的值为v
hsetnx k f v 在不存在时设置成功
hmset k f1 v1 f2 v2 ...批量设置
hget k f 获取f的值
hmget k f1 f2 ...批量获取
hdel k f 删除字段f
hlen k  k中字段的个数
hgetall key 获取全部键值对
hincrby k f 1 对f字段加1

使用场景

对象缓存:
   hmset user name cgm age 18
   hmget user nage age
微博用户的信息、帖子信息
购物车:
   用户id为key
   商品id为f
   数量为v
   添加商品:hset 100car  1000 1
   增加商品数量: hincrby 100car 1000 1
   商品总数: hlen 100car
   删除商品:hlen 100car 1000
   获取购物车所有商品:hgetall 100car

3.List
放入是有顺序的

lpush key value ... 从左边插入值  
rpush key value ... 从右边插入值
lpop key 从左边删除一个值,并返回
rpop key 从右边删除一个值,并返回
lrang key start stop 返回key中指定区间的元素
blpop key ... timeout 从左边弹出元素,阻塞等待timeout秒,若timeout 为0 ,则一直阻塞
brpop key ... timeout 

使用场景

栈: lpush +lpop  /  rpush+rpop
队列: rpush+lpop  /lpush+rpop
阻塞队列:lpush+brpop
数据列表的分页展示,使用lrang k start stop 分页加载

4.set
无重复

常用操作
sadd key m1 m2... 往集合中添加元素
srem key m1 m2 ... 从集合中删除元素
smembers key 集合中所有元素
scard key 集合中元素的个数
sismember key m 判断m是否在集合key中
srandmember key count 从集合中随机选出count个元素,元素不从key中删除
spop key count 从集合中移除count个元素,元素从key中删除

运算操作
sinter k1 k2... 交集运算
sinterstore destination k1 k2... 将交集运算存入新集合distination中
sunion k1 k2 ...并集运算
sunionstore destination k1 k2 .. 将并集运算存入新集合distination中
sdiff k1 k2 ... 差集运算
sdiffstore destination k1 k2... 将差集运算结果存放disination中
....

使用场景

微博帖子点赞数、评论数:
      sadd articleId  userId 
      scard articleId
      hmset articleId likeNums 0 reviewNums 0
      hincrby articleId likeNums 1
      hincrby articleId reviewNums 1
微博帖子点赞用户Id列表、评论Id列表:
       sadd articleId  userId 
       smermbers articleId
       取消点赞:
       srem articleId userId

zset

zadd key soure m1 soure m2 ...  往有序集合key 中加入元素 ,会使用soure排序
zrem key m1 m2... 从有序集合key中删除元素
zsoure key m1 返回有序集合key中m1的分值
zincrby key increment m1 为有序集合key中元素m1增加increment
zcard key 返回key中元素个数
zrange key start stop withscores  正序有范围的获取集合key中的元素
zrevrange key start stop withscores 倒序有范围的获取集合key中的元素

运算操作
zunionstore dest numkeys k1 k2  并集运算
zinterstore dest numkeys k1 k2 交集运算

使用场景

微博排行榜
点击新闻 :zincrby 20200101  1  bci
展示当日排行前十: zrevrange 20200101 0 9 withscores
七日榜单:zunionstore 20200101-20200107 7 20200101....20200107 
 展示七日排行前十:zrevrange 20200101-20200107 0 9 withscoures
 ....

更多的命令以及学习资料都在redis.cn中文网站,很详细。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值