Redis数据结构与常用命令

目录

 

1.Redis简介

2.Redis数据结构

3.Redis常用命令

3.1.Redis中的字符串

3.2.Redis中的列表

3.3.Redis中的集合

3.4.Redis中的散列

3.5.Redis中的有序集合


1.Redis简介

Redis是一个速度非常快的非关系数据库,它可以存储键与5种不同的类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。

2.Redis数据结构

Redis可以存储5种不同的数据结构类型之间的映射,这5种数据结构类型分别为STRING(字符串),LIST(列表),Set(集合),HASH(散列表)和ZSET(有序集合)。有一部分命令对于5中数据结构是通用,如:DEL,TYPE,RENAME等,有一部分命令只能特定的一两种数据结构才能使用。Redis提供的5种数据结构如下表:

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

 

3.Redis常用命令

3.1.Redis中的字符串

Redis字符串就是一个有字节组成的序列。它们和很多编程语言里面的字符串没有什么明显的不同。字符串可以存储以下三种类型的值:字符串、整数、浮点数。常用命令如下:

命令用例和描叙
INCRINCR key-name  --> 将键存储值加上1
DECRDECR key-name --> 将键存储值减去1
INCRBYINCRBY key-name amount --> 将键存储值加上整数amount
DECRBYDECRBY key-name amount --> 将键存储值减去整数amount
INCRBYFLOATINCRBYFLOAT key-name amount --> 将键存储值加上浮点数amount
这个命令在Redis2.6以上的版本才能使用
APPENDAPPEND key-name value -->将值value追加到当前key-name值的末尾
GETRANGEGETRANGE key-name start end --> 获取一个由偏移量start到end范围内
所有字符组成的子字符串,包括start和end在内
SETRANGESETRANGE key-name offset value --> 将从start偏移量开始的子串设置
为给定值
GETBITGETBIT key-name offset --> 将字符串看做是二进制位串(bit sting)
并返回偏移量为offset的二进制的值
SETBITSETBIT key-name offset value --> 将字符串看做二进制位串,并将偏移量
为offset的二进制位的值设置为给定值
BITCOUNTBITCOUNT key-name [start,end] --> 统计二进制位串里面值为1的二进制
位的数量,如果给定了start和end偏移量,则只统计这个范围内的
BITOPBITOP operation dest-key key-name [key-name1 ...] --> 对一个或多个
二进制位串执行包括并(AND)、或(OR)、异或(XOR)、非(NOT)在内的任意
一种按位运算操作,并将计算得出的结果保存在dest-key键里面

很多键值数据库只能将数据存储为普通的字符串,并且不能提供任务字符串的处理,有一些键值数据库允许用户将字节追加到字符串前面或者后面,但是却没有办法像Redis一样对字符串子串进行读写。从列表中支持的命令看Redis就比很多别的数据库要强大。

3.2.Redis中的列表

Redis对链表(linked-list)结构的支持使得它在键值存储的世界中的独树一帜。列表支持从两端推入或者弹出元素获取列表元素,以及执行各种常见的列表操作。常见命令如下:

命令用例和描叙
RPUSHRPUSH key-name  value [value ...] --> 将一个或多个值推入列表的右边
LPUSHLPUSH key-name  value [value ...] --> 将一个或多个值推入列表的左边
RPOPRPOP key-name --> 移除并返回最右边的元素
LPOPLPOP key-name --> 移除并返回最左边的元素
LINDEXLINDEX key-name offset --> 返回列表中偏移量为offset的元素
LRANGELRANGE key-name start end --> 返回列表从start偏移量到end偏移量范围内
的所有元素,包含start和end
LTRIMLTRIM key-name start end --> 对列表进行修剪,只保留start偏移量到end
偏移量之间的元素,包含start和end
BRPOPBRPOP key-name [key-name ...] timeout --> 从第一个非空列表中弹出位于
最右端的元素或者在timeout秒之内阻塞并等待可弹出的元素出现
BLPOPBLPOP key-name [key-name ...] timeout --> 从第一个非空列表中弹出位于
最左端的元素或者在timeout秒之内阻塞并等待可弹出的元素出现
RPOPLPUSHRPOPLPUSH source-key dest-key --> 从source-key列表中弹出位于最右端
的元素,然后将这个元素推入dest-key列表的最左端,并返回这个元素
BRPOPLPUSHBRPOPLPUSH source-key dest-key timeout --> 从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并返回这个元素;如果source-key为空,那么在timeout秒内阻塞并等待有元素可弹出

对于阻塞弹出命令和弹出并推入命令,最常见的用例就是消息传递(message)和任务队列。

3.3.Redis中的集合

Redis集合以无序的方式来存储多个各不相同的元素,常用的集合操作命令有执行添加、移除元素操作以及检查一个元素是否存在于集合里、将元素从一个集合移动到另一个集合、多个集合执行交集、并集和差集运算。集合命令列表如下:

