Redis 端口 : 6379
客户端登录
redis-cli
基础命令
Redis 默认 16 个库 0-15
切换库 :select 0
-
删除本库:flushdb
删除所有库:flushall
库记录数:dbsize
-
显示所有记录:keys *
显示 k开头两个字母的 : keys k?
-
设置键值对: set k1 v1
获取键对应值:get k1
五大数据类型
Redis 的数据都是 k v 形式 ,k 有点类似编程里 变量名的感觉, 而 v 可以是各种数据类型
- String (二进制安全的String)
- Set
- ZSet(有序集 )
- HashMap
- List
String
-
显示所有记录:
keys *
-
判断是否存在j键 :
exists k1
1 表示有
0 表示没有
-
移动到其他库:
move k1 2 ( 2 为数据库 编号)
-
查看还有多长时间过期:
ttl k1
-1 表示永不过期
-2 表示已过期
设置过期时间,单位 秒:
expire k1 7
-
删除记录:
del k1
-
查看 key 类型 :
type k1
-
字符串追加
append k1 12345
( k1 原来是 1 ,执行完成后变为 112345)
-
字符串长度
strlen k1
(012345的长度为 6)
-
数字增加 1
incr k1
-
数字减少 1
decr k1
-
数字增加
incrby k1 3
-
数字减少
decrby k1 3
-
获取字符下标范围取字符串
getrange k1 0 3
(取 k1 对应字符串的 前 4 个字符 如 k1 为1123456 , 取得 1123 )
-
在指定范围设值
setrange k1 0 xxx
(如 k1 1123456 变为 xxx3456 )
-
设置值的同时设置过期时间 单位 秒
setex k1 10 v1
(设置 k1 为 v1 ,存活 10s )
-
如果不存在才设置值
setnx k1 v11
生效返回 1 ,未生效返回 0
-
同时设置多个 kv
mset k1 v1 k2 v2 k3 v3
-
同时获取多个
mget k1 k2 k3
-
同时设置多个 kv (不存在时才设置,有任何一个 k 设置失败,所有的 k 都不会设置)
msetnx k1 v1 k2 v2
List
-
从左侧添加
lpush list01 1 2 3 4 5
(依次从左添加 ,结果是 5 4 3 2 1)
-
从右侧添加
rpush list02 1 2 3 4 5
(依次从右添加 ,结果是 1 2 3 4 5 )
-
按范围显示 list
lrange list02 0 -1
(1 2 3 4 5 ,负数表示倒数 ,-1 即倒数第 1)
-
从左侧取出(取到并移除)一个
lpop list01
-
从右侧取出一个
rpop list01
-
按下标取元素
lindex list01 1
(取下标为 1,即 第 2 个元素)
-
获得 list 长度
llen list01
-
删 n 个 value
lrem 2 3
删除 2 个 value 为 3 的
-
截取 key 指定范围并赋值给 key
ltrim list01 3 5
(截取 list01 下标 3 到 5 的元素 ,并赋给 list01)
-
取出并放入
rpoplpush list01 list02
( 从 list01 右侧取出,放入 list02 左侧 )
-
设置 下标 为 n 的元素 值
lset list01 1 x
(把下标 为1 的元素设置为 x)
-
在元素前插入
linsert list01 before x java
(在元素 x 前面插入 java )
-
在元素后插入
linsert list01 after x oracle
( 在元素 x 后面插入 oracle )
Set
-
向 set 中添加
sadd set01 1 1 2 2 3 3
-
查询 set 中全部元素
smembers set01
-
查询元素是否存在
sismember set01 1
(存在返回 1 ,不存在返回 0)
-
获取 set 元素数量
scard set01
-
删除 set 中的元素
srem set01 3
-
随机获得 n 个元素
srandmember set01 3
(从 set01 中随机出 3 个元素)
-
随机出栈(取得并移除) 1个元素
spop set01
-
把一个 set 中的 元素,移动到 另一个 set
smove set01 set02 5
(把 set01 里面的 5 ,移动到 set02)
-
差集
sdiff set01 set02
(返回 在 set01 里 且 不在 set02 里面的元素)
-
交集
sinter set01 set02
-
并集
sunion set01 set02
Hash
相当于 k v 的 v 是 键值对
-
设置键值对
hset user id 11
( 相当 Map user ; user.put( id ,11 ) 的意思 )
-
获得值
hget user id
-
设置多组键值对
hmset customer id 11 name zs age18
-
获取对组键的值
hmget customer id name
-
获取全部键值对
hgetall customer
-
删除
hdel customer name
-
返回j键值对数量
hlen customer
-
是否存在
hexists customer name
-
返回所有键
hkeys customer
-
返回所有值
hvals customer
-
增加值
hincrby customer age 2
(对 customer 的 age 增加 2)
-
增加值(浮点型版本)
hincrbyfloat customer score 1.5
-
如果不存在才设置键值对
hsetnx customer age 16
ZSet
相当于
-
添加
zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5 100 v6
-
查询
zrange zset01 0 -1
结果为 : v1 v2 v3 v4 v5
-
带分数查询
zrange zset01 0 -1 withscores
结果为 v1 60 v2 70 v3 80 v4 90 v5 100 v6 100 ( 分数和结果是一体的 ,只是这么显示而已)
-
返回分数在范围内的
zrangebyscore zset01 60 90
返回分数 60-90 的包括 60 和 90
v1 v2 v3 v4
-
同上 但不包括 90
zrangebyscore zset01 60 (90
-
同上 但不包括 60 90
zrangebyscore zset01 (60 (90
-
将结果截取
zrangebyscore 60 90 limit 1 2
从结果中下标为 1 即第 2 个,截取两个返回
-
移除
zrem zset01 v5
-
统计个数
zcard zset01
-
统计 分数范围内的数量
zcount zset01 60 80
-
返回 排名
zrank zset01 v4
返回 v4 的排名,按照分数从小到大,分数相同时按照 v 的从小到大顺序排
-
返回逆序排名的下标
zrevrank zset01 v4
-
逆序显示范围内的元素
zrevrange zset 0 -1
-
逆序按分数范围显示元素
zrevrangebyscore zset01 90 60
配置文件
-
获取配置文件 某一项的值
config get requirepass
-
改密码
config set requirepass "123456"
-
用密码认证
auth 123456
(redis-cli 登录后 做操作会提示没有权限,在 Redis 客户端内 输入此命令进行认证)
-
获取 redis 在那个目录下启动的
config get dir
持久化
rdb :
每隔一段时间,把所有数据存到文件中,此时会把内存中的数据,整个复制一份到内存中,这时对内存的消耗很大
备份策略:
配置文件里
save 900 1
save 300 10
save 60 10000
表示没 900 秒内,有 1 次改动,则备份
-
运行时主动备份
客户端内命令: save
注意 flushall 清空操作,也会导致立即备份,但是这样做毫无意义
-
如何恢复
直接把 dump.rdb 文件放在启动目录下
aof
aop 是把对 redis 的操作记录下来,以此来达成备份
默认备份文件名:appendonly.aof
配置文件中
-
备份文件超过多大时候开始对操作记录进行整合,重写备份文件
auto-aof-rewrite-min-size 64mb
实际生产环境中,保守估计 数据要 3G 起步
-
修复受损的 aof 文件
redis-check-aof --fix appendonly.aof
rdb 和 aof 优先级
如果 dump.rdb 和 appendonly.aof 同时存在,则使用 aof 文件
事务
-
开启事务:
multi
-
执行:
exec
- 如果事务中出现编译时异常,命令不合规范,则整个事务失败
- 如果事务中出现运行时异常,如对字符型数据 xx 做自增,则只有此命令失败,事务中的其他命令正常执行
-
放弃事务
discard
-
监视
wath k1
(监视一个或多个 key ,在事务执行前,如果监视的 key 被改动,则整个事务执行失败)
watch k1 k2
multi
set k1 v11
set k2 v22
exec
如果 在 watch 后 exec 前,其他客户端执行 set k1 v1xx,则 整个事务执行失败
消息
-
订阅频道
subscribe c1 c2 c3
可以使用通配符
subsribe c*
-
发送消息
publish c2 hello-redis
主从复制
默认配置下
从机连接主机:从机 会完全复制主机的数据,包括连接主机命令执行前,主机拥有的数据
从机不能写
主机挂了:从机仍作为从机正常使用
主机回来:从机会自动续接上
从机挂了,再回来:需要重新输入命令连接主机,可以写进配置文件在启动时直接连接主机
-
显示信息
info replication
-
配置跟从主机
slaveof 127.0.0.1 6379
(会完全复制主机的数据,包括命令执行前,主机拥有的数据)
薪火相传
- 主机的从机,可以作为其他从机的主机,但是只起一个传递的效果,
反客为主
-
停止与其他数据库的同步,自己成为主机
slaveof no one
哨兵模式
主机死了之后,自动分配一个从机作为新的主机
主机重启启动后,会作为从机连接新的主机
sentinel.conf
sentinel monitor 被监控数据库的名字 被监控的数据库ip 被监控的数据库端口号 重新分配主机时需要获得的投票数
sentinel monitor host6379 127.0.0.1 6379 1
-
启动一个哨兵进程
redis-sentinel sentinel.conf