redis入门
Posted yc紫日
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于redis入门的主要内容,如果未能解决你的问题,请参考以下文章