redis中间件

发布于:2025-07-18 ⋅ 阅读:(21) ⋅ 点赞:(0)

redis 通俗易懂的说是个键值对数据库 能够快速响应到客户访问到的内容 

1.当作缓存使用 把热点数据存储到内存里 直接访问的redis 速度极快

2.当临时储物柜 数据可设过期自动清理 比如说手机验证码redis 过期自动删除

3.可以进行实时更新 特别快

特性 Redis MySQL
存储位置 内存(快) 硬盘(慢)
用途 缓存、临时数据 永久存储
速度 微秒级响应 毫秒级响应
数据类型 字符串、列表、哈希等 只有表结构
1.部署redis中间件:

wget http://download.redis.io/releases/redis-5.0.12.tar.gz

tar -zxf redis-5.0.12.tar.gz -C /data #解压到/data下

mv redis-5.0.12 redis

yum install -y gcc gcc-c++

cd /data/redis

make PREFIX=/data/redis install

ln -sf /data/redis/bin/redis-cli /usr/bin/redis-cli   #创建软链接 可以直接redis-cli登入 不用繁琐输入目录启动

mkdir -p /data/redis/{data,etc,logs}   #创建 数据存储 配置 日志目录

touch /data/redis/redis.conf

bind 0.0.0.0   #允许所有服务器连接 

protected-mode yes  #需要密码才能访问

port 6739 # 端口号

tcp-backlog 511

timeout 0

tcp-keepalive 300

daemonize yes

supervised no

pidfile /var/run/redis.pid

loglevel notice

logfile "/data/redis/logs/redis.log" # 日志存放位置

databases 16

always-show-logo yes

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir /data/redis/data # 数据存放目录

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

replica-lazy-flush no

appendonly yes # 是否开启全持久化模式

appendfilename "appendonly.aof"

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-log-slower-than 10000

slowlog-max-len 128

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096

stream-node-max-entries 100

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit replica 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

requirepass 123456 # redis密码

maxmemory 2G   # 内存上限 做的资源限制

#rename-command KEYS ""

rename-command FLUSHALL ""

rename-command FLUSHDB "

 #启动redis   /data/redis/bin/redis-server /data/redis/redis.conf  

/data/redis/bin/redis-cli -h 127.0.0.1 -p 6739 -a 123456 登入

2.redis介绍
类型:

作为 Key-value 型数据库,Redis 也提供了键(Key)和键值(Value)的映射关系。但是,除 了常规的数值或字符串,Redis 的键值还可以是以下形式之一:

 Lists (列表)  Sets (集合)  Sorted sets (有序集合)  Hashes (哈希表)

键值的数据类型决定了该键值支持的操作。Redis 支持诸如列表、集合或有序集合的交集、 并集、查集等高级原子操作;同时,如果键值的类型是普通数字,Redis 则提供自增等原子 操作。

持久化

通常,Redis 将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据 持久化:使用截图的方式,将内存中的数据不断写入磁盘;或使用类似 MySQL 的日志方式, 记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。

主从同步

Redis 支持将数据同步到多台从库上,这种特性对提高读取性能非常有益

相比需要依赖磁盘记录每个更新的数据库,基于内存的特性无疑给 Redis 带来了非常优秀的 性能。读写操作之间有显著的性能差异。

3.操作简单数据库

设置一个键值对        查看key为name的value   删除     验证键是否存在

4.redis 数据类型及其操作:
4.1strings 类型及操作  

string 是最简单的类型 一个key对应一个value   

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据,比如 jpg 图片或者序 列化的对象。从内部实现来看其实 string 可以看作 byte 数组,最大上限是 1G 字节,

setnx

设置 key 对应的值为 string 类型的 value。如果 key 已经存在,返回 0,nx 是 not exist 的意思。

setex

设置 key 对应的值为 string 类型的 value,并指定此键值对应的有效期。如图为10s,10s之后查询不到

setrange

设置一个key和vaule 利用setrange命令替换内容 其中2是指从下标为2(包含2)的字符开始替换

mset  利用mset一次设置多个key的值

msetnx  

一次设置多个 key 的值,成功返回 ok 表示所有的值都设置了,失败返回 0 表示没有任何值 被设置,但是不会覆盖已经存在的 key

 

get  获取库中存在key的value

getset 设置库中存在的key的value但是输出旧的value key 不存在的话输出nil

getrange 获取指定key的value的子字符串

mget 一次性获取多个key的value 不存在返回nil

incr 对key的值做加加操作 如果value不是int的话value会返回错误

incrby 和incr类似 加指定值  

decr 做减减操作

decrby 减指定值

append 给key的字符串值增加value 返回新字符串的长度

strlen 取指定key的value的长度

4.2hashes类型及操作
5.redis的主从复制 

主机:192.168.83.215 6380   从192.168.83.109

