说明
- 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,跳跃表查询效率远高于有序链表
- HashMap + 跳跃表
- 常用命令
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开始