4-Redis架构设计到使用场景-string、list、set、zset、hash使用场景

专栏目录

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架构设计到使用场景-缓存穿透、缓存雪崩、缓存预热、缓存降级

应用场景

string类型使用场景

商品库存数

从业务上,商品库存数据是热点数据,交易行为会直接影响库存。而Redis自身string类型提供了原生命令。

incr key
decr key
incrby key increment
decrby key decrement
  1. set goods_id 10,设置id为goods_id的商品的库存初始值为10
  2. decr goods_id,当商品被购买时候,库存数据减1

依次类推的场景:商品的浏览次数,问题或者回复的点赞次数等,这种计数的场景都可以考虑利用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类型使用场景

list是按照插入顺序排序的字符串链表,可以在头部和尾部插入新的元素(双向链表实现,两端添加元素的时间复杂度为O(1))。

消息队列实现

有很多专业的消息队列组件Kafka、RocketMQ、RabbitMQ等。这里仅仅是使用list的特征来实现消息队列的要求。在实际技术选型的过程中,对于MQ使用需要慎重权衡考虑。

list存储就是一个队列的存储形式:

  1. lpush key value,在key对应list的头部添加字符串元素
  2. rpop key,移除列表的最后一个元素,返回值为移除的元素
最新上架商品

在电商网站首页经常会有新上架产品推荐的模块,这个模块存储了最新上架前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比较合适。与此同时,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等。

hash类型使用场景

Redis在存储对象(例如,用户信息)的时候需要对对象进行序列化转换然后存储。

对于对象类型,还有一种比较方便的存储方式,按照Redis的hash类型进行存储。

hset key field value

例如,存储一些网站用户的基本信息。

hset user101 name "isisiwish"
hset user101 phone "1008611"
hset user101 sex "男"

以上就存储了一个用户基本信息。

{
    "name": "isisiwish",
    "phone": "1008611",
    "sex": "男"
}

这种类似场景还很多,例如订单数据,产品数据,商家基本信息等。

sorted set类型使用场景

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架构设计到使用场景-缓存穿透、缓存雪崩、缓存预热、缓存降级

你可能感兴趣的:(NoSQL,#,Redis,redis,list,哈希算法)