Redis 支持哪几种数据类型?
String、List、Set、Sorted Set、hashes
Redis 主要消耗什么物理资源?
内存。
Redis 有哪几种数据淘汰策略?
- noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大 部分的写入指令,但 DEL 和几个例外)
- allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
- volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据 有空间存放。
- allkeys-random: 回收随机的键使得新添加的数据有空间存放。
- volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
- volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的 数据有空间存放
一个字符串类型的值能存储最大容量是多少?
512M
为什么 Redis 需要把所有数据放到内存中?
Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。 所以 Redis 具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘 I/O 速度为严重 影响 Redis 的性能。在内存越来越便宜的今天,Redis 将会越来越受欢迎。 如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
Redisson、Jedis、lettuce 等等,官方推荐使用 Redisson。
Redis和 Redisson有什么关系?
Redisson 是一个高级的分布式协调 Redis客服端,能帮助用户在分布式环境中轻松实现一 些 Java 的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog)。
Jedis与Redisson对比有什么优缺点?
Jedis 是 Redis 的 Java 实现的客户端,其 API 提供了比较全面的 Redis 命令的支持; Redisson 实现了分布式和可扩展的 Java 数据结构,和 Jedis 相比,功能较为简单,不支 持字符串操作,不支持排序、事务、管道、分区等 Redis 特性。Redisson 的宗旨是促进使 用者对 Redis 的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。
说说Redis哈希槽的概念?
Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽, 每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。
Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?
使用keys指令可以扫出指定模式的key列表。但是如果这个redis正在给线上的业务提供服务,使用keys会导致线程阻塞一段时间,线上服务会停顿,直到指令全部结束,原因时因为Redis时单线程的。这个时候可以使用scan指令,可以无阻塞的去除置顶模式的key列表,但是会有一定的重复率,只需要再客户端做一次去重就可以了,总体花费的时间要比keys时间短。
如果使用Redis做异步队列如何实现
- 一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。也可以不使用sleep指令,list还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。这样消费时一次消费一个。
- 使用pub/sub主题订阅者模式,可以实现1:N的消息队列。但是如果消费者下线的情况下,生产的消息会丢失,应该使用消息队列如RabbitMq来实现
怎么理解Redis事务?
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
Redis事务相关的命令有哪几个?
MULTI、EXEC、DISCARD、WATCH
Rediskey的过期时间和永久有效分别怎么设置?
EXPIRE和PERSIST命令。
Redis如何做内存优化?
尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面.
Redis回收进程如何工作的?
一个客户端运行了新的命令,添加了新的数据。Redi检查内存使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收。一个新的命令被执行,等等。所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。
Redis回收使用的是什么算法?
RU算法
Redis缓存的雪崩、穿透、击穿
https://blog.csdn.net/yk80695816/article/details/105471819
Redsi的持久化机制
https://blog.csdn.net/yk80695816/article/details/105471108
Redis集群管理
https://blog.csdn.net/yk80695816/article/details/105470156
https://blog.csdn.net/yk80695816/article/details/105375426