1、redis是什么?
redis是一种以key-value的形式存储数据的非关系型数据库。
2、Redis 的支持数据类型?
string、hash、list(实现消息队列)、set(利用唯一性)、zset(可以进行排序 )
3、redis的持久化机制
RDB 持久化可以在指定的时间间隔类生成的数据集持久化到磁盘。RDB是通过fork子进程来协助完成数据持久化工作的。数据安全性低,RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候) 。
AOF文件存储的方式:将每一个收到的写命令都通过write函数追加到文件中。是日志形式,当数据写入内存中的时候,在日志文件下记录下所有写操作。
RDB的效率高于AOF,AOF文件比RDB更新频率高,优先使用AOF还原数据;AOF比RDB更安全也更大。如果两个都配了优先加载AOF。
4、redis淘汰策略
(1、从已设置过期时间的数据集里面挑选最少使用的数据淘汰
(2、从已设置过期时间的数据集里面挑选最近快要过期的数据进行淘汰
(3、从所有的数据集里面挑选最少使用的数据进行淘汰。
5、redis 和 memcached 的区别
(1)、redis支持更丰富的数据类型,而memcached 只支持string类型;
(2)、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而Memecache把数据全部存在内存之中;
(3)、Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的多路 IO 复用模型。
6、Redis 支持的 Java 客户端都有哪些?
redisson(redis集群的分布式锁)
jedis
7、redis的使用场景
(1、做数据缓存
(2、队列,因为redis支持list和set数据类型
(3、排行榜/计数器(帖子点赞,点赞数,浏览数)
(4、发布/订阅
8、redis集群
(1)集群方案:主从,哨兵,cluster集群。
哨兵的工作机制:主观下线,每个哨兵进程以每秒一次的频率向整个集群中的master主服务器,Slave从服务器以及其他哨兵进程发送一个PING命令,如果一个实例最后一次回复PING命令的时间超过一个指定的值,那么这个实例就被标记为主观下线状态。
客观下线:当有半数以上的哨兵进程在指定的时间范围内确认主服务器进入了主观下线状态,则主服务器会被标记为客观下线。如果没有足够数量的哨兵同意主服务器下线,主服务器的客观下线状态就会被移除。若主服务器重新向哨兵进程发送PING命令返回有效回复,主服务器的主观下线状态就会被移除。
哨兵的优点:可以自动切换主从服务器,系统的可用性更高;读写分离,分担了读取数据的压力;数据备份,防止数据丢失。
cluster集群:
多主多从,实现了redis的分布式存储,每台redis的节点上存储不同的内容;
使用哈希槽的方式来分配数据,默认分配了16384个槽点。
使用16384个槽点的原因?
因为redis的设计者认为在一个redis的集群节点不会超过1000个,而节点与节点之间进行通信发送的心跳包压缩之后有2k就已经足够了,这个时候没有必要使用更多的槽点,这样的在通信的时候就会消耗更多的带宽,为了节省资源,所以我们使用的是16384个槽点。