问:redis是什么
答:1)redis是一个内存数据库
2)redis一般可以用来做缓存,消息队列
3)redis有一组相对丰富的数据类型
4)redis可以将数据复制到任何数量的从机中
5)redis是一个使用c语言编写的基于key-value的数据库
6)redis会周期性的把更新的数据写入到磁盘
问:连接redis客户端命令
答:redis -cli
问:redis的数据类型
答:字符串,散列,列表,集合
问:redis键命令
答:1)del key 删除一个指定的键
2)dump key 返回存储在指定键的值得序列化版本
3)exists key 检查键是否存在
问:redis字符串命令
答:1)set key value 设置指定键的值
2)get key 获取指定键的值
问:redis哈希命令
答:hmset ukey username “yiibai” password “123456”
问:redis列表命令
答:1)lpush alist redis
2)lpush alist mongodb
3)lrange alist 0 10
问:redis集合命令
答:1)sadd yiibailist redis
2)sadd yiibailist mongodb
3)sadd yiibailist sqlite
4)smembers yiibailist
问:redis发布订阅
答:1)redis发布订阅是一种消息通信模式,发送者发送消息,订阅者接收消息
2)redis管道是一个cs模式的tcp server,使用http类似的请求响应协议。
3)一个client可以通过一个socket连接发起多个请求命令。
4)redis虚拟内存没有使用os提供的虚拟内存机制而是自己实现了自己的虚拟内存机制
问:redis事务命令
答:1)multi 标记事务块的开始
2)exec 执行multi后发出的所有命令
3)redis脚本用于使用lua解释器来执行脚本
4)redis使用脚本的命令是eval命令
5)redis中的连接命令是用于管理与redis服务器的客户端连接
6)auth password 使用给定的密码验证服务器
7)echo message 打印给定的字符串信息
8)quit 关闭当前连接
9)select index 更改当前连接的所选数据库
问:redis服务器命令
答:1)save 将数据集保存到磁盘
2)mointor 监听服务器实时接收的所有请求
3)flushall 从所有数据库中删除所有键
4)flushdb 删除当前数据库中的所有键
问:Reids的特点
答:Redis本质上是一个Key-Value类型的内存数据库很像memcached,整个数据库统统加载在内存当中进行操作,
定期通过异步操作把数据库数据flush到硬盘上进行保存,因为是纯内存操作Redis的性能非常出色每秒可以
处理超过10万次读写,Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个
value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方
说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系
统等等,另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作功能加强版的memcached来用。
问:Redis的主要缺点是
答:数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
问:Redis主从模式
答:redis支持主从的模式,原则:Master会将数据同步到slave,而slave不会将数据同步到master,Slave启动时会连接master来同步数据。
这是一个典型的分布式读写分离模型,我们可以利用master来插入数据,slave提供检索服务,这样可以有效减少单个机器的并发访问数量。
问:Redis读写分离模型
答:通过增加Slave DB的数量,读的性能可以线性增长,为了避免Master DB的单点故障,集群一般都会采用两台Master DB做双机热备,
所以整个集群的读和写的可用性都非常高,读写分离架构的缺陷在于不管是Master还是Slave,每个节点都必须保存完整的数据,
如果在数据量很大的情况下,集群的扩展能力还是受限于单个节点的存储能力。
问:数据分片模型
答:为了解决读写分离模型的缺陷,可以将数据分片模型应用进来。,可以将每个节点看成都是独立的master,然后通过业务实现数据分片
结合上面两种模型可以将每个master设计成,由一个master和多个slave组成的模型。
问:Redis的回收策略
答:1)volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
2)volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
3)volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
4)allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
5)allkeys-random:从数据集中任意选择数据淘汰
6)no-enviction:禁止驱逐数据
问:使用Redis有哪些好处
答:1)速度快因为数据存在内存中类似于HashMap
2)HashMap的优势就是查找和操作的时间复杂度都是O(1)
3)支持丰富数据类型
4)支持事务操作都是原子性所谓的原子性就是对数据的更改要么全部执行要么全部不执行
5)丰富的特性可用于缓存消息
6)按key设置过期时间过期后将会自动删除
问:Redis常见的性能问题都有哪些
答:Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务
所以Master最好不要写内存快照,Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,
OF文件过大会影响Master重启的恢复速度,Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,Master调用BGREWRITEAOF重写AOF文件
AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象,Redis主从复制的性能问题,为了主从复制的速度和连接的
稳定性,Slave和Master最好在同一个局域网内,主从复制不要用图状结构用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3…
这样的结构方便解决单点故障问题,实现Slave对Master的替换,如果Master挂了可以立刻启用Slave1做Master,其他不变。
问:redis最适合的场景
答:会话缓存(Session Cache),全页缓存(FPC),队列,排行榜/计数器,发布/订阅。