key操作
# 查询所有key
keys *
# 判断key是否存在
exists k1
# 查看值类型
type k1
# 删除key
del k1
# 异步删除key
unlink k1
# 设置过期时间,默认单位秒
expire k1 10
# 查看key剩余存活时间,-1永不过期,-2已过期
ttl k1
数据库操作
# 切换数据库
select 0
# 查看当前库的key数
disize
# 清空当前库
flushdb
# 清空所有库
flushall
字符串操作
# 设置值
set k1 v1
# 获取值
get k1
# 字符串追加
append k1 abc
# 获取字符串长度
strlen k1
# 值不存在则设置值
setnx k1 v1
# 递增
incr k1
incrby k1 10
# 递减
decr k1
decrby k1 10
# 批量操作
mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k2 v2 k3 v3
# 范围操作
getrange k1 0 1
setrange k1 1 2
# 设置值同时设置过期时间,单位秒
setex k1 20 v1
# 获取旧值设置新值
getset k1 v2
# 设置过期时间且不存在才设置值
set lock 1 nx ex 10
列表操作
# 压入元素
lpush k1 v1 v2 v3
rpush k2 v1 v2 v3
# 弹出元素
lpop k1
rpop k1
# 弹出并压入
rpoplpush k1 k2
# 获取元素
lrange k1 0 -1
lindex k1 0
# 获取长度
llen k1
# 插入元素
linsert k1 before "v1" "newv1"
# 删除元素
lrem k1 1 "newv1"
# 按位置设置元素
lset k1 0 v11
集合操作
# 加入元素
sadd k1 v1 v2 v3
# 获取所有元素
smembers k1
# 判断是否含有该元素
sismember k1 v1
# 获取元素个数
scard k1
# 删除元素
srem k1 v1 v2
# 随机弹出元素
spop k1
# 随机取出元素
srandmember k1 2
# 移动元素
smove k1 k2 v3
# 集合操作
sinter k1 k2
sunion k1 k2
sdiff k1 k2
散列操作
# 设置值
hset user id 1
# 获取值
hget user id
# 批量设置值
hmset user id 1 name zhangsan
# 判断值是否存在
hexists user id
# 获取hash的所有field
hkeys user
# 获取hash的所有value
hvals user
# 递增
hincrby user age 10
# 不存在则设置值
hsetnx user id 1
有序集合操作
# 添加元素
zadd k1 100 java 200 php
# 获取元素
zrange k1 0 -1
zrevrange k1 0 -1
zrange k1 0 -1 withscores
# 根据分数范围获取元素
zrangebyscore k1 100 150
zrevrangebyscore k1 100 150
zrangebyscore k1 100 150 withscores
# 递增分数
zincrby k1 10 java
# 删除元素
zrem k1 php
# 获取数量
zcount k1 100 150
# 获取排名
zrank k1 java
事务操作
- 保证事务里的命令以一个整体连续执行
- 由于Redis命令是单线程执行的,因此没有传统关系型数据库事务隔离级别的概念
- 后面的命令执行出错,前面的已执行命令也不会回滚
执行事务
multi
set k1 v1
set k2 v2
exec
放弃事务
multi
set k1 v1
set k2 v2
discard
乐观锁
watch v1
multi
set k1 v1
# 真正执行前,检查被watch的值v1是否已被修改过,若已修改过则不执行事务内的命令
exec
PREVIOUSSwagger使用
NEXTJava锁的条件队列