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 类型具有自己的特征
    1. 元素是有序的
    2. 元素是可以重复的
    3. 插入和删除快
    4. 查询速度慢

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 类型的特征
    1. 无序
    2. 元素不可重复
    3. 查找快
    4. 支持 交集、并集、差集等功能

单个 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 具有以下特点
    1. 可排序
    2. 元素不重复
    3. 查询速度快

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