Redis

2021-11-29  本文已影响0人  李霖弢

Remote DIctionary Server 是key-value非关系型数据库,通常运行在内存中。
redis采用单线程模型(I/O多路复用机制),每一条到达服务端的命令不会立刻执行,而是进入一个队列,逐个执行。因此不会有两条命令被同时执行,不需考虑并发安全性

常见的redis和数据库联动方式

使用场景

  1. 对于执行耗时久,经常需要调用,但结果不频繁变动的SQL,适合将运结果放入缓存,后续请求直接从缓存中获取,迅速响应。
  2. 处理高并发,利用redis做缓冲,而不是直接访问数据库。

数据类型

数据命名

命名通常以:分割,如operate_limit:action_quotation_create:898

内存释放机制

redis数据默认永不过期,即TTL(Time To Live)为-1
对过期数据,redis采用定期删除+惰性删除:

当内存占满时,新的写入会报错。此时可在redis.conf(redis.windows.conf)文件中修改内存淘汰机制。

持久化

redis的数据直接在内存中进出,所以速度很快。但为了防止进程中止时数据丢失,redis也有自己的持久化策略。

RDB(全量保存)

redis默认会定期将内存数据库快照保存在/redis/dump.rdb二进制文件中。其默认策略如下(采用bgsave):

# save ""      -- 开启该项并注释以下内容可关闭RDB
save 900 1   -- 900秒内至少有一个改动
save 300 10     -- 300秒内至少有10个改动
save 60 10000   -- 60秒内至少有10000个改动

通过在redis-cli中执行savebgsave指令,可以手动触发RDB持久化。

特点:

AOF(Append-Only File 增量保存)

类似mysql的二进制日志binlog,redis每执行一次写入,都会将该命令追加到/redis/appendonly.aof文件中(先写入os cache,然后通过fsync刷盘)

可通过修改redis.conf修改相关配置,修改后需要重启redis生效:

# 启用AOF设置
appendonly yes:启用AOF(为no则禁用)
# 刷盘频率设置
appendfsync always:每次执行写命令都会刷盘,性能差,但最安全。
appendfsync everysec:(默认值)每秒刷盘一次,兼顾性能和安全,最多丢失1秒数据。
appendfsync no:不自动刷盘,仅由用户手动触发刷盘。
# AOF重写频率设置
auto‐aof‐rewrite‐min‐size 64mb:aof文件至少达到了64m才会触发重写
auto‐aof‐rewrite‐percentage 100:距离上次重写增长了100%才会再次触发重写
混合持久化

如可以接受数分钟的数据丢失,则只用RDB即可。
如不可接受,通常不单独使用AOF,而建议混合持久化(Redis 4.0以上):

开启混合持久化,需要先开启appendonly yes
aof‐use‐rdb‐preamble yes 

开启后,每当AOF重写时,会将之前的内容按RDB方式存储,即appendonly.aof中同时包含了RDB与AOF内容,同时避免了两者的弊端。

更多备份
  1. 写crontab定时调度脚本,每小时都copy一份rdb或aof的备份到一个目录中去,仅仅保留最近48小时的备份。
  2. 每天都保留一份当日的数据备份到一个目录中去,可以保留最近1个月的备份。
  3. 每天晚上将当前机器上的备份复制一份到其他机器上,以防机器损坏。
关闭持久化

如果只是当作缓存,可以将配置文件中的持久化规则改为空字符串save ""appendonly no,删除原本的.rdb.aof文件,并重启redis

save ""
# save 3600 1
# save 300 100
# save 60 10000

appendonly no

安装

windows
  1. 下载Redis-x64-3.2.100.zip
  2. 通过cmd指定到该redis目录。使用命令:redis-server.exe 启动服务
    在另一命令行中使用redis-cli.exe查看是否连接成功
  3. redis-server.exe --service-install redis.windows.conf把redis设置为一个windows服务
  4. 使用redis-server --service-start开启服务,或直接在任务管理器(服务)中找到redis手动开启

redis默认占用6379端口,也可以手动指定端口开启多个redis服务

redis-server --service-install --service-name redisService1 --port 10001
redis-server --service-start --service-name redisService1

外部指令(系统命令行中使用)

windows常用指令

在redis目录下:

linux常用命令

redis-cli

启动redis(即进入redis-cli命令行)
常用指令

进入redis-cli后可输入指令


常见问题

redis和数据库双写一致性问题

综合各种方式的弊端和解决方案,有以下两种方案

缓存穿透和缓存雪崩

中小企业的并发量通常不用考虑该问题

redis的并发竞争key

例如A、B两者同时要给该key的value+1,顺序为

  1. A读取value,本地操作+1
  2. B读取value,本地操作+1
  3. A存入value+1
  4. B存入value+1,最终value没能+2

可以通过乐观锁(不适用于分片集群)、分布式锁、添加时间戳、或使用队列解决


图形化界面

RedisDesktopManager,git上直接下载exe文件即可
远程连接可通过SSH通道配置

上一篇 下一篇

猜你喜欢

热点阅读