(1)什么是Redis?
【解答】
解释:Redis(Remote Dictionary Server:远程字典服务)
本质:redis是一个基于键值对(Key-Value)的内存数据库,是一种NoSQL(Not only SQL)
特点:
①目前最快的内存数据库之一(C语言编写)
②支持数据持久化(相比于memcache)
③安装简单(没有操作系统库依赖),功能稳定
④自带高可用和分布式(哨兵和集群)
⑤其他功能:键过期(优惠券)、会话缓存(网站登录)、发布与订阅、流水线(pipeline)、排行榜/计数器(视频访问量)等
⑥单线程,多核CPU可以多运行几个实例
(2)Redis支持哪几种数据类型?
①String:字符串
②List:列表
③Set:集合
④Sorted Set:有序集合
⑤hashes:哈希
(3)Redis有哪几种数据淘汰策略?
【解答】
①noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)
②allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
③volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
④allkeys-random: 回收随机的键使得新添加的数据有空间存放。
⑤volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
⑥volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。
【解析】默认是什么都不做,可以读,但是不能写入。当然可以选择回收最少使用的键(过期键),也可以选择回收一些随机的键(过期键),还可以选择在过期键中选择TTL较短的键。
(4)一个字符串类型的值能存储最大容量是多少?
【解答】512M
(5)MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
【解答】redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。参考第(3)题。
(6)Redis如何设置密码及验证密码?(日后研究)
【解答】
设置密码:config set requirepass 123456
授权密码:auth 123456
(7)说说Redis哈希槽的概念?
【解答】Redis集群的哈希槽(hash slots)一共16384个。在配置集群时,槽的数量一定要分配完,否则会报错。当有数据写入集群时候,集群根据一定的算法自动将数据均匀的落到相应的槽上,无须人工干预。
(8)Redis集群之间是如何复制的?
【解答】异步复制
(9)Redis key的过期时间和永久有效分别怎么设置?
【解答】
①过期时间:EXPIRE。举例:expire k1 10
②永久有效:PERSIST。举例:persist k1
测试:TTL k1
①-1:永不过期
②-2:不存在这个key
③其他正整数:正在一点一点过期
(10)查看Redis使用情况及状态信息用什么命令?
【解答】info
【解析】
cluster info:查看集群状态
info replication:查看主从复制状态
(11)Redis常见性能问题和解决方案?
【解答】
①Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
②如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
③为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
④尽量避免在压力很大的主库上增加从库
⑤主从复制不要用图状结构,用单向链表结构更为稳定,即:Master ←Slave1← Slave2← Slave3...
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
(12)Redis提供了哪几种持久化方式?
【解答】
第一部分:持久化方式
①RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
②AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
第二部分:持久化方案
①如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。
②你也可以同时开启两种持久化方式, 在这种情况下,<当redis重启的时候会优先载入AOF文件来恢复原始的数据> ,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。