1.Redis优势
redis支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
redis支持多种数据类型 有包括String(字符串) hash(哈希) list(列表) set(集合) zset(有序集合)
redis 支持数据备份
redis 性能极高,读写速度11万次每秒,写入是8万多次每秒
redis 是原子性的 意思就是要么成功执行,要么就是完全不执行,多操作的时候也支持事务
redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂数据结构,在内存中操作起来非常简单,这样redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面是紧凑追加的方式产生的,因为他们并不需要进行随机访问。
丰富的特性,可用于缓存 消息 按key设置过期时间,过期后自动删除
2.为什么现在都用redis
redis为了达到最快的读写速度将数据都写到内存中,并通过异步的方式写入磁盘中,所以redis具有快速和数据持久化的特征。如果不将数据存入内存中,磁盘io速度严重影响了redis的性能,内存现在越来越便宜了,所以也是导致redis越来越受欢迎的原因。
3.为什么redis字符串最大长度是512M
redis中用int来修饰len字段,int为4个字节,也就是32位,那么最大能表示232次方。所以232/8/1024/1024=512m
4.Lettuce和Jedis的区别
Jedis 是一个优秀的基于 Java 语言的 Redis 客户端,但是,其不足也很明显: Jedis 在实现 上是直接连接 Redis-Server,在多个线程间共享一个 Jedis 实例时是线程不安全的,如果想要 在多线程场景下使用 Jedis ,需要使用连接池,每个线程都使用自己的 Jedis 实例,当连接数 量增多时,会消耗较多的物理资源。
Lettuce 则完全克服了其线程不安全的缺点: Lettuce 是基于 Netty 的连接 (StatefulRedisConnection), Lettuce 是一个可伸缩的线程安全的 Redis 客户端,支持同步、异步和响应式模式。多个线 程可以共享一个连接实例,而不必担心多线程并发问题。它基于优秀 Netty NIO 框架构建,支 持 Redis 的高级功能,如 Sentinel,集群,流水线,自动重新连接和 Redis 数据模型。
5.Redis过期删除策略
1.定时删除 创建一个定时器 但是对内存友好对cpu不友好
2.惰性删除 每次获取键时检查是否过期 对cpu友好对内存不友好
3.定期删除 每隔一段时间进行检查 删除过期键 两种的折中方法 如果删除太频繁会退化成定时删除 如果删除次数太少将退成惰性删除