一篇文章带你了解redis

1.redis数据类型有那些?

string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。
hash(哈希):一个键值对集合,可以存储多个字段。
list(列表):一个简单的列表,可以存储一系列的字符串元素。
set(集合):一个无序集合,可以存储不重复的字符串元素。
zset(sorted set:有序集合): 类似于集合,但是每个元素都有一个分数(score)与之关联。
位图(Bitmaps):基于字符串类型,可以对每个位进行操作。
超日志(HyperLogLogs):用于基数统计,可以估算集合中的唯一元素数量。
地理空间(Geospatial):用于存储地理位置信息。
发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。
流(Streams):用于消息队列和日志存储,支持消息的持久化和时间排序。
模块(Modules):Redis 支持动态加载模块,可以扩展 Redis 的功能。

2.redis为什么那么快?

数据存储在内存中,读写速度非常快。
Redis 使用单线程模型,避免了多线程的上下文切换开销。
Redis 采用了非阻塞I/O多路复用机制,可以处理大量并发连接。

3.redis的存储方式有那些? 如何开启

Redis 的存储方式主要有 RDB(Redis DataBase)和 AOF(Append Only File)两种方式。你可以通过修改 Redis 配置文件来开启它们。

4.redis存储方式rdb和aof的区别

RDB 是在指定的时间间隔内将数据集的状态保存到磁盘上,是一个快照的形式;AOF 则是将每一个写操作都记录下来,是一个追加式的日志文件。
RDB 恢复数据的速度比 AOF 快,但可能丢失最后一次持久化后的数据;AOF 则更加安全,但恢复速度相对较慢。

5.redis存储方式rdb的同步策略?

在 save 或者 bgsave 命令执行时,Redis 会进行快照的创建,期间会阻塞主进程。
在 save 或者 bgsave 执行完成后,Redis 会将新的快照文件替换旧的快照文件。

6.redis存储方式ao的的同步策略?

Redis 支持三种 AOF 的同步策略:always、everysec、no。
always 表示每个写命令都要同步写入磁盘,保证完全的数据持久化,但性能开销较大;everysec 表示每秒同步一次,是默认的策略;no 表示不主动进行同步,由操作系统决定何时写入磁盘。

7.redis的内存淘汰策略?

Redis 的内存淘汰策略包括:volatile-lru、allkeys-lru、volatile-random、allkeys-random、volatile-ttl、no-eviction。可以通过配置文件或者命令行参数来指定使用哪种策略。

8.redis在项目中的使用?

Redis 在项目中的使用场景包括验证码缓存、热点数据缓存、防止表单重复提交、分布式锁等

9.热点数据缓存的时候怎么保证mysql和redis的数据一致性

在写入 Redis 同时更新 MySQL,或者定期同步更新 MySQL。
在读取数据时,如果 Redis 中不存在,则从 MySQL 中读取,并存入 Redis 缓存。

10.redis的缓存击穿,穿透,雪崩现象,每种现象的如何解决的
缓存击穿:

Redis 缓存击穿是指一个缓存中的热点数据非常频繁地被大量并发请求访问,当该热点数据失效的瞬间,持续的大并发请求无法通过缓存获取到数据,而直接访问数据库,这就好像在一个稳固完好的容器上打开了一个洞

    解决方法:
    1.分布式互斥锁:只允许一个线程重建缓存,其他线程等待重建缓存的线程执行完,重新从缓存获取数据即可。可以使用 Redis 的SETNX命令来实现分布式锁。
    2.永不过期:从缓存层面来看,确实没有设置过期时间,所以不会出现热点 key 过期后产生的问题,也就是“物理”不过期。从功能层面来看,为每个 value 设置一个逻辑过期时间,当发现超过逻辑过期时间后,会使用单独的线程去更新缓存。

缓存穿透:

缓存穿透是指用户不断发起请求访问数据库和缓存中都不存在的数据,这些请求会直接绕过缓存,直接访问数据库,从而导致数据库压力过大

    解决方法:
    1.缓存空值:当数据库中没有符合条件的数据时,可以将一个空值或默认值存储在缓存中。这样,后续的请求就可以直接从缓存中获取空值,而不会直接访问数据库。
    2.布隆过滤器:使用布隆过滤器可以快速判断一个元素是否存在于一个集合中。在缓存穿透的情况下,可以使用布隆过滤器来判断请求的数据是否可能存在于数据库中。如果布隆过滤器判断数据不存在,那么可以直接返回空值或默认值,而不需要访问数据库。
    3.数据校验:在应用程序中对请求的数据进行校验,过滤掉不符合规则的数据。例如,可以检查数据的格式、范围、类型等,确保请求的数据是合法的。
    4.限制访问频率:对于频繁发起请求的用户或IP,可以采取限制访问频率的措施,例如设置每秒请求次数的限制,或者在一段时间内禁止访问。
    5.监控和预警:建立监控系统,实时监测数据库的访问情况,当发现异常的请求流量时,及时发出预警并采取相应的措施,例如扩容数据库、增加缓存容量等。

雪崩:

Redis 雪崩是指缓存中大量的数据在同一时间失效,导致大量请求瞬间都去查询数据库,从而给数据库造成巨大的压力,甚至可能导致数据库崩溃。

    解决方法:
    1.分散过期时间:避免将大量数据设置为同一时间过期,可以给不同的数据设置不同的过期时间间隔,使其在一段时间内逐步失效。
    2.设置永不过期:对于一些关键数据,可以考虑不设置过期时间。
    3.缓存预热:在系统启动之初或提前将热点数据加载到缓存中。
    4.服务降级:当数据库压力过大时,可以采取一些服务降级措施,比如只返回部分数据或简单的提示信息。
    5.使用多级缓存:除了 Redis 缓存,还可以构建本地缓存等多级缓存架构。
    6.监控和预警:实时监控缓存的状态和数据库的负载情况,及时发现问题并发出预警。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值