关于redis:掌握Redis核心常用数据类型的高效运用秘籍

62次阅读

共计 4510 个字符,预计需要花费 12 分钟才能阅读完成。

在数据驱动的时代,高效地存储和解决数据成为了开发者们的重要工作。Redis,作为一个开源的高性能键值对(key-value)数据库,以其独特的数据结构和丰盛的性能,成为了泛滥我的项目的首选。

明天,咱们就来揭开 Redis 的神秘面纱,看看它是如何通过不同的数据类型,为咱们提供高效、灵便的数据存储和解决能力的。

一、字符串(String):数据的基石

String 类型简介

字符串是 Redis 最根本的数据类型,它能够存储文本、数字或者二进制数据。应用字符串类型,你能够执行原子性的操作,如追加(APPEND)、设置(SET)和获取(GET)。例如,你能够将用户信息作为字符串存储,并通过键疾速检索。

一个 key 对应一个 value。
String 类型是二进制平安的。只有内容能够应用字符串示意就能够存储到 string 中。比方 jpg 图片或者序列化的对象。
一个 Redis 中字符串 value 最多能够是 512M。

常用命令

set key value:增加键值对。

get key:查问 key 对应的键值。

留神:如果设置了两次雷同的 key,后设置的就会把之前的 key 笼罩掉。append key value:将给定的 value 追加到原值的开端。

strlen key:取得值的长度。

setnx key value:只有在 key 不存在时,能力设置 key 的值。

incr key:将 key 中贮存的数字值增 1(只能对数字值操作,如果为空,新增值为 1)。

decr key:将 key 中贮存的数字值减 1(只能对数字值操作,如果为空,新增值为 -1)。

incrby / decrby key 步长:通过自定义步长形式增减 key 中贮存的数字值。

mset key1 value1 key2 value2 …:同时设置一个或多个键值对。

mget key1 key2 key3 …:同时获取一个或多个 value。

msetnx key1 value1 key2 value2 …:所有给定 key 都不存在时,同时设置一个或多个 key-value 对。

留神:此操作有原子性,只有有一个不符合条件的 key。其余的也都不能设置胜利。如下图:

getrange key 起始地位、完结地位:取得值的范畴,相似 java 中的 substring。

setrange key 起始地位 value:用 value 覆写 key 所贮存的字符串值,从起始地位开始(索引从 0 开始)。

setex key 过期工夫 value:能够在设置键值的同时,设置过期工夫,单位秒(后面的 expire 是给已有的键值设置过期工夫,留神区别)。

getset key value:以新换旧,设置了新值同时取得旧值。

利用场景

存储用户信息:  将用户的姓名、年龄等信息作为字符串存储在 Redis 中,通过键值对的形式疾速检索和更新。

计数器: 应用 INCR 命令实现访问量、点赞数等计数性能。

二、哈希(Hash):组织数据的框架

Hash 类型简介

哈希类型容许你存储字段 - 值对的汇合。这种构造非常适合于存储对象,如用户的个人信息。通过 HSET 和 HGET 命令,你能够设置和获取哈希中的字段和值。

哈希类型的劣势在于它能够对字段进行原子性操作,而不须要读取整个对象。

常用命令

hset key field value:给 key 汇合中的 field 键赋值 value。

hget key1 field:从 key1 汇合 field 取出 value。

hmset key1 field1 value1 field2 value2…:批量设置 hash 的值(一次性设置多个数据值)。

hexists key1 field:查看哈希表 key 中,给定域 field 是否存在。

hkeys key:列出该 hash 汇合的所有 field。

hvals key:列出该 hash 汇合的所有 value。

hincrby key field increment:为哈希表 key 中的域 field 的值加上增量。

hsetnx key field value:将哈希表 key 中的域 field 的值设置为 value,当且仅当域 field 不存在。

利用场景

存储用户对象:  将用户对象的多个属性(如姓名、年龄、性别等)存储在一个哈希构造中,通过 HGETALL 命令获取整个对象,或应用 HGET/HSET 针对某个属性进行操作。

存储配置信息: 将应用程序的配置信息以字段 - 值对的模式存储在哈希中,不便集中管理和批改。

三、列表(List):有序数据的队列

List 类型简介

列表类型提供了一种顺序存储数据的形式,它相似于 Python 中的列表或 Java 中的 LinkedList。

你能够应用 LPUSH 和 RPUSH 命令在列表的头部或尾部增加元素。列表还反对范畴查问和列表内元素的移除操作,非常适合于实现音讯队列等场景。

List 中单键多值,即一个 key 对应多个 value,其中的多个 value 值应用 List 进行存储。

Redis 列表是简略的字符串列表,依照插入程序排序。你能够增加一个元素到列表的头部(右边)或者尾部(左边)。

它的底层理论是个双向链表,对两端的操作性能很高,通过索引下标的操作两头的节点性能会较差。

常用命令

lpush / rpush key value1 value2 value3 …:从右边 / 左边插入一个或多个值(l 代表 left,r 代表 right)。

lrange key start stop:依照索引下标取得元素(从左到右)。
其中 lrange k1 0 - 1 示意取出 k1 中全副 value 值(0 示意右边第一个,- 1 代表左边第一个)。

