介绍

redis是NoSql数据库,完全开源免费,高性能的分布式内存数据库,同时支持持久化。
redis默认有16个数据库,初始默认使用0号库,编号为0-15
redis是单进程单线程的网络模型,以此来处理数据的读写,有些任务是需要fork子进程来处理,比如:rdb,aof

数据类型

String(字符串)

Hash(哈希)

List(列表)

Set(无序集合)

SortedSet(有序集合)

过期策略

  • 定期删除
    redis默认会每个100ms随机抽取设置了过期时间的key,验证是否过期,如果过期就删除。

假设redis数据量较大时,这种策略就会出现缓存到期但并没有被删掉的情况,而且cpu的负载会很高导致崩溃。

  • 惰性删除
    在获取key的时候进行检测过期了就进行删除不返回任何东西。
  • 内存淘汰机制
    一般使用allkeys-lru,当内存不足时,移除最近最少使用的key。

内存淘汰机制

maxmemory 100mb # 配置最大内存
maxmemory-policy allkeys-lru # 配置淘汰机制规则
maxmemory-samples 5 # 默认5,检测5个key删除一个key,越多的话会占用更多的cpu
# replica-ignore-maxmemory yes

# 从 Redis 5 开始,默认情况下,replica 节点会忽略 maxmemory 设置(除非在发生 failover 后,此节点被提升为 master 节点)。 这意味着只有 master 才会执行过期删除策略,并且 master 在删除键之后会对 replica 发送 DEL 命令。

# 这个行为保证了 master 和 replicas 的一致性,并且这通常也是你需要的,但是若你的 replica 节点是可写的, 或者你希望 replica 节点有不同的内存配置,并且你确保所有到 replica 写操作都幂等的,那么你可以修改这个默认的行为 (请确保你明白你在做什么)。

持久化

redis除了缓存服务之外,同样也可以将缓存数据进行持久化处理。

推荐阅读

数据快照

默认情况下redis是开启数据快照的,默认路径是redis根目录,一个dump.rdb的文件。
快照配置

dbfilename dump.rdb # 快照文件名称
dir ./ # 快照文件路径

快照算法

save 900 1 # 900秒内,如果有1个缓存项发生变动,就更新快照
save 300 10 # 300秒内,如果有10个缓存项发生变动,就更新快照
save 60 10000

数据快照,就是典型的redis数据备份的典型方式,dump.rdb,存储起来即可。如果当前的数据崩溃了,需要还原到某个版本,只需要将备份文件,放在dump.rdb原有位置,重启redis,自动读取dump.rdb的内容。

可以通过linux定时任务进行快照备份。

AOF机制

AOF机制是redis另一种持久化机制,可以解决在快照备份时突然出现崩溃,短期内丢失数据的问题。
AOF会将每次修改记录下来。

appendonly yes # 开启AOF
appendfilename "appendonly.aof" # 文件名称

事务

基本操作

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set "test" 1
QUEUED
127.0.0.1:6379> exec
1) OK
  • multi 开启事务
  • exec 提交事务
  • discard 取消事务,执行该命令事务中的操作也会被取消

redis的事务不可进行嵌套。每次只能操作一个事务。

概念

事务操作必须保证数据的一致性,并且需要保证原子性操作,要么本次命令全部执行,要么全部不执行。

watch

该命令可以为redis提供乐观锁机制。

127.0.0.1:6379> watch key
OK


watch用来监听多个key,以此保证事务提交时,这些key没有被其他客户端修改,如果某一个key被修改,那么本次事务将会失败。

unwatch
表示取消对某些key的监听

Redis高可用

最后修改:2020 年 10 月 20 日 10 : 52 PM
如果觉得我的文章对你有用,请随意赞赏