Redis基本命令

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