redis常用知识汇总(12)


 
常用工具
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与Memcached的区别
两者都是非关系型内存键值数据库 , 现在公司一般都是用 Redis 来实现缓存 , 而且 Redis 自身也越来越强大了!Redis 与 Memcached 主要有以下不同:
对比参数
Redis
Memcached
类型
1. 支持内存 2. 非关系型数据库
1. 支持内存 2. 键值对形式 3. 缓存形式
数据存储类型
1. String 2. List 3. Set 4. Hash 5. Sort Set 【俗称ZSet】
1. 文本型 2. 二进制类型
查询【操作】类型
1. 批量操作 2. 事务支持 3. 每个类型不同的CRUD
1.常用的CRUD 2. 少量的其他命令
附加功能
1. 发布/订阅模式 2. 主从分区 3. 序列化支持 4. 脚本支持【Lua脚本】
1. 多线程服务支持
网络IO模型
1. 单线程的多路 IO 复用模型
1. 多线程 , 非阻塞IO模式
事件库
自封转简易事件库AeEvent
贵族血统的LibEvent事件库
持久化支持
1. RDB 2. AOF
不支持
集群模式
原生支持 cluster 模式 , 可以实现主从复制 , 读写分离
没有原生的集群模式 , 需要依靠客户端来实现往集群中分片写入数据
内存管理机制
在 Redis 中 , 并不是所有数据都一直存储在内存中 , 可以将一些很久没用的 value 交换到磁盘
Memcached 的数据则会一直在内存中 , Memcached 将内存分割成特定长度的块来存储数据 , 以完全解决内存碎片的问题 。但是这种方式会使得内存的利用率不高 , 例如块的大小为 128 bytes , 只存储 100 bytes 的数据 , 那么剩下的 28 bytes 就浪费掉了 。
适用场景
复杂数据结构 , 有持久化 , 高可用需求 , value存储内容较大
纯key-value , 数据量非常大 , 并发量非常大的业务
 
(1) memcached所有的值均是简单的字符串 , redis作为其替代者 , 支持更为丰富的数据类型
(2) redis的速度比memcached快很多
(3) redis可以持久化其数据
如何保证缓存与数据库双写时的数据一致性?
你只要用缓存 , 就可能会涉及到缓存与数据库双存储双写 , 你只要是双写 , 就一定会有数据一致性的问题 , 那么你如何解决一致性问题?
一般来说 , 就是如果你的系统不是严格要求缓存+数据库必须一致性的话 , 缓存可以稍微的跟数据库偶尔有不一致的情况 , 最好不要做这个方案 , 读请求和写请求串行化 , 串到一个内存队列里去 , 这样就可以保证一定不会出现不一致的情况
串行化之后 , 就会导致系统的吞吐量会大幅度的降低 , 用比正常情况下多几倍的机器去支撑线上的一个请求 。
还有一种方式就是可能会暂时产生不一致的情况 , 但是发生的几率特别小 , 就是先更新数据库 , 然后再删除缓存 。
问题场景
描述
解决
先写缓存 , 再写数据库 , 缓存写成功 , 数据库写失败
缓存写成功 , 但写数据库失败或者响应延迟 , 则下次读取(并发读)缓存时 , 就出现脏读
这个写缓存的方式 , 本身就是错误的 , 需要改为先写数据库 , 把旧缓存置为失效;读取数据的时候 , 如果缓存不存在 , 则读取数据库再写缓存


推荐阅读