004 redis数据结构

目录

String应用场景

hash

list使用场景

微博消息和微信公众号消息

微博消息和微信公众号消息  -->  推模式 数量少

Set使用

微信抽奖小程序

微信微博点赞,收藏,标签

集合

关注模型:

ZSet 有序集合

实现排行榜,微博热搜

拉模式 


redis单线程操作,挨个操作,有一个慢,会导致阻塞

String应用场景

 

 

单个缓存对象缓存分布式缓存
set key valueset user:1 value(json格式数据)

线程1:setnx product:10001 true //返回1代表获取锁成功

线程2:setnx product:10001 false//返回0代表获取锁失败

---执行业务操作

del product:10001   //执行完业务释放锁

set product:10001 true ex 10 nx //防止程序意外终止导致死锁

get key

mset user:1 name:ceshi

mget user:1 name:ceshi

 
改其中一个,用户的json转对象,改后再转json放redis改其中一个对象的数据,直接mset一个字段 

计数器

 incr

对象存储

 挨个操作,有一个慢,会导致阻塞  解决方式:大的数据分段存储,取模操作

hash

电商场景:购物车  1)以用户id作为key  2)商品id作为field 3)数量作为value

  1添加商品  

1添加商品hset cart:1001  10081 1  
2增加数量hincrby cart:1001  10081 1  
3商品总数hlen   cart:1001  
4删除商品hdel cart:1001  10081  
5获取购物车所有商品hgetall   cart:1001  

 

redis集群架构  数据分片存储

   没有对数据做合理分段

 

list使用场景

微博消息和微信公众号消息

lpush key value

 常用数据结构  

Stack

lpush+lpop先进后出
Queue队列lpush+rpop先进先出
Blocking MQ阻塞队列lpush+brpop 

redis发一条消息,执行几百条命令,几百毫秒,可以放在管道里面 

微博消息和微信公众号消息  -->  推模式 数量少

A(id为16666)关注了Mk,飞天等大V

1)Mk发微博,消息Id为10018   lpush msg:16666 10018

2)飞天发微博,消息id为10020  lpush msg:16666 10020

3)查看最新微博消息     lrange msg:16666 0 5  

[root@iZ2ze2n8lmniujpxvsfuceZ redis]# cd redis
[root@iZ2ze2n8lmniujpxvsfuceZ redis]# redis-cli  //进入redis客户端
127.0.0.1:6379> 
127.0.0.1:6379> auth "123456"  //输入密码
OK
127.0.0.1:6379> lpush msg:16666 10018
(integer) 1
127.0.0.1:6379> lpush msg:16666 10020
(integer) 2
127.0.0.1:6379> lrange 16666 0 5
(empty array)
127.0.0.1:6379> lrange msg:16666 0 5  //后发的消息在前面
1) "10020"
2) "10018"
127.0.0.1:6379> 

 

 

Set使用

微信抽奖小程序

1)点击参与抽奖加入集合  sadd act:101 1888 

2)查看参与抽奖所有用户 smembers act:101

3)抽取count名中奖者srandmember act:101 2 (不删除之前抽取的)     spop act:101 3(删除之前抽取的)

[root@iZ2ze2n8lmniujpxvsfuceZ ~]# redis-cli
127.0.0.1:6379> auth "123456"
OK
127.0.0.1:6379> sadd act:101 1888
(integer) 1
127.0.0.1:6379> sadd act:101 1889
(integer) 1
127.0.0.1:6379> sadd act:101 1890
(integer) 1
127.0.0.1:6379> sadd act:101 1890
(integer) 0
127.0.0.1:6379> sadd act:101 1891
(integer) 1
127.0.0.1:6379> sadd act:101 1892
(integer) 1
127.0.0.1:6379> sadd act:101 1893
(integer) 1
127.0.0.1:6379> sadd act:101 1894
127.0.0.1:6379> smembers act:101
1) "1888"
2) "1889"
3) "1890"
4) "1891"
5) "1892"
6) "1893"
7) "1894"
127.0.0.1:6379> srandmember act:101 2
1) "1894"
2) "1893"
127.0.0.1:6379> srandmember act:101 2
1) "1891"
2) "1889"
127.0.0.1:6379> spop act:101 3
1) "1894"
2) "1892"
3) "1891"
127.0.0.1:6379> smembers act:101
1) "1888"
2) "1889"
3) "1890"
4) "1893"

微信微博点赞,收藏,标签

1)点赞  sadd like:{消息id} {用户id}

2)取消点赞 srem like:{消息id} {用户id}

3)检查用户是否点过赞  sismember  like:{消息id} {用户id}

4)获取点赞的用户列表  smembers  like:{消息id}

5)获取点赞用户数  scard   like:{消息id}

集合

SDIFF:以第一个集合为基准,减去后面所有集合的并集(合集);

关注模型:

作用:推荐系统

ZSet 有序集合

有索引下标

实现排行榜,微博热搜

拉模式  list

推模式(见上)大v发消息,推给粉丝 。-->粉丝少

大V发一条消息到队列,用户拉取信息,本地展示; 几千万,上亿的有专门服务器

拉的模式,拉取下比对,再根据时间排序,展示列表

消息流 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值