命令用例和描叙
SADDSADD key-name  value [value ...] --> 将一个或多个元素添加到集合里,并返回
被添加元素当中原本并不存在于集合里面的元素数量
SREMSREM key-name  value [value ...] --> 从一个集合里移除一个或多个元素,并
返回被移除元素的数量
SISMEMBERSISMEMBER key-name value--> 检查元素value是否存在于集合key-name里
SCARDSCARD key-name --> 返回集合里的元素数量
SMEMBERSSMEMBERS key-name --> 返回集合里的所有元素
SRANDMEMBERSMEMBERS key-name [count] --> 从集合里随机返回一个或多个元素,当
count为整数时,随机元素不会重复;当count为负数时,随机元素可能会重复
SPOPSPOP key-name --> 随机地移除集合中的一个元素,并返回被移除的元素
SMOVESMOVE source-key dest-key valuue --> 如果集合source-key里包含元素value,那么就从集合source-key中移除,并将元素value添加到集合dest-key中;如果value被成功移除,则返回1,否则返回0
SDIFFSDIFF key-name [key-name] --> 返回存在于第一个集合,但不存在于其他集合中的元素(差集)
SDIFFSTORESDIFFSTORE dest-key key-name [key-name ...] --> 将存在于第一个集合,但不存在于其他集合中的元素存储到dest-key集合中(差集)
SINTERSINTER key-name [key-name ...] --> 返回同时存在于所有集合中的元素(交集)
SINTERSTORESINTERSTORE dest-key key-name [key-name ...] --> 将同时存在于所有集合中的元素存储到dest-key集合中交集)
SUNIONSUNION key-name [key-name ...] --> 返回至少存在于一个集合中的元素(并集
SUNIONSTORESUNIONSTORE dest-key key-name [key-name ...] --> 将至少存在于一个集合中的元素存储到dest-key集合中

3.4.Redis中的散列

Redis散列表可以将多个键值对存储到一个Redsi键里面,非常适应于将一些相关的数据存储到一起。数据集可以看做关系数据库中的行。常用散列表命令有:添加和删除键值对,获取所有键值对命令以及对键值对的值进行自增或自减的操作命令。命令列表如下:

命令用例和描叙
HMGETHMGET key-name  key [key ...] --> 获取一个或多个键的值
HMSETHMSET key-name  key value [key value ...] --> 添加一个或多个键值
HDELHDEL key-name key [key ...] --> 删除散列表里一个或多个键值对,返回删除成
功键值对的数量
HLENHLEN key-name --> 返回散列表中键值对数量
HEXISTSHEXISTS key-name key --> 检查给定的键是否存在于散列表中
HKEYSHKEYS key-name --> 获取散列表中的所有键
HVALSHVALS key-name --> 获取散列表中的所有值
HGETALLHGETALL key-name --> 获取散列表中的所有的键值对
HINCRBYHINCRBY key-name key increment --> 将键key存储的值上加上整数increment
HINCRBYFLOATHINCRBYFLOAT key-name key increment --> 将键key存储的值上加上浮点数increment

尽管有了HGETALL,但是HKEYS和HVALS也是非常有用,当散列表中元素非常多和值非常大时,可以使用HKEYS取出所有的键,然后使用HGET一个个的取出键值,而从避免因为一次获取太多导致服务器阻塞。

3.5.Redis中的有序集合

Redis有序集合和散列表中存储着键与值之间的映射类似,有序集合是存储着成员与分值之间的映射,并且提供了分值操作的命令,以及根据分值大小有序获取或扫描成员和分值的命令。常见命令如下:

命令用例和描叙
ZADDZADD key-name  score member [score member ...]--> 添加一个或多个给定分数的成员到有序集合中
ZREMZREM key-name member [member ...]--> 从有序集合中移除给定的成员,
并返回被移除的成员数量
ZCARDZCARD key-name --> 返回有序集合中所有的成员
ZINCRBYZINCRBY key-name increment member --> 将member成员的分值上加上increment
ZCOUNTZCOUNT key-name  min max --> 返回分值介于min和max之间的成员
ZRANKZRANK key-name member -->返回成员member在有序集合中的排名
ZSCOREZSCORE key-name  member --> 返回成员member在有序集合中的分值
ZRANGEZRANGE key-name  start stop [withscores]--> 返回有序集合中排名介于start和stop之间的成员,如果给定了可选的withscores选项,那么成员和分值一并返回
ZREVRANKZREVRANK key-name member -->返回成员member在有序集合中的排名,成员按照分值从大到小排列
ZREVRANGEZREVRANGE key-name start stop [withscore] -->返回给定排名范围内的成员,成员按分值从大到小排列
ZRANGEBYSCOREZRANGEBUSCORE key min max [withscore] [limit offset count] --> 获取有序集合中分值介于min和max之间的所有成员
ZREVRABGEBYSCOREZREVRABGEBYSCORE key min max [withscore] [limit offset count] --> 获取有序集合中分值介于min和max之间的所有成员,并按从大到小的顺序返回
ZREMRANGEBYRANKZREMRANGEBYRANK key-name start stop --> 移除有序集合中排名介于start和stop之间的所有成员
ZREMRANGEBYSCOREZREMRANGEBYSCORE key-name min max --> 移除有序集合中分值介于min和max之间的所有成员
ZINTERSTOREZINTERSTORE dest-key key-count key [key ...]  [weights weight[weight ...]] [aggregate sum|min|max] --> 对给定的有序集合执行类似于集合的交集运算
ZUNIONSTOREZUNIONSTORE dest-key key-count key [key ...]  [weights weight[weight ...]] [aggregate sum|min|max] --> 对给定的有序集合执行类似于集合的并集运算

有序集合的交集运算默认是使用聚合函数sum,所以输出的有序集合成员的份子都是通过加法计算得出。并集运算和交集运算不同,只要某个元素存在至少一个有序集合立马,那么这个成员就会包含在输出到有序集合里。

 

参考:

《Redis 实战 Redis IN ACTION》

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值