lpop / rpop key:从右边 / 左边吐出一个值。值在键在,值光键亡。pop 示意把值拿进去。

图片从右边取出 k1 的一个 value 值。如下图:

从左边取出 k2 的一个 value 值。如下图:

value 值全副取完的时候,key 就没有了。如下图:

rpoplpush key1 key2:从 key1 列表左边吐出一个值,插到 key2 列表右边。

lindex key index:依照索引下标取得元素(从左到右)。

llen key:取得列表长度。

linsert key before value newvalue:在 value 的后面插入 newvalue 插入值。

lrem key n value:从开始删除 n 个 value(从左到右)图片。

lset key index value:将列表 key 下标为 index 的值替换成 value。

利用场景

音讯队列: 应用 LPUSH/RPUSH 命令将待处理的音讯增加到列表头部 / 尾部,应用 LPOP/RPOP 从列表中取出并解决音讯。

关注列表: 存储用户关注的其余用户列表,应用 LINSERT 命令在列表中插入新关注的对象。

你还在苦恼找不到真正收费的编程学习平台吗? 能够试试【云端源想】!课程视频、知识库、微实战、云实验室、一对一征询……你想要的全副学习资源这里都有,重点是当初还是收费的!点这里即可查看!

四、汇合(Set):去重数据的汇合

Set 类型简介

汇合类型用于存储无序且惟一的数据汇合。当你须要存储不容许反复的元素时,汇合是一个很好的抉择。

SADD 命令用于向汇合中增加元素,而 SMEMBERS 能够获取汇合中的所有元素。汇合还反对交加、并集和差集等高级操作,非常适合于解决标签、好友关系等场景。

Redis 的 Set 是 string 类型的无序,不可反复汇合。Set 底层其实是一个 value 为 null 的 hash 表,所以增加,删除,查找的复杂度都是 0(1)。

常用命令

sadd key value1 value2 …:将一个或多个 member 元素退出到 key 对应的汇合中,曾经存在的 member 元素将被疏忽

smembers key:取出 key 对应的汇合中的所有值。

sismember key value:判断汇合是否为含有该 value 值。1 示意有,0 示意没有。

scard key:返回 key 对应汇合中的元素个数。

srem key value1 value2…:删除 key 对应的汇合中的某些元素。

spop key:随机从 key 对应的汇合中吐出一个值。

srandmember key n:随机从 key 对应的汇合中取出 n 个值。不会从汇合中删除(rand 即为 random)。

smove sourceKey destinationKey value:把汇合中一个值从一个汇合挪动到另一个汇合。

sinter key1 key2:返回两个汇合的交加元素

sunion key1 key2:返回两个汇合的并集元素。

sdiff key1 key2:返回两个汇合的差集元素(key1 中的,不蕴含 key2 中的)。

利用场景

好友关系: 将用户的好友列表存储在一个汇合中,应用 SADD 命令增加好友,应用 SISMEMBER 判断某个用户是否为好友。

标签零碎: 将文章或商品的标签存储在汇合中,应用 SUNION/SINTER 等命令进行标签的交加、并集操作。

五、有序汇合(Sorted Set)

Sorted Set 类型简介

有序汇合是 Redis 中的一个高级数据类型,它联合了汇合的唯一性和列表的排序功能。

每个元素都关联一个分数(score),依据分数对元素进行排序。ZADD 命令用于增加元素和分数,ZRANGE 则能够获取排序后的元素列表。
注:zset 是 sorted set 的缩写

常用命令

zadd key score1 value1 score2 value2…:将一个或多个 member 元素及其 score 值退出到有序集 key 当中。

zrange key start stop (withscores):返回有序集 key 中,下标在 start 和 stop 之间的元素。(带 withscores,能够让分数一起和值返回到后果集)。

zrange rank 0 -1(withscores):示意取出全副元素,从小到大排列。如下图:

zrangebyscore key min max (withscores):返回有序集 key 中所有 score 值介于 min 和 max 之间 (包含等于 min 或 max) 的成员。有序集成员按 score 值递增 (从小到大) 秩序排列。

zrevrangebyscore key max min (withscores):同上,改为从大到小排列(其中 rev 示意 reverse)。

zincrby key increment value:为元素的 score 加上增量。

zrem key value:删除该汇合下,指定值的元素。

zcount key min max:统计该汇合,分数区间内的元素个数。

zrank key value:返回该值在汇合中的排名。(排在第一位的是 0)

利用场景

排行榜零碎: 能够应用有序汇合来存储用户的得分,并依据得分进行排序。

带权重的汇合: 有序汇合能够用来实现带权重的汇合,即每个元素都有一个对应的权重值。工夫线排序:有序汇合能够用于实现工夫线排序,行将事件或音讯依照工夫程序进行排序。

六、总结

本篇文章咱们摸索了 Redis 的五种罕用数据类型及常用命令和应用场景。每一种数据类型都有其独特的劣势和实用状况,把握它们将使你在数据处理的路线上更加得心应手。

无论是构建缓存零碎,还是实现简单的数据结构,Redis 都能提供强有力的反对。心愿这篇文章能帮忙你更好地了解和使用 Redis,让你的我的项目在数据的世界中怀才不遇。

正文完
 0