除基本的会话 token 之外,Redis 还提供很简便的 FPC 平台。回到一致性问题,即使重启了 Redis 实例,因为磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大的改进,类似PHP本地FPC。
Magento 提供一个插件来使用 Redis 作为全页缓存后端。
(3)队列
Redis 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得 Redis 能作为一个很好的消息队列平台来使用。
Redis 作为队列使用的操作,类似于python对 list 的 push/pop 操作。搜索“Redis queue”可以找到大量的开源项目,这些项目的目的就是利用Redis 创建非常好的后端工具,以满足各种队列需求。
(4)排行榜/计算器
Redis 在内存中对数字进行递增或递减的操作实现得非常好。集合(Set)和有序集合(SortedSet)也使得我们在执行这些操作的时候变得非常简单,Redis中仅提供这两种数据结构。
(5)发布/订阅
Redis 的发布/订阅功能。可以在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用 Redis 的发布/订阅功能来建立聊天系统。
13、Redis 支持的 Java 客户端都有哪些?官方推荐?
Redisson、Jedis、lettuce等等,官方推荐使用 Redisson。
14、Redis 和 Redisson 有什么关系?
15、Jedis 与 Redisson 对比有什么优缺点?
Jedis 是 Redis 的 Java 实现的客户端,其 API 提供了比较全面的 Redis 命令的支持;
Redisson 实现了分布式和可扩展的 Java 数据结构,和 Jedis 相比,功能较简单,不支持字符串操作,不支持排序、事务、管道、分区等 Redis 特性。
Redisson 的宗旨是促进使用者对 Redis 的关注分离,从而让使用者能将精力更集中地放在处理业务逻辑上。
16、说说 Redis 哈希槽的概念?
Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有16384个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。
17、Redis 集群的主从复制模型是怎样的?
为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品。
18、Redis 集群会有写操作丢失吗?为什么?
Redis 并不能保证数据的强一致性,这意味着在实际集群在特定条件下可能会丢失写操作。
19、Redis 集群之间是如何复制的?
异步复制。
20、Redis 集群最大节点个数是多少?
16384个。
21、Redis 集群如何选择数据库?
Redis 集群目前无法做数据库选择,默认在 0 数据库。
22、Redis 中的管道有什么用?
一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应,这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。这就是管道(pipelining),是一种几十年来广泛使用的技术。
例如许多 POP3 协议已经实现支持这个功能,大大加快了从服务器下载新邮件的过程。
23、怎么理解 Redis 事务?
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行,事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
24、Redis 事务相关的命令有哪几个?
MULTI、EXEC、DISCARD、WATCH。
25、Redis key 的过期时间和永久有效分别怎么设置?
EXPIRE 和 PERSIST 命令。
26、Redis 如何做内存优化?
尽可能使用散列表(hashes),散列表使用的内存非常小,所以应尽可能将数据模型抽象到一个散列表内。
比如在一个web系统中有一个用户对象,不要为这个用户的名称、姓氏、邮箱、密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。
27、Redis 回收进程如何工作的?
一个客户端运行了新的命名,添加了新的数据。Redis 检查内存使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收。