Redis 笔记——命令
Key 的层级结构
redis 的 key 容许有多个单词形成层级结构,多个单词中使用’ : ’隔开,格式如下:
[项目名]:[业务名]:[类型]:[id ] example : gold:latest
值可以是一个对象序列化后的JSON字符串。
通用命令(help generic)
KEYS pattern
可以使用通配符进行模糊查找,因为设计模糊查找算法,时间复杂度较高,不建议使用。
如果一定要使用,可以在从节点中使用。不要在主节点上使用。
不建议在任何生产环境中使用。
DEL key
删除一个指定的key,可以接受多个key。
删除多个key的时候用“空格”分割。
返回值为删除的key的数量
EXISTS key
判断一个key是否存在,可以接受多个。
存在返回1,不存在返回0。
EXPIRE key seconds
给一个key设置有效期,有效期到的时候key自动删除。
可以用于生成验证码。
时间单位是秒。
TTL key
查看一个key的剩余有效期。
-1 代表永久有效。
-2 代表 key 不存在。
常量代表还能存在的秒数。
String 类型
String(字符串)是Redis中最简单的数据类型。
字符串类型的值,在编码的时候会编码成字符类型的数据。但是对于数值类型的字符串,会自动把数字转变成二进制的方式存储,一个字符能表示的数字更大。
甚至可以用string类型来保存图片(Base64)字符串类型的最大空间不能超过512M。一般不用Redis于存储图片,有专门的对象存储数据库MinIO。一般存储个图片地址就行了。
String 常用命令
- SET key value:设定指定key的值,如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。
- GET key: 获取指定key 的值
- MGET key1 [key2 …]: 获取所有给定key的值,有某个 key 不存在,那么这个 key 返回特殊值 null,其他值正常返回。
- MSET key1 value1 [ key2 value2 ….]: 设定所有给定的键值对。
- INCR key: 数字类型的字符串自增 1 ,如果key不存在,则建立一个初始值为“0”的键值对,再执行INCR命令。递减的时候有DECR命令,但是一般使用INCRBY的负数形式就可以完成。
- INCRBY key amount:数字类型的字符串自增指定数,不存在时同上。
- INCRBYFLOUT key amount:数字类型的字符串自增指定浮点数,不存在时同上。(原来的数是整数还是浮点数都可以)
- SETNX key value : 当且仅当key不存在的时候才设置值。
- SETEX key time value: 为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
Hash 类型
Hash数据类型的value是一个无序字典(在GoldProce应用的开发中,我们把价格写到了redis里面,发现每次读取的顺序都在改变)。
String结构的值是字符串,在存储一个比较复杂的值的时候,只能将其转化为json字符串去存,但是存在一个问题,那就是当json中的某个字段需要发生变动的时候,只能将值整个覆盖。
Hash结构可以将对象中的每个字段进行独立的存储,然后就可以针对单个字段进行增删改查。
Hash 常用命令
- HSET key field value:添加或者修改指定key的字段(field)值。
- HDEL key filed1 [filed2 …]: 删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
- HGET key field : 获取指定key 的字段值
- HMGET key field1 [field2 …]: 获取key的所有指定字段值,若 key 或 key 的字段不存在,那么这个返回特殊值 null,其他值正常返回。
- HMSET key field1 value1 [ field2 value2 ….]: 设定所有给定的键值对,值为Hash无序集合类型。
- HGETALL key : 获取本key下所有的Hash类型值。
- HSCAN key cursor [MATCH pattern] [COUNT count]:迭代哈希表中的键值对,cursor为游标,count默认为10。
- HKEYS key: 获取本key下的所有Hash类型值的字段名。(返回值类型为列表)
- HVALS key: 获取本key下的所有Hash类型值的字段值(返回值类型为列表)
- HINCRBY key field amount:数字类型的自增指定数,如果key不存在,则建立一个初始值为“0”的字段,再执行HINCRBY命令。不在存在HINCR命令,需要增加的时候,必须指定增加量。
- HINCRBYFLOUT key field amount:数字类型的自增指定浮点数,不存在时同上。(原来的数是整数还是浮点数都可以)
- HSETNX key field value : 当且仅当字段filed不存在的时候才设置值。
List 类型
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 2^23 - 1 个元素 ( 每个列表超过40亿个元素)。
- List 类型具有自己的特征
- 元素是有序的
- 元素是可以重复的
- 插入和删除快
- 查询速度慢
List 常用命令
- LPUSH key element:向列表左侧插入一个或多个元素
- LPOP key:移除并返回列表左侧的第一个元素,没有返回nul
- RPUSH key element:向列表右侧插入一个或多个元素
- RPOP key:移除并返回列表右侧的第一个元素
- LRANGE key start end:返回一段角标范围内的所有元素
- BLPOP 和 BRPOP:参考LPOP和RPOP,只不过当没有元素的时候不直接返回nul,而是阻塞指定时间。
Set 类型
Redis的Set的结构与Java中的HashSet相似(由Hashmap实现的set类型),因为是一个hash表(无value)所以具备一些特征。
- Set 类型的特征
- 无序
- 元素不可重复
- 查找快
- 支持 交集、并集、差集等功能
单个 Set 常用命令
- SADD key member …:向 set 中添加一个或多个元素
- SREM key member …:移除set中的指定元素
- SCARD key :返回set中元素的个数
- SISMEMBER key member:判断一个元素是否都是集合中的
- SMEMBERS key:获取集合中所有的元素
多个 Set 常用命令
- SDIFF key1 key2:返回key1中和key2有差异的元素(差集)
- SDIFFSTORE destination key1 key2:将key1中和key2不一致的元素保存到destination中
- SINTER key1 key2:返回给定所有集合的交集
- SINTERSTORE destination key1 key2:保存key1和key2的交集到destination中
- SUNION key1 key2:返回给定的所有集合的并集
- SUNIONSTORE destination key1 key2:保存给定的所有集合的并集到destination中
SortedSet 类型
这是一种可排序的类型,类似于Java中的TreeSet(红黑树实现)有些类似,但是SortedSet是更具一个固定的score值来完成排序的。每个元素都带有一个score属性,可以基于score属性对元素进行排序呢,底层的实现是一个SkipList加Hash表。
- SortedSet 具有以下特点
- 可排序
- 元素不重复
- 查询速度快
SortedSet常用于实现排行榜的功能。
SortedSet 常用命令
- ZADD key score member:添加一个或多个元素到SortedSet,如果元素已经存在则更新score值
- ZREM key member:移除一个或多个元素
- ZSCORE key menber:获取指定元素的score值
- ZRANK key member:返回有序集合中member的排名
- ZCARD key:获取指定集合中的元素个数
- ZCOUNT key score1 score2:获取集合中在指定分数区间的元素个数
- ZINCRBY key increment member:给指定的元素的score上加上increment增量
- ZRANGE key start end:返回下标在区间start-end中的集合成员
- ZRANGEBYSCORE key score1 score2:返回score在指定区间的集合成员
- ZDIFF、ZINTER、ZUNION:求差集、交集、并集
默认都是升序,需要降序在 Z 后加上 REV