redis使用场景统计

听说你的城市下雨了,不知道你带伞没有,如果带了这雨就白下了。

 

1、缓存:通过string类型将序列化后的对象存起来即可

  需要注意点:

    • 必须保证不同对象的 key 不会重复,并且使 key 尽量短,一般使用类名(表名)加主键拼接而成。
    • 选择一个优秀的序列化方式也很重要,目的是提高序列化的效率和减少内存占用。
    • 缓存内容与数据库的一致性
      • 只在数据库查询后将对象放入缓存,如果对象发生了修改或删除操作,直接清除对应缓存(或设为过期)。
      • 在数据库新增和查询后将对象放入缓存,修改后更新缓存,删除后清除对应缓存(或设为过期)。

 

2、排行榜:利用Redis的zset结构能实现各种复杂的排行榜应用

  淘宝的年度/每日销量榜单、商品按时间的上新排行榜等

 

3、计数器:在 Redis 的数据结构中,string、hash和sorted set都提供了incr方法用于原子性的自增操作

 

4、限流

  在某些秒杀活动中,瞬间会有大量的用户请求涌入,而且大概率也会出现同一用户不断刷新页面或者其他操作来发送大量请求的情况,这时候我们就可以采取限流措施。那如何实现限流呢?我们可以利用Redis的incr方法,以访问者的ip和其他信息作为key,访问一次增加一次计数,当同一用户的访问次数超过我们预先设定的次数则返回提示信息(比如提示用户操作过于频繁,一定时间之后再重新操作等等)。

 

5、分布式会话

  集群模式下,在应用不多的情况下一般使用容器自带的session复制功能就能满足,当在应用增多且相对复杂的系统中,一般都会搭建以Redis等内存数据库为中心的session服务,session不再由容器管理,而是由session服务及内存数据库管理。

 

6、分布式锁

  在很多互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败,在实际应用中要考虑的细节会更多。

  在 Redis 2.6.12 版本开始,string的set命令增加了一些参数:

    • EX:设置键的过期时间(单位为秒)
    • PX:设置键的过期时间(单位为毫秒)
    • NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
    • XX :只在键已经存在时,才对键进行设置操作。

 

7、消息队列

  Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统

  另外Redis 中list的数据结构实现是双向链表,所以可以非常便捷的应用于消息队列(生产者 / 消费者模型)。消息的生产者只需要通过lpush将消息放入 list,消费者便可以通过rpop取出该消息,并且可以保证消息的有序性。如果需要实现带有优先级的消息队列也可以选择sorted set。而pub/sub功能也可以用作发布者 / 订阅者模型的消息。无论使用何种方式,由于 Redis 拥有持久化功能,也不需要担心由于服务器故障导致消息丢失的情况。

 

8、抽奖:利用set结构的无序性,通过 Spop( Redis Spop 命令用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。

 

9、点赞、签到

 

10、显示最新的项目列表

 

posted @ 2022-05-19 09:05  方达达  阅读(10)  评论(0编辑  收藏  举报