key 的统一操作
# 删除指定key
del key
# 获取key是否存在
exists key
# 获取key的类型
type key
# 排序
sort
# 改名
rename key newkey
renamenx key newkey
# 为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
# 获取key的有效时间
ttl key
pttl key
# 切换key从时效性转换为永久性
persist key
# 查询key
keys pattern
keys * keys # 查询所有
jo* keys # 查询所有以jo开头
*jo # 查询所有以jo结尾
keys ??jojo # 查询所有前面两个字符任意,后面以jojo结尾
keys user:? # 查询所有以user:开头,最后一个字符任意
keys u[st]er:1 # 查询所有以u开头,以er:1结尾,中间包含一个字母,s或t
String 类型
# 添加/修改数据添加/修改数据
set key value
# 获取数据
get key
# 删除数据
del key
# 判定性添加数据
setnx key value
# 添加/修改多个数据
mset key1 value1 key2 value2 …
# 获取多个数据
mget key1 key2 …
# 获取数据字符个数(字符串长度)
strlen key
# 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
append key value
# 设置数值数据增加指定范围的值
incr key
incrby key increment
incrbyfloat key increment
# 设置数值数据减少指定范围的值
decr key
decrby key increment
# 数据具有指定的生命周期
setex key seconds value
psetex key milliseconds value
hash 类型
# 添加/修改数据
hset key field value
# 获取数据
hget key field
hgetall key
# 删除数据
hdel key field1 [field2]
# 设置field的值,如果该field"存在"则不做任何操作
hsetnx key field value
# 添加/修改多个数据
hmset key field1 value1 field2 value2 …
# 获取多个数据
hmget key field1 field2 …
# 获取哈希表中字段的数量
hlen key
# 获取哈希表中是否存在指定的字段
hexists key field
# 获取哈希表中所有的字段名或字段值
hkeys key
hvals key
# 设置指定字段的数值数据增加指定范围的值
hincrby key field increment
incrbyfloat key field increment
list 类型
# 添加/修改数据 左left 右:right
lpush key value1 [value2] ……
rpush key value1 [value2] ……
# 获取数据
lrange key start stop
lindex key index
llen key
# 获取并移除数据
lpop key
rpop key
# 移除指定数据
lrem key count value
# 规定时间内获取并移除数据
blpop key1 [key2] timeout
brpop key1 [key2] timeout
brpoplpush source destination timeout
set 类型
# 添加数据
sadd key member1 [member2]
# 获取全部数据
smembers key
# 删除数据
srem key member1 [member2]
# 获取集合数据总量
scard key
# 判断集合中是否包含指定数据
sismember key member
# 随机获取集合中指定数量的数据
srandmember key [count]
# 随机获取集中的某个数据并将该数据移除集合
spop key [count]
求两个集合的交、并、差集
# 交
sinter key1 [key2 …]
# 并
sunion key1 [key2 …]
# 差
sdiff key1 [key2 …]
# 求两个集合的交、并、差集并存储到指定集合中
sinterstore destinationKey key1 [key2 …]
sunionstore destinationKey key1 [key2 …]
sdiffstore destinationKey key1 [key2 …]
# 将指定数据从原始集合中移动到目标集合中
smove sourceKey destinationKey member
利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化 ,用于防止数据的意外丢失,确保数据安全性
RDB(数据快照),将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据
save
# 手动执行一次保存操作
save
# redis是个单线程的工作模式,它会创建一个任务队列,所有的命令都会进到这个队列里边,在这儿排队执行,执行完一个消失一个,当所有的命令都执行才可以,数据量大会阻塞,线上环境不建议
# 配置redis.conf文件
bind 192.168.241.100
port 6379
daemonize no
logfile "6379.log"
dir /redis/data
dbfilename "dump-6379.rdb"
bgsave
# 手动启动后台保存操作,但不是立即执行
bgsave
工作原理
执行bgsave的过程中立即返回后台正在保存的消息,子进程完成保存后,会再次返回一个完成保存的消息
优点
- RDB是一个紧凑压缩的二进制文件,存储效率较高
缺点
- RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据
AOF(过程日志)将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程
AOF写数据三种策略
-
always(每次):每次写入操作均同步到AOF文件中数据零误差,性能较低,不建议使用
-
everysec(每秒):每秒将缓冲区中的指令同步到AOF文件中,在系统突然宕机的情况下丢失1秒内的数据 数据准确性较高,性能较高,建议使用,也是默认配置
-
no(系统控制):由操作系统控制每次同步到AOF文件的周期,整体过程不可控
配置 redis.conf 文件
bind 192.168.241.100
port 6379
daemonize no
logfile "6379.log"
dir /redis/data
dbfilename "dump-6379.rdb"
# 10s之内有2个key发生改变,就会保存
save 10 2
# 开启AOF持久化功能,默认no,即不开启状态
appendonly yes
# AOF持久化文件名,默认文件名为appendonly.aof,建议配置为appendonly-端口号.aof
appendfilename "appendonly-6379.aof"
# AOF写数据策略,默认为everysec
appendfsync everysec
AOF重写
将对同一个数据的若干个条命令执行结果 转化成 最终结果数据对应的指令进行记录
手动重写工作原理