redis入门第一课:概念和应用场景
2019-04-18 本文已影响0人
阿狸404
1.redis是什么?
redis是一个开源的,内存中以key-value键值对存储数据的服务器。
redis的key,value的数据类型很广泛,包括字符串String,哈希hash,列表lists,有序集合sorted-set,集合sets,而且redis是基于内存的数据库,可持久化。
2.redis的应用场景
1.会话缓存
分布式环境下,可用作session共享。
2. 消息队列
息队列是大型网站必用中间件,如ActiveMQ、RabbitMQ、Kafka等流行的消息队列中间件,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。另外,这个不能和专业的消息中间件相比。
3. 发布,订阅消息
4. 缓存
redis是基于内存的数据库,因此可用作缓存提升访问速率,而且减小数据库压力。同时redis也提供了多种内存回收策略。
5. 排行榜
redis提供的有序集合的数据类型能够实现排行榜功能。
6. 计数器
Redis的原子递增操作最常用的使用场景是计数器。
使用思路是:每次有相关操作的时候,就向Redis服务器发送一个incr命令。
例如这样一个场景:我们有一个web应用,我们想记录每个用户每天访问这个网站的次数。
web应用只需要通过拼接用户id和代表当前时间的字符串作为key,每次用户访问这个页面的时候对这个key执行一下incr命令。
这个场景可以有很多种扩展方法:
- 通过结合使用
INCR
和EXPIRE命令,可以实现一个只记录用户在指定间隔时间内的访问次数的计数器 - 客户端可以通过GETSET命令获取当前计数器的值并且重置为0
- 通过类似于DECR或者INCRBY等原子递增/递减的命令,可以根据用户的操作来增加或者减少某些值 比如在线游戏,需要对用户的游戏分数进行实时控制,分数可能增加也可能减少。
7. 分布式锁
当资源在分布式环境下需要共享时,比如秒杀等场景,减库存。redis提供了setnx功能实现分布式锁,如果设置返回1,则表示成功获取锁。否则获取锁失败。
8. 最新列表
Redis列表结构,LPUSH可以在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。