1-Redis架构设计到使用场景-四种部署运行模式(上)
2-Redis架构设计到使用场景-四种部署运行模式(下)
3-Redis架构设计到使用场景-主从集群和分片集群
4-Redis架构设计到使用场景-string、list、set、zset、hash使用场景
4-Redis架构设计到使用场景-Redis数据结构与使用场景
5-Redis架构设计到使用场景-Redis请求执行过程
6-Redis架构设计到使用场景-存储原理-数据类型底层结构
7-Redis架构设计到使用场景-持久化机制、缓存失效策略、缓存命中率
8-Redis架构设计到使用场景-缓存穿透、缓存雪崩、缓存预热、缓存降级
从业务上,商品库存数据是热点数据,交易行为会直接影响库存。而Redis自身string类型提供了原生命令。
incr key
decr key
incrby key increment
decrby key decrement
依次类推的场景:商品的浏览次数,问题或者回复的点赞次数等,这种计数的场景都可以考虑利用Redis来实现。
Redis的数据存储具有自动失效能力,存储的key-value可以设置过期时间。
例如,用户登录某个App需要获取登录验证码,验证码在30秒内有效。就可以使用string类型存储验证码,同时设置30秒的失效时间。
keys = redisCli.get(key);
if(keys != null)
{
return false;
}
else
{
sendMsg();
redisCli.set(keys, value, expireTime);
}
list是按照插入顺序排序的字符串链表,可以在头部和尾部插入新的元素(双向链表实现,两端添加元素的时间复杂度为O(1))。
有很多专业的消息队列组件Kafka、RocketMQ、RabbitMQ等。这里仅仅是使用list的特征来实现消息队列的要求。在实际技术选型的过程中,对于MQ使用需要慎重权衡考虑。
list存储就是一个队列的存储形式:
在电商网站首页经常会有新上架产品推荐的模块,这个模块存储了最新上架前100名。使用Redis的list数据结构,进行TOP产品的存储。
Redis的ltrim命令可以对一个列表进行修剪,list就会只包含指定范围的指定元素。
ltrim key start stop
start和stop都是由0开始计数,0是列表里的第一个元素(表头)。
// 把新上架商品添加到链表里
ret = r.lpush("new:goods", goodsId)
// 保持链表100位
ret = r.ltrim("new:goods", 0, 99)
// 获得前100个最新上架的商品id列表
newest_goods_list = r.lrange("new:goods", 0, 99)
set存储了一个无序集合,具备去重功能。
当需要存储一个列表信息,同时要求列表内的元素不能有重复,用set比较合适。与此同时,set还提供求交集、并集、差集。
例如,在电商网站,存储用户感兴趣的商品信息,在进行相似用户分析时,可以通过计算两个不同用户之间感兴趣商品的数量来提供一些依据。
// userid为用户ID,goodID为感兴趣的商品信息
// sadd "user:userId" goodID
sadd "user:101" 1
sadd "user:101" 2
sadd "user:102" 1
sadd "user:102" 3
sinter "user:101" "user:102"
// 解果为1
获取到两个用户相似的产品,然后确定相似产品的类目就可以进行用户分析。类似的应用场景还有,社交场景下共同关注好友,相似兴趣tag等。
Redis在存储对象(例如,用户信息)的时候需要对对象进行序列化转换然后存储。
对于对象类型,还有一种比较方便的存储方式,按照Redis的hash类型进行存储。
hset key field value
例如,存储一些网站用户的基本信息。
hset user101 name "isisiwish"
hset user101 phone "1008611"
hset user101 sex "男"
以上就存储了一个用户基本信息。
{
"name": "isisiwish",
"phone": "1008611",
"sex": "男"
}
这种类似场景还很多,例如订单数据,产品数据,商家基本信息等。
Redis sorted set的使用场景与set类似,区别是set无序的,而sorted set可以通过提供一个score参数来为存储数据排序,并且是自动排序,插入既有序。业务中如果需要一个有序且不重复的集合列表,就可以选择sorted set数据结构。
比如,商品的购买热度可以将购买总量num当做商品列表的score,这样获取最热门的商品时就是可以自动按售卖总量排好序。sorted set适合有排序需求的集合存储场景。
1-Redis架构设计到使用场景-四种部署运行模式(上)
2-Redis架构设计到使用场景-四种部署运行模式(下)
3-Redis架构设计到使用场景-主从集群和分片集群
4-Redis架构设计到使用场景-string、list、set、zset、hash使用场景
4-Redis架构设计到使用场景-Redis数据结构与使用场景
5-Redis架构设计到使用场景-Redis请求执行过程
6-Redis架构设计到使用场景-存储原理-数据类型底层结构
7-Redis架构设计到使用场景-持久化机制、缓存失效策略、缓存命中率
8-Redis架构设计到使用场景-缓存穿透、缓存雪崩、缓存预热、缓存降级