redis入门

1.redis是什么?

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

2.redis能做什么?优势在哪?

redis的性能极高(Redis能读的速度是110000次/s,写的速度是81000次/s)

支持的数据类型丰富(Strings, Lists, Hashes, Sets ,Ordered Sets, HyperLogLog)

同时可以作成消息队列(支持发布/订阅)

而且操作均为原子性(甚至合并操作的原子性)

主要的应用场景:

缓存(热数据)、计数器、队列(用作简单使用)、位操作、分布式锁与单线程机制、最新列表、排行榜等

Redis的7个应用场景

https://www.cnblogs.com/NiceCui/p/7794659.html

3.redis支持的数据结构有哪些?

Strings, Lists, Hashes, Sets ,Ordered Sets, HyperLogLog(>=2.8.9)

4.redis如何实现消息队列?

redis消息队列使用 redis中的list数据结构实现(左进右出),然后加上发布/订阅模型(即观察者模式),把耦合点单独抽离出来作为第三方,隔离易变化的发送方和接收方。

redis 消息发布订阅与消息队列

https://blog.csdn.net/jslcylcy/article/details/78201812

5.redis集群的实现?

Redis 在 3.0 版本以后就推出了集群模式。

Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。

Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。

slot机制

https://yq.aliyun.com/articles/66939

Redis 集群搭建详细指南

http://www.cnblogs.com/mafly/p/redis_cluster.html

redis集群的扩/缩容

https://blog.csdn.net/a491857321/article/details/52058693

6.redis原子性的实现?

主要通过MULTI(开始事务)、WATCH(监视key,有变化则撤销事务)、EXEC(执行事务)实现

Redis 事务

https://www.w3cschool.cn/redis/redis-transactions.html

7.redis锁的实现?

分布式锁一般有数据库乐观锁、基于Redis的分布式锁以及基于ZooKeeper的分布式锁三种实现方式

锁的可靠性:互斥性、死锁、解锁还需加锁人

基于Redis的分布式锁

https://www.w3cschool.cn/redis/redis-yj3f2p0c.html

8.redis的日志策略?

redis在默认情况下,是不会生成日志文件的,所以需要配置(建议使用config get/set进行配置)。

redis日志配置方法

https://blog.csdn.net/lhjllff12345/article/details/73564959/

9.redis持久化策略?

目前,通常的设计思路是利用Replication机制来弥补aof、snapshot性能上的不足,达到了数据可持久化。即Master上Snapshot和AOF都不做,来保证Master的读写性能,而Slave上则同时开启Snapshot和AOF来进行持久化,保证数据的安全性。

关于Redis持久化

http://www.cnblogs.com/chenpingzhao/p/5158791.html

10.redis的数据恢复?

redis通过SAVE、BGSAVE来进行备份(在redis安装目录中得到dump.rdb)

通过CONFIG GET dir得到安装目录(如/usr/local/redis/bin)

通过将dump.rdb放置在安装目录,即可实现数据恢复

注:BGSAVE、SAVE最好放在slave上进行,原因见9

11.redis淘汰机制?

server.maxmemory - 必须设置,不设置则在超过最大内存时,redis崩溃

maxmemory-policy - 设置淘汰机制

redis主要有6种淘汰机制

volatile-lru - 从已设置过期时间的数据集中淘汰较少使用的(Least Recently Used)

volatile-ttl - 从已设置过期时间的数据集中淘汰将要过期的

volatile-random - 从已设置过期时间的数据集中随机淘汰数据

allkeys-lru - 从所有数据集中淘汰较少使用的

allkeys-random - 从所有数据集中随机淘汰数据

no-enviction - 禁止驱除数据

注1:因为涉及到分布式内存下LRU算法的时间与空间复杂度,redis的lru不是可靠的lru

注2:一般在redis做缓存+持久化数据库的系统中,使用volatile-lru(幂律分布)或volatile-random(平等分布);在redis只做缓存数据库的系统中,使用allkeys-lru(幂律分布)或allkeys-random(平等分布)

《redis学习》-- 缓存淘汰策略

https://blog.csdn.net/lizhi_java/article/details/68953179?locationNum=1&fps=1

posted @ 2018-06-19 21:37  yc紫日  阅读(122)  评论(0编辑  收藏  举报