文章目录
[1、配置获取 config get * config get requirepass](#1、配置获取 config get * config get requirepass)
[四、 事务与管道 (Pipeline)](#四、 事务与管道 (Pipeline))
[Lua 脚本](#Lua 脚本)
[五、 高可用与集群](#五、 高可用与集群)
一、定义
开源、基于内存、可持久化的键值对(Key-Value)数据库。
核心特性
高性能:数据存储在内存中,读写速度极快。
丰富的数据结构:不仅是字符串,支持多种复杂数据结构。
持久化:支持 RDB 和 AOF 两种方式将内存数据保存到磁盘,防止数据丢失。
高可用和分布式:通过 Redis Sentinel 实现高可用,通过 Redis Cluster 实现分布式存储。
原子性:所有单个操作都是原子的,多个操作可通过 Lua 脚本或事务实现原子性。
二、Redis配置文件常见部分解释
1、配置
获取
config get *
config get requirepass
设置
修改配置文件
永久
客户端修改
config set requirepass 456789
服务器未重启,重启则使用配置文件配置
2、在文档redis.windows.conf下常用解释:
include
导入其他配置文件
port 6379 端口号
bind IP
只能通过IP来访问reids服务
timeout 0
客户端未操作断开时间
loglevel notice
日志级别
logfile ""
日志文件
databases 16
默认有16个数据库
Save the DB on disk:
保存数据到磁盘,重启服务数据不丢失
启动加载数据
DB loaded from disk
关闭服务之前保存数据
DB saved on disk
保存规则
save <seconds> <changes>
save 900 1
如果只有一个更改, 15分钟以后同步到磁盘
save 300 10
如果只有10个更改, 5分钟以后同步到磁盘
save 60 10000
如果只有10000个更改, 1分钟以后同步到磁盘
dbfilename dump.rdb
数据文件名字
dir ./
数据文件路径
requirepass foobared
配置密码
maxclients 10000
最大连接数
三、数据类型
键的操作
delete(keys) 删除键
expire(key, time) 给键添加有效期
exists(key) 是否存在该键
ttl(key) 存活时间
type(key) 返回对应的类型
keys(*) 展示所有匹配的键
字符串
get 获取指定键的值
mget 一次性获取多个键的值
set 设置指定键的值
mset 一次性设置多个键的值
setex 设置带有有效期的键值对
incr 将键的值加 1
incrby 将键的值增加指定的整数
decr 将键的值减 1
decrby 将键的值减少指定的整数
strlen 返回长度
列表
lpush 左侧插入
rpush 右侧插入
lpop 左侧删除,并且返回
rpop 右侧删除,并且返回
llen 返回列表元素个数
lrange 返回制定索引范围内的所有元素
lindex 返回指定所有对应的数据
ltrim 截取列表指定范围内的数据
哈希
hget 获取哈希表中指定字段的值
hmget 一次性获取哈希表中多个字段的值
hset 设置哈希表中指定字段的值
hmset 一次性设置哈希表中多个字段的值
hlen 返回键值对个数
hexists 是否有某个字段
hdel 删除某个字段
hkeys 所有的字段
hvals 所有字段对应的值
集合
smembers 获取集合中的所有成员
sismember 检查指定的值是否是集合的成员
scard 返回集合中的元素个数
sadd 向集合中添加一个或多个成员
srem 从集合中删除一个或多个成员
sinter 计算多个集合的交集
sunion 计算多个集合的并集
sdiff 计算多个集合的差集(第一个集合中存在,而其他集合中不存在的元素)
有序集合
zadd (key, {value: score, value2:score2})
zrem 删除元素
zcard 统计有序集合元素个数
zscore 返回元素的权重、分值
zrank 返回元素对应的排名
zrange 根据排序 返回指定范围内的所有元素
zcount 统计指定 分值范围之内元素个数
主从复制
slaveof <masterip> <masterport> 主从配置
masterauth 主机密码
使用redis来缓存mysql数据
内存操作效率远远高于磁盘
缓存雪崩 : 在某一时刻,大量缓存数据同时过期失效,导致大量请求绕开缓存,直接请求mysql数据库,导致mysql数据库巨大的压力甚至使其崩溃。
避免方法: 设置随机过期时间
缓存穿透 :查询mysql数据库中根本不存在的数据,此时缓存中也不会有,就导致大量请求直接请求mysql数据库。
避免: 当mysql中数据不存在,在redis数据库缓存空对象
四、 事务与管道 (Pipeline)
事务
-
命令 :
MULTI
(开启事务) -> 输入命令队列 ->EXEC
(执行事务) /DISCARD
(取消事务)。 -
特点 :不保证原子性 !事务中的命令是串行执行,但执行过程中可能会被其他客户端命令插入。没有回滚机制。
Lua 脚本
-
确保多个命令的原子性执行,执行期间整个脚本不会被其他命令打断。
-
命令:
EVAL
,EVALSHA
。
管道 (Pipeline)
-
目的 :优化网络性能,将多个命令打包一次发送,减少网络往返时间(RTT)。
-
注意:Pipeline 不是事务,不保证原子性。
五、 高可用与集群
主从复制 (Replication)
-
角色:Master(主,写)和 Slave(从,读)。
-
作用:数据备份、读写分离、扩展读性能。
-
原理:全量同步(RDB) + 增量同步(命令传播)。
哨兵 (Sentinel)
-
作用 :监控 主从节点,实现自动故障转移 (Master 宕机时,自动将一个 Slave 提升为新的 Master)和配置提供者(客户端通过哨兵发现当前 Master 地址)。
-
命令 :
redis-sentinel
。
集群 (Cluster)
-
作用 :数据分片 (将数据自动分布到多个节点),提供横向扩展能力。
-
分片原理:采用哈希槽(Hash Slot),共 16384 个槽。每个节点负责一部分槽。
-
特性 :客户端直连任意节点,节点间通过
gossip
协议通信。支持主从复制和故障转移。