Redis之数据结构以及命令

本篇介绍Redis可以存储的5种数据结构以及常用的一些命令,部分内容摘抄自《Redis实战》,仅用作笔记。

Redis可以存储键与5种不同数据结构类型之间的映射,键是字符串,5种数据结构分别为STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)和ZSET(有序集合)。下表简单对比了这5种数据结构:

结构类型结构存储的值结构的读写能力
STRING可以是字符串、整数或浮点数对整个字符串或字符串的其中一部分执行操作;对整数和浮点数执行自增或自减操作
LIST一个链表,链表上的每个节点都包含了一个字符串从链表的两端推入或弹出元素;根据偏移量对链表进行修剪(trim);读取单个或多个元素;根据值查找或移除元素
SET包含字符串的无序收集器,并且被包含的每个字符串都是独一无二的添加、获取、移除单个元素;检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里随机获取元素
HASH包含键值对的无序散列表添加、获取、移除单个键值对;获取所有键值对
ZSET字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定添加、获取、删除单个元素;根据分值范围或者成员获取元素

字符串

Redis的字符串就是一个由字节组成的序列,它们和Java里的字符串并没有什么明显的不同。字符串可以存储包括字符串、整数和浮点数在内的3种类型的值,而存储了整数或者浮点数的字符串可以执行自增或自减操作,在有需要的时候,Redis还会将整数转换为浮点数。

Redis中操作字符串常用的命令如下:

命令用例描述
SETSET key value设置存储在给定键中的值
GETGET key获取存储在给定键中的值
DELDEL key删除存储在给定键中的值,适用于所有类型
INCRINCR key将键存储的值加1
DECRDECR key将键存储的值减1
INCRBYINCRBY key amount将键存储的值加上整数amount
DECRBYDECRBY key amount将键存储的值减去整数amount
INCRBYFLOATINCRBYFLOAT key amount将键存储的值加上浮点数amount

当我们将一个值存储到Redis字符串里时,如果这个值可以被解释为十进制整数或浮点数,那么Redis允许我们对这个字符串进行各种自增自减操作;如果对一个不存在的键或一个保存了空串的键执行自增或自减操作,那么Redis再执行操作时会将这个键的值当作是0来处理并且存储键值(键不存在时);如果尝试对一个值无法被解释为整数或者浮点数的字符串执行自增和自减操作时,Redis会返回一个错误。

列表

Redis中的列表结构可以有序地存储多个字符串,除了允许用户从序列的两端推入或弹出元素、获取列表元素以及执行常见的列表操作外,还可以用来存储任务信息、最近浏览过的文章或常用联系人信息等。

Redis操作列表的常用命令如下:

命令用例描述
RPUSHRPUSH list-key value...将给定一个或多个值推入指定列表的右端
LRANGELRANGE list-key index1 index2获取列表在给定范围上的所有值,当index1为0,index2为-1时可以获取列表所有值
LINDEXLINDEX list-key index获取列表在给定位置上的单个元素
LPOPLPOP list-key从列表的左端弹出一个值,并返回被弹出的值
LPUSHLPUSH list-key value...将给定一个或多个值推入指定列表的左端
RPOPRPOP list-key从列表右端弹出一个值,并返回被弹出的值
LTRIMLTRIM list-key start end对列表进行修剪,只保留从偏移量start到偏移量end范围内的元素,start和end的元素也会被保留

列表的一个主要优点在于它可以包含多个字符串值,这使得用户可以将数据集中在同一个地方。Redis的集合也提供了与列表类似的特性,但集合只能保存各不相同的元素。

集合

Redis的集合以无序的方式来存储多个各不相同的元素,用户可以快速地对集合执行添加元素操作、移除元素操作以及检查一个元素是否存在于集合里。也因为集合是无序的,因此我们不能像使用列表那样,将元素推入集合某一端,或者从某一端弹出元素。

Redis操作集合的常用命令如下:

