redis2
1 怎么理解Redis事务?
事务是一个单独的隔离操作,事务中所有命令都会序列化,按顺序执行。事务在执行过程中不会被其他客户端发送的请求命令所打断。
事务是一个原子操作,事务中的命令要么全部被执行,要么全部不执行。
2 Redis事务相关的命令有哪几个?
四个
MULTI: 组装一个事务
EXEC: 执行一个事务
DISCARD : 取消一个事务
WATCH: 检测key,若key改变则取消事务。
3 Redis key的过期时间和永久有效分别怎么设置?
EXPIRE 和Persist
4 Redis如何做内存优化?
尽量使用散列表(hashes),散列表(是说它存储的数据少)使用的内存非常小,所有你应该仅可能将你的数据模型抽象为散列表。
5 Redis回收使用的是什么算法?
LRU算法
6 Redis如何做大量数据插入
Redis2.6以后,redis-cli支持一种被称为pipe mode的新模式来执行大量数据插入。
7为什么要做Redis分区?
为了使redis管理更多内存,redis可以使用所有机器上的内存,如果没有分区,你最多使用一台机器上的内存。分区使redis的运算能力通过简单的计算机增加得到成倍的提升,网络带宽也随着计算机和网卡的增加而成倍增加。
8 你知道有哪些Redis分区实现方案
1 客户端分区: 就是在客户端已经决定数据存储到哪个redis节点或从哪个redis节点读取数据,大部分客户端已经实现了客户端分区。
2 代理分区: 就是客户端将请求发送给代理,然后代理决定去哪个redis节点写数据或者读数据。代理根据分区规则决定去请求哪些redis实例,并根据redis响应结果返回给客户端。redis和memcached的一种代理实现就是Twemproxy.
3 查询路由: 意思是客户端随机地请求任意一个redis实例,然后由redis将请求转发给正确的redis节点。redis-cluster实现了一种混合形式查询路由,但请求并不是从一个redis节点转发到另一个节点,而是在客户端帮助下直接重定向到正确的redis节点。
9 Redis分区有什么缺点?
1 涉及多个key的操作通常不会被支持,例如你无法直接对集合求交集,它们可能存放在不同的实例上。
2 多个key操作,无法使用redis事务。
3 分区的粒度是key,不能使用一个非常长的排序key存储一个数据集。
4 分区后,数据处理可能非常复杂,如备份时需要从不同的实例和主机上收集RDB/AOF文件。
5 分区后动态扩容或缩容可能很复杂。redis-cluster可以最大限度的保证在增加节点或删除节点时,对用户透明的数据再平衡。但客户端分区和一些代理分区不支持这种特性。
10 Redis常见性能问题和解决方案?
1 master不要做任何持久化工作,如rdb内存快照和Aof日志文件
2 如果数据比较重要,某个slave开启aof备份数据,策略设置为每秒同步一次。
3 为了主从复制的速度和连接的稳定性,master和slave最好在同一个局域网内。
4 不要在压力很大的主库上增加从库
5 主从复制不要采用网状结构,使用单向链表结构更为稳定,即 master <- slave1 <-slave2 .........
11 如何选择合适的持久化方式?
Rdb持久化方式能够在指定时间间隔对数据进行快照存储。
Aof持久化记录了每次对服务器写的操作,服务器重启时会重新执行这些命令来恢复原始的数据。
一般来说,当你想要达到足够的数据安全时,需要同时使用两种持久化功能,如果你能够忍受数分钟数据丢失,推荐使用rdb方式。
并不推荐只使用aof持久化方式
1: 定时执行rbd内存快照,非常便于数据备份
2: rbd恢复数据集的速度要比aof快
3: 使用rdb还可以避免aof程序的bug.