1、字符串(String)

1.1简介

  • 描述:字符串是Redis中最基本的数据类型,用于存储二进制安全的数据,如字符串、整数、浮点数等。
  • 最大长度:最大能存储512MB的数据。
  • 应用场景:常用于缓存用户会话信息、页面片段等。
  • 底层实现:Redis并没有使用C语言的原生字符串表示,而是使用了简单动态字符串(SDS)来存储字符串,这种数据结构在获取字符串长度、追加字符串等方面的操作复杂度为O(1)

1.2常见命令

  • set < key>< value>:添加键值对
  • get < key>查询对应键值
  • append < key>< value>:将给定的值追加到key的末尾
  • strlen < key>:获取值的长度
  • setnx < key>< value>:只有在key不存在时,设置key-value加入到数据库
  • setex < key> < timeout>< value>:添加键值对,同时设置过期时间(以秒为单位)
  • incr < key>:将key中存储的数字加1处理,只能对数字值操作。如果是空,值为1
  • decr < key>:将key中存储的数字减1处理,只能对数字值操作。如果是空,值为1
  • incrby < key>< increment>:将key中存储的数字值增加指定步长的数值,如果是空,值为步长。 (具有原子性)
  • decrby < key>< decrement>: 将key中存储的数字值减少指定步长的数值,如果是空,值为步长。 (具有原子性)
  • mset < key1>< value1>[< key2>< value2>...]:同时设置1个或多个key-value值
  • mget < key1>[< key2>...]:同时获取1个或多个value
  • msetnx < key1>< value1>[< key2>< value2>...]:当所有给定的key都不存在时,同时设置1个或多个key-value值(具有原子性)
  • getrange/substr < key>< start>< end> 将给定key,获取从start(包含)到end(包含)的值
  • setrange < key>< offset>< value>:从偏移量offset开始,用value去覆盖key中存储的字符串值
  • getset< key>< value>: 对给定的key设置新值,同时返回旧值。如果key不存在,则添加一个 key-value值

1.3注意

  • Redis 中的字符串可以存储非常大的数据,最大可以达到 512MB。
  • 尽管我们称之为“字符串”,但 Redis 的字符串是二进制安全的,这意味着你可以在其中存储任何数据,包括图片、序列化对象等。
  • 当你使用 INCRDECRINCRBYDECRBY 命令时,Redis 会尝试将 key 的值转换为整数,如果无法转换(例如,key 的值不是整数或不存在),则这些命令会失败。
  • APPEND 命令可以用来在现有的字符串后追加数据,而不是替换它。
  • STRLEN 命令返回的是字符串的字节长度,而不是字符数(这取决于你的字符串编码)。

2、哈希(Hash)

2.1简介

  • 描述:哈希是一个键值对的集合,类似于其他编程语言中的字典或映射。
  • 最大容量:每个哈希最多可以存储2^32 - 1个键值对。
  • 应用场景:适合存储对象的属性信息,比如用户信息、商品信息等。
  • 特点:每个哈希表内部都有一个哈希映射表,用于快速定位键值对。

2.2内部编码方式

  • ziplist(压缩列表):当哈希对象同时满足两个条件时,使用ziplist编码:哈希对象保存的所有键值对的键和值的字符串长度都小于64字节;哈希对象保存的键值对数量小于512个。
  • hashtable(哈希表):当哈希对象不能满足ziplist的条件时,就会使用hashtable编码。

