目录
9、Redis中的string类型数据和java中的string有什么区别
1、Redis中可以有哪些数据类型
字符串(String):最基本的一个数据类型,存储任意格式的字符串(如文本、JSON、序列化对象等)
哈希(Hash):键值对的集合,类似于Java中的HashMap;可以存储实体类对象
列表(List):有序的字符串列表,支持从两端插入或弹出元素;作为栈和队列使用,可以用于各种列表,比如用户列表、商品列表等
集合(Set):无序的字符串集合,元素唯一;适用于不能重复切不需要顺序的数据结构,比如关注的用户,还可以通过spop抽奖
有序集合(zset):类似集合,但每个元素关联一个分数,按分数排列(分数可重复);可用于各种排行榜
其余的还有位图、超日志、地理空间索引、流等类型数据
2、Redis的持久化策略
RDB机制:是指用数据集快照的方式半持久化模式记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件, 持久化结束后, 用这个临时文件替换上次持久化的文件,达到数据恢复。
优点:只有一个文件dump.rdb,方便持久化;容灾性好,可以把数据放到一个安全的磁盘;使用子进程来完成操作,性能最大化;数据集大时比AOF启动效率高
缺点:数据安全性低,RDB是每隔一段时间才做持久化,如果在这段时间内发生故障,数据就会丢失了,更加适合数据要求不严谨的情况
AOF机制:是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储保存为 aof 文件
优点:数据安全;
缺点:AOF文件比RDB文件大,恢复速度慢;数据集大的时候,比RDB启动效率低
3、概述下Redis的缓存穿透、缓存雪崩和缓存击穿
缓存穿透:指大量请求从Redis中没有获取到数据,然后直接访问数据库进行获取,导致数据库压力增大
解决方案:在数据库未获取到数据时,在Redis中增加一个默认值,这个值建议增加一个过期时间,防止一直存在占用内存;使用布隆拦截器
缓存雪崩:Redis服务器重启,或者大量缓存在同一时间点失效 Redis服务由于负载过大而宕机,导致大量请求访问数据库,致使数据库崩溃
解决方案:搭建Redis集群,分散压力;设置缓存失效时间时增加一个随机数
缓存击穿:某个热点数据在缓存失效的瞬间,大量请求同时访问数据库,导致数据库压力骤增甚至压垮;缓存击穿和缓存雪崩的区别在与这里针对的是某一key的缓存,而雪崩则是很多key
解决方案:用分布式锁控制线程;使用Redis中的setnx互斥锁先进行判断,这样其他线程就处于等待状态,保证不会有大量的并发操作去请求数据库;或者设置热点数据永不过期,定期进行后台刷新
4、Redis有哪几种过期策略
定时过期:给键设置过期的时间(比如三分钟),三分钟到了之后立即删除
定期过期:Redis定期(默认10秒)扫描一部分设置了过期时间的键,并删除其中已经过期了的键
惰性过期:在系统访问该键时,才检查是否已经过期,如果过期了则会进行删除,并返回空值
Redis中默认存储的键值没有过期时间,但是会在重启之后丢失
Redis中默认采用的方式是定期过期 和 惰性过期
5、Redis中的淘汰策略
主要用于Redis内存满了之后(只能读,不能写),决定如何释放空间,来保证Redis的正常运行
不淘汰策略(默认):内存不足时,拒绝写入新数据,并返回错误
基于过期时间的淘汰策略:
-
volatile-lru:从设置了过期时间的键中,淘汰最近最少使用的键(LRU 算法)。 -
volatile-lfu:从设置了过期时间的键中,淘汰访问频率最低的键(LFU 算法)。 -
volatile-random:从设置了过期时间的键中,随机淘汰键。 -
volatile-ttl:从设置了过期时间的键中,淘汰剩余生存时间(TTL)最短的键。
全局淘汰策略:
-
allkeys-lru:从所有键中淘汰最近最少使用的键(LRU 算法)。 -
allkeys-lfu:从所有键中淘汰访问频率最低的键(LFU 算法)。 -
allkeys-random:从所有键中随机淘汰键。
6、Redis中有哪几种模式
-
单机模式适合小规模、低并发场景。
-
主从复制模式适合读多写少的场景。
-
哨兵模式提供了高可用性和自动故障转移。
-
集群模式适合大规模、高并发场景。
-
代理模式简化了客户端与 Redis 集群的交互。
-
混合模式可以根据需求灵活组合不同模式的优点。
7、Redis的同步机制了解吗
Redis 可以使用主从同步,从从同步。第一次同步时,主节点做一次 bgsave,并同时将后续修改操作记录到内存 buffer, 待完成后将 rdb 文件全量同步到复制节点,复制节点接受完成后将 rdb 镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。
8、延迟双删和布隆过滤器
延迟双删(保证数据的最终一致性):先删除redis缓存,然后删除redis缓存,2秒后再删一次,设置缓存过期时间
布隆过滤器:当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。
9、Redis中的string类型数据和java中的string有什么区别
| 方面 | Redis的String | Java的String |
|---|---|---|
| 定义与用途 | 键值对存储系统的基本数据类型,用于存储字符串、整数或浮点数。 | 表示不可变的字符序列,用于处理文本数据。 |
| 数据结构 | 简单动态字符串(SDS),支持二进制数据,长度可变。 | 字符数组(char[])或字节数组(byte[])加上编码标记。 |
| 功能与操作 | 提供原子操作,如SET、GET、APPEND、INCR、DECR等。 | 提供丰富的字符串处理方法,如substring、concat、equals等。 |
| 内存管理 | 由Redis自身管理,支持内存优化策略。 | 由JVM管理,不可变性可能导致临时对象产生。 |
| 使用场景 | 缓存、计数器、分布式锁等需要快速读写、持久化存储的场景。 | 文本处理、字符串拼接、格式化输出等场景。 |
271

被折叠的 条评论
为什么被折叠?



