数据类型
1、字符串(String):最简单的数据类型,可以包含任意数据,如文本、二进制数据等。常见的使用场景是存储Session信息、存储缓存信息、存储整数信息,可以使用incr实现整数+1,使用decr实现整数-1
2、列表(List):有序的字符串元素集合,支持双端进行插入和删除操作,可以用作队列或栈
3、哈希(Hash):用于存储对象,类似于关联数组。每个哈希可以包含字段和与之相关联的值。常见使用场景是存储Session信息、存储商品的购物车,购物车非常适用于哈希字典表示,使用人员唯一编号作为字典的key,value值可以存储商品的id和数量等信息、存储详情页等信息
4、集合(Set):一个无序并唯一的键值集合。它常见的使用场景是是仙女关注功能,比如关注我的人和我关注的人,使用集合存储,可以保证人员不重复
5、有序集合(Sorted Set):使用zset表示,相当于Set集合类型多了一个排序属性score(分值)。它常见的使用场景是可以用来存储排名信息,关注列表功能,这样就可以根据关注实现排序展示
Redis在实际工作中广泛应用于多种业务场景,以下是一些常见的例子:
缓存:Redis作为Key-Value形态的内存数据库,最先会被想到的应用场景就是作为数据缓存。Redis提供了键过期功能,也提供了键淘汰策略,所以Redis用在缓存的场合非常多
排行榜:很多网站都有排行榜应用,如京东的月度销量榜单、商品按时间上新排行榜等。Redis提供的有序集合(zset)数据类
分布式会话:在集群模式下,一般会搭建以Redis等内存等内存数据库为中心的session服务,session不再由容器管理,而是由session服务及内存数据库管理
分布式锁:在高并发的情景,可以利用Redis的setnx功能来编写分布式锁
缓存的流程
从Redis中查询数据,没有获取到数据到数据库中查数据,然后加入Redis缓存。
Redis 的持久化机制是什么?各自的优缺点?
Redis提供两种持久化机制 RDB 和 AOF 机制:
1、RDB(Redis DataBase)持久化方式:
是指用数据集快照的方式半持久化模式)记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。
优点:
只有一个文件 dump.rdb,方便持久化。
容灾性好,一个文件可以保存到安全的磁盘。
性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis的高性能。
相对于数据集大时,比 AOF 的启动效率更高。
缺点:
数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
2、AOF(Append-only file) 持久化方式:
是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储)保存为 aof 文件。
优点:
数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。
缺点:
(1)AOF 文件比 RDB 文件大,且恢复速度慢。
(2)数据集大的时候,比 rdb 启动效率低。
redis的集群
1、主从复制
2、sentinel哨兵
3、cluster集群:主Redis槽位分配,
缓存穿透:对数据库中为空的数据搜索;解决办法:1、对返回的空数据也加入缓存;2、布隆过滤器
缓存击穿:对数据库中有的数据,但是没有缓存的数据操作;解决办法:加锁
缓存雪崩:缓存失效,或缓存集中读入;解决办法:对key设置不同的超时时间。
redis 过期键的删除策略?
(1)定时删除:在设置键的过期时间的同时,创建一个定时器 timer。
让定时器在键的过期时间来临时,立即执行对键的删除操作。
(2)惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
(3)定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。
Redis 的回收策略(淘汰策略)
volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
allkeys-random:从数据集中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据
Redis的性能调优技巧有哪些?
Redis的性能调优技巧包括以下几个方面:
使用合适的数据结构:选择适当的数据结构来存储和操作数据,以提高读写性能。
使用批量操作和管道技术:通过批量操作和管道技术可以减少网络开销和降低延迟,提高性能。
设置合理的最大内存限制:根据系统的实际内存情况,设置合理的最大内存限制,避免过度使用内存导致性能问题。
合理配置持久化策略:根据实际需求选择适当的持久化方式,并设置合理的持久化频率,平衡数据持久化和性能之间的关系。
合理使用缓存过期时间:根据业务需求和数据特性,设置合理的缓存过期时间,避免缓存数据过期或占用过多的内存。
避免过度使用阻塞操作:尽量避免使用阻塞操作,如阻塞的命令和阻塞的事件通知,以充分利用Redis的异步特性和高并发能力。