Redis

可参考:

https://blog.csdn.net/weixin_40205234/article/details/124614720?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169337602916800188555576%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=169337602916800188555576&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-124614720-null-null.142v93chatsearchT3_2&utm_term=redis%E9%9D%A2%E8%AF%95%E9%A2%98&spm=1018.2226.3001.4187

1.什么是Redis?它主要用来什么的?
基于内存的非关系型key-value数据库,主要应用于缓存、分布式锁
2.说说Redis的基本数据结构类型以及应用场景
String:缓存、session、
hash:存储一个对象
list:双向链表,内容可重复,比如url的权限
Set:内容不重复
Zset:有序集合

bitmap(位图):高效的统计大量数据
3. Redis为什么这么快?
1.基于内存实现:Redis基于内存,Mysql基于磁盘。从内存读取更快
2.虚拟内存机制:使热数据仍在内存中、冷数据保存到磁盘。
3.高效的数据结构:Mysql索引为了提高效率,使用B+树的数据结构,Redis是Key-Value型内存数据库,所有键值用字典来存储,字典就是哈希表
4.数据编码:Redis支持多种数据类型,什么时候什么样的数据结构,使用什么编码,是动态变化的(hashtable编码、跳跃表编码)
5.单线程模型:避免了CPU不必要的上下文切换和竞争锁的消耗
4. 什么是缓存穿透、缓存雪崩、缓存击穿?
1.缓存穿透:读请求访问时,缓存和数据库都没有某个值,这样就会导致每次对这个值的查询请求都会穿透到数据库,这就是缓存穿透。
解决:查询数据库如果为空,给缓存设置空值或者默认值,同时,给缓存设置适当的过期时间
布隆过滤器
2.缓存雪崩:缓存中大量数据到达过期时间,从而导致大量数据打到数据库,引起数据库压力过大甚至down机
解决:均匀设置过期时间,或者构造高可用集群
3.缓存击穿:某个热点key在某个时间恰好过期,刚好这个时间针对该热点key过来了很多并发请求,从而导致大量请求打到了db。
解决:永不过期:不设置过期时间,热点数据快要过期时,异步线程更新和设置过期时间
5.Redis应用场景
缓存、
排行榜(zset)、
计数器应用、
session、
6. Redis 的持久化机制有哪些?优缺点说说
redis持久化就是把数据从内存保存到磁盘。RDB和AOF。
RDB:以快照的形式把数据从内存保存到磁盘。(Redis默认的持久化方式)优点:适合大规模的场景恢复(备份、全量复制)缺点:没办法做到实时持久化
AOF:采用日志的形式来记录,追加到文件中,重启时,采用命令恢复数据。优点:可以实时记录。缺点:规模越大,数据越多,速度越慢。
7. 怎么实现Redis的高可用?
我们在项目中使用Redis,肯定不会是单点部署Redis服务的。因为,单点部署一旦宕机,就不可用了。为了实现高可用,通常的做法是,将数据库复制多个副本以部署在不同的服务器上,其中一台挂了也可以继续提供服务。
想实现redis的高可用有三种模式:主从模式、哨兵模式、集群模式。
1.主从模式:Redis部署了多台机器,有主节点,负责读写操作,有从节点,只负责读操作。从节点的数据来自主节点,实现原理就是主从复制机制.首先是全量复制,主节点和从节点完全一致后,主节点再变化,触发增量复制。
2.哨兵模式:可以监视所有的Redis的主节点和从节点,并在被监视的主节点进入下线状态时,自动将下线的主服务器属下的某个从节点升级为新的主节点。
但是一个哨兵进程对Redis节点进行监控,可能出现问题,因此,可以使用多个哨兵来监控,并且哨兵之间可以相互监控
3.集群模式:(Cluster集群)分布式存储,对数据进行分片,每台Redis节点上存储不同的内容,还提供复制和故障转移的功能

8. Redis分布式锁
在分布式环境中控制不同进程互斥访问共享资源的一种锁。

9. Redisson
Ression解决了分布式锁过期释放,业务没执行完的问题。
//给获得锁的线程开启一个定时守护线程机制。

10.MySQL与Redis 如何保证双写一致性
//1.缓存延时双删
//删除缓存,更新数据库,等500ms(保证数据库更新完毕),再删除(再删除是为了避免第一次删了之后,其他事务又把旧数据缓存了,所以更新完数据库再删一次)
//2.删除缓存重试机制
//把删除失败的key放到消息队列,消费该队列,获取想要删除的kry,重试删除

11. Redis事务
//执行MULTI开始一个事务
//然后将多个命令入列到事务中
//执行EXEC命令触发事务,一并执行事务中的所有命令
12. Redis的Hash 冲突怎么办
//链式哈希:一个哈希桶中,多个元素用一个链表保存,他们之间依次用指针连接

13.redis内存回收机制:
1.删除过期的key
2.内存使用到达上限时,会触发内存溢出控制策略。

你可能感兴趣的:(redis)