redis是什么?基于内存的数据库,读写非常快,适用缓存,消息队列,分布式锁,优点,基于内存,数据类型多样,分布式集群,持久化

redis数据类型有哪些?String(字符串),List(列表),Set(集合),Hash(哈希),Zset(有序集合)

reids应用哪些常见?String:缓存对象,常规计数,分布式锁,共享session,SET GET MSET MGET DEL INCR SETNX,list:消息队列,LPUSH,RPUSH,LPOP,RPOP,BRPOP

Hash:缓存对象,购物车,HSET,HGET,HMSET,Set:聚合计算,点赞,共同关注,SADD,SREM,SMEMBERS,SINTER,SDIFFzset:排序常见,排行榜

其他:bitMap签到,HyperLoglog海量数据,GEO地理位置,stream消息队列

redis单线程?单线程是任务都是主线程完成,多线程会造成线程切换,竞争,锁问题。

基于内存,采用io复用处理网络请求,3个后台进程处理,AOF刷盘,关闭文件,释放内存

reids持久化机制有哪些?AOF日志和RDB快照,AOF日志:redis执行一条命令,把命令追加写入aof文件,redis重启时候,会读取该文件的命令,逐一执行命令恢复数据,RDB快照:解决aop恢复缓慢,创建某一时刻的快照文件,通过两个命令save(主线程),和bgsave(子线程)

zset底层实现:压缩列表,跳表,listpack

介绍以下内存淘汰:第一种不淘汰,报错,redis默认,第二种淘汰,分为随机淘汰和设置了过期时间的淘汰

介绍以下过期删除策略:惰性删除+定期删除,惰性删除是把过期的内容加入过期字典,,下次访问再删除,定期删除是每隔一段时间抽查,过期大于四分之一删除,重复

缓存失效会不会立即删除:不会,因为采用惰性删除和过期删除

如何保证缓存与数据库数据一致性?对于读数据,先读取缓存数据,缓存没有数据,读取数据库数据,写数据时,先更新数据库再删除缓存

缓存雪崩:大量缓存数据同一时间失效,或reid宕机,造成mysql服务器宕机,解决:随机过期时间,互斥锁,后台更新缓存

缓存穿透:redis和数据库都没有查询的数据,造成mysql服务器宕机,解决:非法请求限制,返回空值,布隆过滤

缓存击穿:某一个热点key失效,大量请求访问该数据,mysql服务器崩溃,解决:互斥锁,不给热点key设置过期时间

如何实现reids服务高可用?reids集群模式,主从复制,哨兵模式,切片集群,主从复制:主服务器写数据,从服务器读数据,主服务器异步同步数据到服务器,哨兵模式:如果主服务器宕机,没有服务器进行写操作,没有主服务器进行数据同步,这时候需要选出新的主服务器

集群脑裂问题:两个主服务器,旧服务器数据删删除,解决方案,主服务器发现多少数量从服务器下线或者多少秒没有回应,禁止主服务器写入数据

如何解决redis的热点key问题?利用redis集群对热key进行复制,使用读写分离

redis的主从同步怎么实现的?第一阶段建立连接,第二阶段主服务器通过bgsave生成RDB文件发送从服务器,从服务器删除本地RDB,第三阶段从主服务器发送缓存新的写命令给从服务器,从服务器执行命令

redis如何实现分布式锁?set命令有一个nx参数,值不存在,加锁插入成功,值存在插入失败

如果使用redis的布隆过滤器?把数据库数据放在布隆过滤器,请求在进入缓存前先查询布隆过滤器,如果有就放行,没有就拒绝,返回异常,实现原理是位列表,对字符串进行hash后再进行位运算,得到坑外,在坑位填充1,没有填充的坑我为0,所以对字符串hash取模后去找坑位,如果有一个坑位为0,那就证明布隆过滤器一点不存在

redis数据类型:string类型,用于常规计数,缓存对象,分布式锁,共享session,list类型,用于消息队列,hash类型,缓存对象,set类型,交集,并集,共同关注,点赞,zset类型,排序

bitmap类型,签到,hyperloglog,海量数据,geo存储地理信息,stream消息队列

zset底层实现:压缩列表,跳表,listpack

hash表怎么扩容:触发扩容后生成表,原来数据复制过去,渐进式扩容

string的数据结构:SDS数据结构

redis为什么这么快:基于内存,高效的数据结构,单线程,io多路复用

reids哪些地方使用多线程:3个后台任务,关闭文件,aop刷盘,释放内存

如何实现redis原子性:2条命令原子性,可以用lua脚本

过期删除和内存淘汰区别:内存淘汰是指内存满了就淘汰,过期删除是指过期后删除