命令用例描述
SADDSADD set-key value将给定元素添加到指定集合中
SMEMBERSSMEMBERS set-key返回集合包含的所有元素
SISMEMBERSISMEMBER set-key value检查给定元素是否存在于集合中
SREMSTRM set-key value如果给定的元素存在于这个集合中,那么移除这个元素
SCADDSCADD set-key返回集合包含的元素数量
SRANDMEMBERSRANDMEMBER set-key[count]从集合里随机返回一个或多个元素
SPOPSPOP set-key随机移除集合中的一个元素,并返回被移除的元素
SMOVESMOVE source-key dest-key item如果集合source-key包含元素item,那么从集合source-key中移除元素item,并将元素item添加到集合dest-key中;如果item被成功移除,则返回1,否则返回0
SDIFFSDIFF set-key set key set-key...返回存在于第一个集合,但不存在于其他集合中的元素,即差集运算
SDIFFSTORESDIFFSTORE dest-key set-key set-key...将存在于第一个集合但不存在于其他集合中的元素存储到dest-key键里
SINTERSINTER set-key set-key...返回那些同时存在于所有集合中的元素,即交集运算
SINTERSTORESINTERSTORE dest-key set-key set-key...将同时存在于所有集合的元素存储到dest-key键里
SUNIONSUNION set-key set-key...返回至少存在于一个集合中的元素,即并集运算
SUNIONSTORESUNION dest-key set-key set-key...将至少存在于一个集合中的元素存储到dest-key键里

散列

Redis的散列可以存储多个键值对之间的映射。与字符串一样,散列存储的值既可以是字符串也可以是数字值,并且用户可以对散列存储的数字值执行自增操作或自减操作。散列可以让我们将多个值存储到一个Redis里面,非常适用于将一些相关的数据存储在一起。我们可以把这种数据聚集看作是关系数据库中的行。

Redis操作散列的常用命令如下:

命令用例描述
HSETHSET hash-key sub-key value在散列里关联起给定的键值对
HGETHGET hash-key sub-key获取指定散列键的值
HGETALLHGETALL hash-key获取散列包含的所有键值对
HDELHDEL hash-key sub-key如果给定键存在于散列里,那么移除这个键
HEXISTSHEXISTS hash-key sub-key检查给定键是否存在于散列中
HKEYSHKEYS hash-key获取散列包含的所有键
HVALSHVALS hash-key获取散列包含的所有值
HINCRBYHINCRBY hash-key sub-key amount将键sub-key存储的值加上整数amount
HINCRBYFLOATHINCRBYFLOAT hash-key sub-key amount将键key存储的值加上浮点数amount

在对散列进行处理的时候,如果键值对的值的体积非常庞大,那么我们可以先使用HKEYS获取散列的所有值,然后通过只获取必要的值来减少需要传输的数据量。

有序集合

有序集合和散列一样,都用于存储键值对。有序集合的键被称为成员(member),每个成员都是各不相同的;有序集合的值被称为分值(score),分值必须为浮点数。有序集合是Redis里唯一一个既可以根据成员访问元素,又可以根据分值以及分值的排列顺序访问元素的结构。

Redis操作有序集合的常用命令如下:

命令用例描述
ZADDZADD zset-key score member...将带有给定分值的成员添加到有序集合中
ZRANGEZRANGE zset-key start end [WITHSCORES]返回有序集合中排名介于start和end之间的成员,如果给定了可选的WHTISCORS选项,那么命令将成员的分值也一并返回
ZREMZREM zset-key member...从有序集合中移除给定的成员,并返回被移除成员的数量
ZCARDZCARD zset-key返回有序集合包含的成员数量
ZINCRBYZINCEBY zset-key amount member将member成员的分值加上amount
ZCOUNTZCOUNT zset-key min max返回分值介于min和max之间的成员数量
ZRANKZRANK zset-key member返回成员member在有序集合中的排名
ZSCOREZSCORE zset-key member返回成员member的分值

如果我们需要某些上面没提到的命令,可以在这个地方根据数据类型以及功能查找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值