redis是非关系型数据库,常用于应用于数据缓存,减轻后端数据库压力
- Q: redis常用的基本数据类型、常用命令、使用场景
- 字符串类型 常用于k,v简单键值对缓存,简单计数器,分布式锁 set get
- list类型 可以用于简单的队列处理, push压入队列,pop出队列, bpop阻塞式出队列
- 有序集合 可以根据分值的大小做排行榜,以及延迟队列 在 Redis 可以使用有序集合(ZSet)的方式来实现延迟消息队列的,ZSet 有一个 Score 属性可以用来存储延迟执行的时间。 使用 zadd score1 value1 命令就可以一直往内存中生产消息。再利用 zrangebysocre 查询符合条件的所有待处理的任务, 通过循环执行队列任务即可。
- 无序集合 集合运算,求交集可以获取共同好友,求并集可以去重
- hash类型 缓存对象用户信息等
- 位图 二值状态统计的场景,登陆状态,在线人数
- HyperLogLog:不精准计数场景,uv统计,基数越大越精准
- GEO:空间索引,存储地理位置信息的场景 Stream(5.0新增):提供了可以消息的持久化,能分组消费,主备复制功能的消息队列
- 布隆过滤器
- Q: redis管道是什么,有什么作用
- Q: redis事务有什么特点和使用场景
- Q:redis实现队列有哪些方式,优缺点
- Q: redis为什么这么快?
- 内存操作,大部分命令的执行时间复杂度为O(1)
- 单线程模型避免了线程切换的性能开销
- IO多路复用机制,一个线程处理多个IO流,epoll模型
- Q: redis和memcache的区别和各自使用场景
都是基于内存的数据库,常用作缓存,性能都很高,区别- memcache支持多线程,Redis6.0以前支持单线程
- redis支持多种数据类型,memcached仅支持kv模式
- redis可以持久化数据能保存到磁盘
- redis原生支持集群模式,主从结构,memcached需要客户端hash一致化实现
- Q: redis线程模型是怎么样的,redis6为啥引入多线程
- Q: redis持久化的两种方式及区别
- Q: redis过期删除模式
- Q: redis内存满了自动缓存淘汰,淘汰策略有哪些
- Q: redis如何配置淘汰策略
- Q: LRU和LFU算法的区别
- Q: 缓存更新策略有哪些缓存数据一致性问题怎么解决
- Q: redis 大key问题是什么,怎么查找,怎么避免
- Q: 缓存雪崩、击穿、穿透有什么区别,怎么避免,怎么解决
- 缓存雪崩是短时间内大量缓存过期,请求都跑到数据库,造成数据库压力剧增甚至宕机, 1、缓存加上过期时间加个随机错位时间 2、设置缓存永不过期
- 缓存击穿是某个热点key突然过期失效导致高并发访问数据库。1、使用互斥锁保证只有一个进程能够读取缓存并访问数据库加载缓存 2、不给热点数据设置过期时间,异步去更新热点缓存
- 缓存穿透是用户访问的数据,既不在缓存中,也不在数据库中,这样就直接访问数据库了。1、如果是非法请求就限制 2、设置空值获取默认值 3、使用布隆过滤器,如果全部hash获取值都不存在那数据肯定不存在,就不读缓存也不读数据库
- Q: redis如何实现相对靠谱的分布式锁
- Q: redis集群的三种方式,各有什么优缺点
- Q: redis cluster的实现原理
- Q:哈希一致性原理是什么,解决了什么问题
- Q:简单描述下redis数据类型对应的数据结构实现