Redis是基于内存的键值型(key - value)的 NoSQL数据库(非关系型数据库)。key一般是String类型,而value支持丰富的数据类型,包括String、Hash、List、Set、SortedSet这五种基本类型,此外还有GEO、BitMap、HyperLogLog 等其他类型。
Redis有哪些特点?
- .读写性能优异
·基于内存,内存的访问速度是比磁盘快很多的
·采用单线程模型,不存在多线程的上下文切换,不需要考虑锁的问题
·使用IO多路复用模型,让 Redis 不需要创建额外的线程来监听客户端的大量请求,减少性能的消耗
·内置了多种优化过的数据结构实现·
- 所有操作命令都是原子性的
- 支持事务
允许多个命令按顺序执行并不会被打断
不支持回滚
- 支持数据持久化
.RDB:通过创建快照来获得存储在内存里面的数据在某个时间点上的副本
AOF:执行完更改数据的命令后,会将该命令记录到日志中
- 支持分布式部署
Redis有哪些常见的应用场景?
- 数据缓存
将热点数据缓存到 Redis,提高数据读取和系统响应速度。·
将用户凭证(如token)存入Redis,实现单点登录。
- .分布式锁
利用 Redis的setnx命令实现互斥,对于setnx命令,如果key不存在则会设置 key的值并返回1,否则直接返回0。
·因此,可以通过setnx命令去尝试获取锁,获取锁成功才能继续执行相应业务。·此外,还得给锁设置一个过期时间,防止系统出现问题导致锁无法释放。
使用命令为:
如果需要更复杂的需求,可以采用 Redisson,它里面提供了多种分布式锁的实现。
- 限时业务的运用
Redis 中可以使用expire 命令设置一个键的生存时间,到时间后Redis 会删除它。利
用这一特性可以运用在限时的优惠活动信息、手机验证码等业务场景。
- 全局唯一ID
Redis由于incrby命令可以实现原子性的递增,所以可以用于唯一分布式序列号的生
成。
- 消息队列
.基于List 实现:利用LPUSH 和 RPOP;
基于PUB/SUB实现;
.基于Stream 实现。·
- 共同关注
·由于Set支持交集、并集、差集等功能,可以实现共同关注、共同爱好等功能。
- 排行榜
·由于SortedSet是支持排序的,可以用于各种排行榜的场景。
- 统计活跃用户
·利用 BitMap,以日期为key,用户ID为offset,当日活跃过就设置为1。
- 页面统计UV
将访问指定页面的每个用户ID添加到 HyperLogLog中,调用 PFCOUNT 获取。