什么是Redis
简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。
另外,Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。
Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。
Redis支持的数据类型及其应用场景
1.string
介绍:String类型是Redis最基本的数据类型,String数据结构是简单的 key-value 类型,Redis的String可以包含任何数据。比如jpg图片或者序列化的对象 。
命令:
- set/get:存放(取出)单个key-value
- mset/mget:存放(取出)多个key-value
- type key:查看key的类型
- exists key:判断指定key是否存在
- keys *: 查看有哪些key
- del key:删除key
- TTL key: key的有效时间,-1永久生效,-2删除
- expire key time:设置有效时长
- pexpire key time: 设置毫秒
应用场景:
- 缓存功能:字符串最经典的使用场景,Redis作为缓存层,MySQL作为储存层,绝大部分请求数据都是Redis中获取,由于Redis具有支撑高并发特性,所以缓存通常能起到加速读写和降低后端压力的作用。
- 计数器:许多运用都会使用Redis作为计数的基础工具,他可以实现快速计数、查询缓存的功能,同时数据可以一步落地到其他的数据源。
例如:视频播放数系统就是使用Redis作为视频播放数计数的基础组件。- 共享Session:出于负载均衡的考虑,分布式服务会将用户信息的访问均衡到不同服务器上,用户刷新一次访问可能会需要重新登录,为避免这个问题可以用Redis将用户Session集中管理,在这种模式下只要保证Redis的高可用和扩展性的,每次获取用户更新或查询登录信息都直接从Redis中集中获取。
- 限速:处于安全考虑,每次进行登录时让用户输入手机验证码,为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率。
2.list
介绍:list 即是 链表。Redis 的 list 的实现为一个 双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销。
命令:
- lpush/lpop name value:从左存放(取出)单个key-value
- rpush/rpop name value:从右存放(取出)单个key-value
- lrange lname 0 -1:从左向右遍历整个列表
应用场景:
- 消息队列: Redis的lpush+rpop命令组合即可实现阻塞队列,生产者客户端是用lpush从列表左侧插入元素,多个消费者客户端使用rpop命令阻塞时的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性