2.3常见命令

  • hset< key>< field>< value>[< field>< value>..1:用于为哈希表中的字段赋值,如果字段在hash表中存在,则会被覆盖
  • hmset:用法同hset,在redis4.0.0中被弃用
  • hsetnx< key>< field><value>:只有在字段不存在时,才设置哈希表字段中的值
  • hget< key>< field> 返回哈希表中指定的字段的值
  • hmget < key>< field>[< field>...]:获取哈希表中所有给定的字段值hgetall<key>:获取在哈希表中指定key的所有字段和值
  • hexists <key>< field>:判断哈希表中指定的字段是否存在,存在返回1,否则返回0
  • hkeys<key>:获取哈希表中所有的字段
  • hvals< key>:获取哈希表中所有的值
  • hlen<key>:获取哈希表中的field数量
  • hdel< key>< field>[< field>...]:删除一个或多个哈希表字段
  • hincrby<key>< field><increment>:为哈希表key中指定的field字段的整数值加上增加
  • increment
  • hincrbyfloat<key><field><increment>:为哈希表key中指定的field字段的浮点数值加上增加increment

3、列表(List)

3.1简介

  • 描述:列表是一个有序的字符串集合,允许在列表的两端进行插入和删除操作。
  • 底层实现:在Redis 3.2之前,List的底层实现是LinkedList或者ZipList。Redis 3.2之后,引入了LinkedList和ZipList的结合QuickList,使得List的底层实现更为高效。从Redis 7.0开始,ZipList被ListPack取代。
  • 应用场景:常用于实现消息队列、任务队列等功能。

3.2特性与功能

  • 有序性:列表中的元素是有序的,可以通过索引下标获取某个元素或者某个范围内的元素列表。
  • 重复性:列表中的元素可以是重复的,即同一个值可以在列表中出现多次。
  • 插入和删除:可以在列表的头部(左边)或尾部(右边)插入(push)或删除(pop)元素。
  • 容量:一个列表最多可以存储2^32-1个元素,即约42.9亿个元素。

3.3常见命令

  • lpush < key>< value1>[< value2>...]:从左侧插入一个或多个值
  • lpushx< key>< value1>[< value2>...]:将一个或多个值插入到已存在的列表头部
  • lrange <key>< start><stop>:获取列表指定范围内的元素,0左边第1位,-1右边第1 位,0 ~-1取出所有
  • rpush< key>< value1>[< value2>...]:从右侧插入一个或多个值
  • rpushx< key>< value1>[< value2>..]:将一个或多个值插入到已存在的列表尾部
  • lpop<key>[count]:移除并获取列表中左边第1个元素,count表明获取的总数量,返回的为移除的元素
  • rpop<key>[count]:移除并获取列表中右边第1个元素,count表明获取的总数量,返回的为移除的元素
  • rpoplpush<source><destination>:移除源列表的尾部的元素(右边第一个),将该元素添加到目标列表的头部(左边第一个),并返回
  • lindex< key>< index>:通过索引获取列表中的元素llen< key>:获取列表长度
  • linsert<key>before after< pivot><element>:在< pivot>基准元素前或者后面插入<element>,如果key不存在,返回0。如果<pivot>不存在,返回-1,如果操作成功,返回执行后的列表长度
  • lrem<key><count><element>:根据count的值,移除列表中与参数相等的元素
  • ocount=0 移除表中所有与参数相等的值
  • ocount>0 从表头开始向表尾搜索,移除与参数相等的元素,数量为count
  • ocount<0 从表尾开始向表头搜索,移除与参数相等的元素,数量为count的绝对值lset<key><index><element>:设置给定索引位置的值
  • ltrim< key>< start> < stop>:对列表进行修剪,只保留给定区间的元素,不在指定区间的被删除
  • brpop < key> timeout:阻塞式移除指定key的元素,如果key中没有元素,就等待,直到有元素或 超时,执行结束。

4、集合(Set)

4.1简介

  • 描述:集合是一个无序的、唯一的字符串集合,不允许重复元素存在。
  • 操作:支持添加、删除和判断元素是否存在等操作。
  • 应用场景:适合存储标签、用户关注列表等数据。

4.2特性

  • 无序性:集合中的元素是无序的,即不保证元素的插入顺序。
  • 唯一性:集合中的元素是唯一的,不存在重复的元素。
  • 高效:集合的插入、删除和查找操作的时间复杂度都是O(1),即常数时间复杂度,这使得集合在处理大量数据时非常高效。
  • 原子性:Redis的所有操作都是原子的,即在一个命令执行的过程中,不会被其他客户端打断,这保证了数据的一致性。

4.3常见命令

  • sadd<key>< member>[< member>..]:将一个或多个成员元素加入到集合中,如果集合中已经
  • 包含成员元素,则被忽略
  • smembers<key>:返回集合中的所有成员。
  • sismember<key><member>:判断给定的成员元素是否是集合中的成员,如果是返回1,否则返回0
  • scard<key>:返回集合中元素个数
  • srem< key>< member>[< member>...]:移除集合中一个或多个元素
  • spop<key>[<count>]:移除并返回集合中的一个或count个随机元素
  • srandmember<key>[<count>]:与spop相似,返回随机元素,不做移除smove<source><destination><member>:将member元素从source源移动到destination目标
  • sinter< key>[< key>...]:返回给定集合的交集(共同包含)元素
  • sinterstore<destination><key1>[< key2>..]:返回给定所有集合的交集,并存储到destination目标中
  • sunion < key>[< key>...]:返回给定集合的并集(所有)元素
  • sunionstore<destination><key1>[< key2>..]:返回给定所有集合的并集,并存储到destination目标中
  • sdiff< key>[< key>..]:返回给定集合的差集(key1中不包含key2中的元素)
  • sdiffstore<destination><key1>[< key2>..]:返回给定所有集合的差集,并存储到destination目标中蛍距

5、有序集合(Sorted Set)

5.1简介

  • 描述:有序集合是一个有序的字符串集合,每个元素都会关联一个分数(score),通过分数可以对元素进行排序。同时,有序集合也保持了元素的唯一性。
  • 应用场景:常用于排行榜、热门文章等场景。
  • 底层实现:有序集合的底层实现主要依赖于跳跃表(SkipList)和哈希表(Dict),跳跃表用于维护元素的排序,哈希表则用于快速定位元素。

5.2基本特性

  • 有序性:有序集合中的元素根据它们的分值进行排序,分值可以是重复的,但元素本身在集合中是唯一的。
  • 唯一性:有序集合中的元素是唯一的,不允许有重复的元素。
  • 分值:每个元素都关联一个double类型的分值,用于排序。
  • 容量:有序集合中的成员数最多为2^32 - 1个(约42.9亿个元素)。

5.3常见命令

  • zadd<key><score>< member>[< score>< member>..]:将一个或多个元素及其分数加入到有序集合中
  • zrange < key>< min>< max> [byscore | bylex] [rev] [ limit offset count] [withscores]: 返回有序集合指定区间的成员,(byscore按分数区间,bylex按字典区间,rev反向排序(分数大的写前边小的写后边),limit分页(offset偏移量,count返回的总数),withscores返回时带有对应的分数)
  • zrevrange<key>< start>< stop>[ limit offset count]:返回集合反转后的成员
  • zrangebyscore <key>< min>< max> [withscores][ limit offset count]:参考zrange用法
  • zrevrangebyscore< key>< max>< min> [withscores] [ limit offset count]:参考zrange用法
  • zrangebylex<key>< min>< max>][ limit offset count]:通过字典区间返回有序集合的成员
  • zrangebylex k2-+:减号最小值,加号最大值
  • zrangebylex k2 [aa(ac:[中括号表示包含给定值,(小括号表示不包含给定值zcard < key>:获取集合中的成员数量
  • zincrby<key><increment><member>:为集合中指定成员分数加上增量
  • incrementzrem< key><member>[< member>...]:移除集合的一个或多个成员
  • zcount<key>< min>< max>:统计集合中指定区间分数(都包含)的成员数量
  • zrank< key>< member>:获取集合中成员的索引位置
  • zscore < key>< member>:获取集合中成员的分数值

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