说明
- Redis-02-常用数据类型及命令
- 假设你已经完成了上一节安装和常用配置
- 官方文档:https://redis.io/documentation
- Redis命令参考:http://redisdoc.com/
核心概念
》数据库命令
- Redis解(刺)压(激)命令
flushall # 清空Redis服务器所有数据,使用需谨慎!!!
flushdb # 清空当前Redis库所有数据,使用需谨慎!!!
- 常用命令
select 1 # 切换到数据库1(默认0,可选0-15,也可以修改配置文件)
dbsize # 查看当前数据库k的数量
keys * # 查看当前数据库所有k
exist k # 查看k是否存在
type k # 查看k类型
del k # 删除k
rename k k1 # 重命名k为k1
remanenx k k1 # 重命名k为k1
- 过期
ttl k # 查看k过期时间
expire k 10 # 设置k过期时间为10秒
expireat k 1355292000 # 设置k在固定时间过期
persist k # 移除k的过期时间改为不过期
pttl k # 查看k过期时间毫秒
pexpire k 10 # 设置k过期时间为10毫秒
pexpireat k 1555555555005 # 设置k在固定时间毫秒过期
》字符串String
- 一个key对应一个value,二进制安全的,单个value最多512M
- 常用命令
set k v # 设置k的值为v
get k # 获取k的值
append k aa # k的值后追加aa
strlen k # 获取k的值长度
setnx k v # 设置k的值为v(如果k不存在)
incr k # k的值(数字类型)++
decr k # k的值(数字类型)--
incrby k 5 # k的值(数字类型)+5
decrby k 5 # k的值(数字类型)-5
mset k1 v1 k2 v2 # 设置多个k-v
mget k1 k2 # 获取多个k的值
msetnx k1 v1 k2 v2 # 设置多个k-v(如果都不存在)
getrange k 0 3 # 获取k的值的第0~3个字符(全部:0 -1)
setex k 60 v # 设置值并且设置过期时间,单位秒
getset k v # 设置新值获取旧值
》队列List
- list是一个双向链表,开头结尾效率高中间低
- list数据存储形式
- zipList:少量数据
- QuickList:大量数据
- 常用命令
lpush/rpush k v1 v2 v3 # 向k左/右插入
lpop/rpop k # 从k左/右吐出一个值
rpoplpush k1 k2 # k1右边一个值插入k2左边
lrange k 0 -1 # 查看k的列表的所有值
lindex k 3 # 获取k的索引3的值(左到右)
llen k # 获取k的列表长度
linsert k befor v3 newv # 在k的值为v3后面插入newv
lrem k 3 vv # 从k的左边删除3个值为vv的值
lset k 3 v3 # 将k的索引为3的值替换为v3
》集合Set
- 具备自动排重的list
- Set是一个String类型的无序集合
- 底层是一个value为null的hash表
- 复杂度:O(1),数据增加查询速度不变
- Set数据存储形式
- dict字典,哈希表实现
- 常用命令
sadd k v1 v2 # 将v1、v2加入到集合k
smembers k # 取出k中所有值
sismember k v # 判断k中是否有v
scard k # 返回k中元素个数
srem k v2 v3 # 删除k中的值k2、k3
spop k # 从k中随机吐出一个值
srandmember k 3 # 随机从k中取出3个值,不删除
smove k1 k2 v # 把v从集合k1移动到k2
sinter k1 k2 # 返回k1、k2交集
sunion k1 k2 # 返回k1、k2并集
sdiff k1 k2 # 返回k1、k2差集
》哈希Hash
- 是一个键值对集合,相当于:k = {“filed1”:“v1”,“filed2”:“v2”}
- Hash数据存储形式
- zipList:少量数据
- QuickList:大量数据
- 常用命令
hset k f v # 集合k中插入域f值为v
hget k f # 获取集合k中域f的值
hmset k f1 v1 f2 v2 # 集合k中插入域f1值为v1、域f2值为v2
hexists k f # 判断集合k中域f是否存在
hkeys k # 列出集合k中所有的filed
hvals k # 列出集合k中所有的value
hincrby k f 10 # 集合k中的域f增加10
hsetnx k f v # 集合k中域f值设置为v(如果f存在)
》有序集合Zset(sorted set)
- 类似Set,没有重复元素的字符串集合
- 每个元素绑定一个评分值:score,元素唯一但score可以重复
- Zset数据存储形式
- HashMap + 跳跃表
- HashMap存储形式相当于:k = {“v1”:“score1”,“v2”:“score2”}
- 跳跃表存储score,跳跃表查询效率远高于有序链表
- 常用命令
zadd k 1 v1 2 v2 # 向有序集k中插入v1、v2,score分别为1、2
zrange k 0 -1 [withscores] # 返回有序集k中下标0~-1之间的元素
zrangebyscore k 10 20 [withscores] [limit offset count] # 返回有序集k中score介于10和20的元素,按score递增
zrevrangebyscore k 10 20 [withscores] [limit offset count] # 同上,按score递减
zincrby k 10 v # 为有序集k中的值v的score加10
zrem k v # 删除有序集k中值为v的元素
zcount k 10 20 # 统计有序集k中score位于10~20的元素个数
zrank k v # 返回值k在有序集k中的排名,从0开始