Redis特点
- 高性能:所有数据存储在内存中,所以它的读写性能非常高,官方数据10万/s
- 可靠性:redis将内存中的数据利用快照和日志的形式保存在内存中,避免发生断电或则机器故障,内存数据丢失的问题
- 丰富的数据类型
redis的value有哪些数据类型?以及其应用场景
- String
- 除了普通的字符串,还可以包含JSON,xml,数字,甚至二进制(图片),大小限制在512MB
- 常用命令:get、set、incr、decr、mget
- 应用场景:短信验证码、论坛点赞
- Hash
- value本身又是一个键值对结构
- 常用命令:hget,hset,hgetall
- 应用场景:适合保存一个对象
- List
- 存储多个有序的字符串,可重复,底层实现为双向链表,列表最多可存储2的32次方-1
- 常用命令:lpush(左添加)、rpush、lpop(左移除)、rpop
- 应用场景:用作栈或则队列
- Set
- 集合,存放一堆不重复的值,有交集,并集,差集的特性;去重原理:value为空的Hashmap,通过计算hash的方式来快速排重
- 常用命令:sadd,spop,smembers,sunion
- 使用场景:共同关注,共同喜好
- ZSet
- 用过一个设置一个额外的score来为成员排序、即自动排序。数据插入时,就已经进行天然排序。
- 常用命令:zadd、zrange、zrem、zcard
- 应用场景:排行榜、带权重的消息队列
发布订阅、事务
发布订阅:redis 127.0.0.1:6379> SUBSCRIBE redisChat 订阅频道
PUBLISH redisChat "Redis is a great caching technique"另一个客户端在此频道发布消息
事务:事务中的所有命令都会被序列化,按顺序执行,具有原子性,MULTI /'mlt/ 开始一个事务, 然后将多个命令入队到事务中, 最后由EXEC/g'zek; eg-/命令触发事务
如何对Redis中的key做有效期管理
- del的方式,直接删除指定的key
- 设置key的超时时间
- expire key seconds 设置超时时间,单位为秒
- ttl key 产看超时时间 -1表示没有超时时间,-2表示已经超时
- persist key持久化key,取消超时时间
- expireat key timestamp 设置超时时间点
当Key超时了,会被回收吗?
答案:Redis的key超时了,不会被自动回收,只是标识哪些键值对超时了,避免自动频繁回收造成系统卡顿,和出现太多的内存碎片
Redis何时进行回收
- 方式一:Redis内置的定时回收,每隔一段时间回收过期的键值对
- 方式二:惰性回收:一个超时的key,被再次用get命令访问时,将触发Redis将其从内存中清空。
Redis的回收策略
当达到预先设置的内存容量时,可以采用以下策略进行内存管理:
maxmemory-policy noeviction
- Volatile-lru:采用最近最少使用的淘汰策略,回收那些超时的键值对(采样)
- Allkeys-lru:对所有的键值对,采用最近最少使用的策略进行淘汰
- Volatile-random:对超时的键值对,采用随机淘汰的策略
- Allkeys-random:对所有的键值对,采用随即淘汰的策略
- Volatile-ttl:采用删除存活时间最短的键值对策略
- Noeviction /'vkn/:不淘汰,内存满的时候,只能读,不能写
Redis持久化机制-RDB和AOF
RDB:
Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。Redis重启时。RDB程序通过载入RDB文件来还原数据库的状态。
三种触发机制:
- save命令,同步命令,会找用Redis主进程,当Redis数据非常多时,
save 命令执行速度会非常慢,阻塞所有客户端的请求。所以不能在生产环境直接使用 - bgsave命令,异步保存,通过linux的fock()生成一个子进程将数据保存到磁盘上。
- 自动生成RDB,可以通过配置,redis自动生成rdb。它在满足“N秒内数据集至少有M个改动”这一条件满足时,自动进行数据集保存操作。
注意:每一次保存都是完整的保存,不是追加,在Redis意外宕机,可能会丢失几分钟的数据
AOF:
快照功能(RDB)并不是非常耐久(durable/'drbl/): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。redis 1.1增加了一种完全耐久的持久话方式:AOF
在配置文件中开启AOF: appendonly yes
开启后,每当redis执行一条改变数据集的命令时(如set),这个命令就会被追加到AOF文件的末尾。当redis重启时,程序通过重新执行AOF文件的命令来达到重建数据库的目的。
AOF持久化的三种策略
最后一种是有操作系统来决定什么时候同步数据,更快,但是也更不安全的选择。
AOF重写的实现方式,bgrewriteaof命令,重写会创建一个当前AOF文件的体积优化版本。
为什么要使用分布式缓存?
集群部署,单机版的缓存,这个缓存的数据无法共享
缓存就是内存,所以会消耗本服务器的内存资源,也会影响到服务器的性能
|