主从同步:一个master可有多台slave节点进行同步

主节点配置:conf文件中需要改

从节点配置:

在主机写入内容salve可以看到

同步成功

5.1主从同步原理:

slave节点发送同步请求到master master通过salve节点的认证 

然后master节点开启一个进程发送rdb内存快照到slave 

slave 使用flushall清除本地缓存  然后接受master的快照

同时master还可以写入数据 新写入的数据通过 replactionfeedslave函数一条条写入到slave中

主从同步存在的问题 :从库无法写入数据 然后主库挂了该怎么解决呢 由此引入了哨兵

5.2redis哨兵

master故障可以实现slave切换从而实现高可用

哨兵会像master和slave发送消息 确认对方是否活着 

存在主观和客观下线

如何启动哨兵

修改/data/redis/sentinel.conf  配置文件  

protected-mode no #安全模式 要不要输密码

port 26379 #哨兵监控端口

daemonize no #前台运行

sentinel monitor my master 192.168.83.215 6379 1   #被监控的master以及端口 以及有问题后需要决定挂掉的票 数 

/data/redis/bin/redis-sentinel  /data/redis/sentinel.conf

6.事务

 可以一次执行多个命令,是一个命令组,一个事务中,所有命令都会序列化(排队),不会被插队;
     一个队列中,一次性,顺序性,排他性的执行一系列命令

     三特性

                ○ 隔离性:所有命令都会按照顺序执行,事务在执行的过程中,不会被其他客户端送来的命令打断
                ○ 没有隔离级别:队列中的命令没有提交之前都不会被实际的执行,不存在“事务中查询要看到事务里的更新,事务外查询不能看到”这个头疼的问题
                ○ 不保证原子性:冤有头债有主,如果一个命令失败,但是别的命令可能会执行成功,  没有回滚

三步走

                ○ 开启multi
                ○ 入队queued
                ○ 执行exec
        ● 与关系型数据库事务相比,
                ○ multi:可以理解成关系型事务中的 begin
                ○ exec :可以理解成关系型事务中的 commit
                ○ discard :可以理解成关系型事务中的 rollback

multi  开启事务 一起执行

discard  放弃之前的操作 恢复原来的值

一句报错,全部取消,恢复到原来的值

追究责任,谁的错,找谁去

7.利用备份恢复配置数据

redis通过rdb快照实现 部分数据持久化  AOF追加日志持久化

通过rdb加aof 实现混合持久化策略

7.1rdb(快照持久化)定时生成数据快照

适合备份和快速恢复 但是可能丢失最后一次快照后的数据

vim redis.conf

save 900 1      # 900秒(15分钟)内至少1个key变更则触发保存
save 300 10     # 300秒(5分钟)内至少10个key变更则触发保存
save 60 10000   # 60秒内至少10000个key变更则触发保存
dbfilename dump.rdb  # RDB文件名
dir /data/redis/          # 保存路径

新生成的一个dump.rdb文件

源目标主机  

scp /data/redis/dump.rdb root@192.168.83.215:/tmp/

目标主机:先登入 然后shutdown掉

cp /data/redis/dump.rdb           /data/redis/dump.rdb.back

Mv /tmp/dump.rdb   /data/redis/

sudo systemctl start redis

redis-cli –p 6739   -a 123456 查看内容已经同步

2.aof

vi redis.conf

appendonly yes               # 启用AOF

appendfilename "appendonly.aof"  # AOF文件名

appendfsync everysec         # 每秒同步一次(平衡性能与安全)

# appendfsync always        # 每次写操作都同步(最安全,性能最低)

# appendfsync no            # 由操作系统决定同步时机(最快,可能丢失数据)

Aof重写策略 移除冗余命令:

Auto-aof-rewrite-percentage 100 #aof文件增长100%时触发重写

Auto-aof-rewrit-min-siza 64 #aof文件最小重写大小auto-

选择不停机(这就是aof的弊端)可能会丢失一些刚写入的数据

源目标主机 :scp /data/redis/appendonly.aof  root@192.168.83.215:/tmp/

目标主机:rm –rf /data/redis/dump.rdb

rm –rf /data/redis/appendonly.aof

redis-cli –p 6739   -a 123456    shutdown #关闭服务

mv /tmp/appendonly.aof /data/redis/

vi /data/redis/redis.conf  #确保服务开启

然后启动redis 查看数据同步成功

3.混合持久化(rdb+aof)

Vi /data/redis/redis.conf

aof-use-rdb-preamble yes  # 开启混合模式(AOF文件前半段是RDB格式,后半段是AOF日志)

源目标主机:通过scp 远传rdb文件和aof文件到目标主机redis目录下

目标主机:停止redis服务

将rdb文件和aof文件导入正确目录下

启动redis服务

数据备份恢复完成


网站公告

今日签到

点亮在社区的每一天
去签到