数据库
Redis默认有16个数据库
默认使用的是第0个,可以使用select
进行切换
命令
# 查看数据库大小
dbsize
# 存
set key value
# 取
get key
# 查看所有key
keys *
# 清空当前数据库
flushdb
# 清空所有数据库
flushall
# 设置key的过期时间,单位秒
expire key 10
# 查看当前key的剩余时间
ttl key
# 查看key的数据类型
type key
# 查询是否存在key
exists key
# 给key的value追加内容
append key value
# 查询key的value长度
strlen key
# 自增(加1)
incr key
# 自增(带步长,可负反向操作)
incrby key 10
# 自减(减1)
decr key
# 自减(带步长,可负反向操作)
decrby key 10
数据类型
String
注意一个键值最大存储为512M
# 获取字符串指定范围数据
getrange key start end
如:getrange key 2 -1 # 第3个字符到最后
# 替换
setrange key offset value
setex(set with expire) # 设置过期时间
setnx(set if not exist) # 不存在设置(分布式常用)
# 批量存
mset k1 v1 k2 v2 ...
# 批量取
mget k1 k2 ...
使用场景:
- 普通缓存
- 计数器
- 统计等
List
可以把List做成栈、队列、阻塞队列
所有的List命令都是l
开头
# 将一个或多个值插到列表头部
lpush key value
# 将一个或多个值插到列表尾部
rpush key value
# 通过区间获取值
lrange key 0 -1 # -1最后一个
# 移除头部
lpop key
# 移除尾部
rpop key
# 获取第某个值
lindex key index
# 查询列表长度
llen key
# 移除list集合中指定个数的value,注意list是可以重复的
lrem key length name
消息队列(lpush rpop 先进先出),栈(lpush lpop 先进后出)
Set
Set中的值是不能重复、无序的
# 存
sadd key value
# 查看指定set的所有值
smembers key
# 判断某一个值是否在Set中
sismember key value
# 获取元素个数
scard key
# 移除
srem key value
# 获取随机不重复
srandmember key 1 # 可指定个数
# 随机移除
spop key
# 差集(查询key1在key2中没有的值)
sdiff key1 key2
# 交集(查询key1在key2中有的值)
sinter key1 key2
# 并集(查询key1和key2中的所有值)
sunion key1 key2
Zset
有序不可重复集合
Hash
hash是一个键值对集合,是一个String类型的field和value的映射表,适用于存储对象
# 存
hset item name "tom"
# 取
hget item name
Geospatial
地理位置,在Redis3.2
版本推出
# 添加
geoadd china:city 116.40 39.90 beijing
# 查询
geopos china:city beijing
# 查询两个位置距离
geodist china:city beijing shanghai
# 附近的人
georadius china:city 110 30 100 km
事务
Redis单条命令保存有原子性,但是事物不保证原子性
Redis的事务:
- 开启事务(multi)
- 命令入队(...)
- 执行事务(exec)
注意:命令是顺序执行的
放弃事务
multi # 开启事务
set k1 v1
set k2 v2
discard # 取消事务
Redis事务没有隔离级别概念,如开启事务后执行,只要不是命令有误,那么入队的命令都会执行,即使中途出现错误,后面的命令依然会执行
实现乐观锁
Redis中有watch
监视功能,监视一个字段后开启事务进行操作,如果提交事务发现监视字段发生了变化,那么事务就会提交失败