Redis-2.数据类型和命令

本文地址:https://www.jianshu.com/p/9942f1d65adc

一、简介

Redis之中,使用的是key-value来存储数据,但实际上,Redis并不是一个简单的键值对存储数据库。在key-value中的value,不仅仅可以存储字符串,还可以支持多种数据结构,这使得Redis中的键值对,其所扮演的角色其实与关系型数据库中的表类似。

Redis中主要支持五种常见数据类型:

  1. String - 二进制安全的字符串类型,可以存储文本,图片等信息。
  2. List - 基本上是一个存储字符串元素的双向链表。
  3. Hash - 哈希类型,是由键值对组成的集合。里面存储的键值对的keyvalue都是字符串类型。
  4. Set - 元素唯一且无序的集合类型。
  5. Sorted Set - 一个有序的集合,顺序由插入时的浮点数分数决定。

二、Key

Redis存储的键值对中的key,是二进制安全的,也就是说你既可以使用普通的字符串来做key,也可以使用二进制的数据,例如图片,甚至空字符也是有效的。

但是依然有几条规则需要遵守:

  1. 同一个数据库中的key不可重名。
  2. key的最大值为512MB。
  3. key不应该过长。这不仅仅是因为内存上的考虑,当key过长时,查询等命令将会因为key过长而花费更多的时间在key的比较上。
  4. key同样不应该太短。key的命名同样需要考虑可读性,例如"user:1000:followers"就比"u1000flw"好,需要在key命名的长度上找到一个平衡点。

在Redis中,基本上每种数据类型都有自己独特的命令,这部分命令是不能混着用的。但是也有一部分命令是每个类型的key都可以使用的。

命令

命令 作用
DEL key key存在时删除key
EXISTS key 检查key是否存在
TYPE key 查看key的类型
RENAME key newkey 将key重命名
RENAMENX key newkey 只有当newkey不存在时,才进行重命名
KEYS pattern 查找key
RANDOMKEY 从当前数据库随机获取一个key
MOVE key db 将这个key移动到指定的另一个数据库
DUMP key 序列化key,并返回被序列化的值
EXPIRE key second 以秒为单位给key设定过期时间
PEXPIRE key milliseconds 以豪秒为单位给key设定过期时间
EXPIREAT key timestamp 把一个时间戳设置为key的过期时间
PEXPIREAT key mill-timestamp 把一个毫秒级别的时间戳设置为key的过期时间
PERSIST key 移除key的过期时间
TTL key 以秒为单位返回key的过期时间
PTTL key 以豪秒为单位返回key的过期时间

三、String类型

字符串类型时Redis中最为基础的类型,且是二进制安全的,所以可以存储字符串、图片、数字等各种数据。

如果字符串中存储的为纯数字的话,还可以做一定的简单计算。

命令

命令 作用
SET key value 给key设定或更新值
SETNX key value 只有当key不存在时才给key设定值
SETEX key second value 给key设定值,并且设定一个秒为单位的过期时间
PSETEX key milliseconds value 给key设定值,并且设定一个豪秒为单位的过期时间
SETRANGE key offset value 从offset开始,覆盖key的一部分
MSET key value [key value ...] 同时设置多个键值对
MSETNX key value [key value ...] 仅当列出的key都不存在时,同时设置多个键值对
GET key 获取key的value
MGET key1 [key2..] 一次获取多个key的value
GETSET key value 给key设定一个新的value,获取旧的value并返回
GETRANGE key start end 获取value中指定位置的内容
STRLEN key 返回key中value的长度
APPEND key value 将值添加到
INCR key 将key存储的数字加1
INCRBY key increment 将key存储的数字加上指定的数值
INCRBYFLOAT key increment 将key存储的数字加上指定的浮点数数值
DECR key 将key存储的数字减1
DECRBY key decrement 将key存储的数字减去指定的数值

四、List类型

简单来说,Redis的List基本上就是一个双向链表,可以分别在头部或者尾部添加删除数据,每一个List类型的key最多可以存储4294967295个元素。

基于这样的特性,Redis中的List常常被用来做消息队列之类的事情。

命令

命令 作用
LPUSH key value1 [value2] 在List头部插入一个或多个值
RPUSH key value1 [value2] 在List尾部插入一个或多个值
LPUSHX key value 在List头部插入一个或多个值,key不存在则报错
RPUSHX key value 在List尾部插入一个或多个值,key不存在则报错
LPOP key 移除并返回List头部第一个元素
RPOP key 移除并返回List尾部最后一个元素
RPOPLPUSH source destination 移除列表尾部最后一个元素,添加到另一个列表头部
LINDEX key index 根据列表索引查看元素的值
LLEN key 查看List的长度
LRANGE key start stop 查看一定索引范围内的元素
LREM key count value 删除等于value的元素,如果count为0,则删除所有相等元素
LINSERT key BEFORE|AFTER pivot value 将value插入到列表中,位于pivot之前或之后
LSET key index value 根据index指定修改元素
LTRIM key start stop 切片裁剪List
BLPOP key1 [key2 ] timeout 移除并返回列表头部第一个元素,如果没有元素则阻塞列表直到有元素为止
BRPOP key1 [key2 ] timeout 移除并返回列表尾部最后一个元素,如果没有元素则阻塞列表直到有元素为止
BRPOPLPUSH source destination timeout 移除列表尾部最后一个元素,添加到另一个列表头部,如果没有元素则阻塞列表直到有元素为止

五、Hash类型

Redis的Hash类型则跟人们所期望的传统'hash'类型基本相同,是一个由field-value键值对组成的集合。其中fieldvalue都是字符串类型。

众所周知,hash类型都非常适合用于保存对象。而且值得注意的是,大小较小的hash(元素较少、值比较短)以特殊的方式存储在内存中,使得其读写效率非常之高。

命令

命令 作用
HSET key field value 添加或修改一个字段的值
HMSET key field1 value1 [field2 value2 ] 同时添加或修改一个或多个字段的值
HSETNX key field value 只有当字段不存在时,才添加一个字段的值
HLEN key 获取所有字段的数量
HSTRLEN key field c查看key中指定字段的value的长度
HEXISTS key field 查看字段是否存在
HDEL key field1 [field2] 删除一个或多个字段
HGET key field 获取某一个字段的值
HMGET key field1 [field2] 获取一个或多个字段的值
HKEYS key 获取一个key中所有的field
HVALS key 获取一个key中所有的value
HGETALL key 获取一个key中所有field和value
HINCRBY key field increment 给指定字段的value加上指定的increment数值
HINCRBYFLOAT key field increment 给指定字段的value加上指定的increment浮点数数值

六、Set类型

Set类型是由字符串类型元素构成的无序集合,其元素必须是唯一的。由于Redis中的集合类型都是通过HASH表实现的,所以其添加、查找、删除的复杂度都是O(1)。

Redis中还给集合类型提供了求交集、并集、差集等操作。

命令

命令 作用
SADD key member1 [member2] 给集合添加一个或多个元素
SCARD key 返回集合的成员数量
SISMEMBER key member 判断元素是否是集合的成员
SMEMBERS key 返回集合中所有的成员
SRANDMEMBER key [count] 随机返回集合中一个或多个元素
SREM key member1 [member2] 移除集合中的一个或多个元素
SPOP key 随机移除并返回集合中的一个元素
SMOVE source destination member 将一个元素member从source集合移动到destination集合
SDIFF key1 [key2] 返回给定的所有集合的差集
SDIFFSTORE destination key1 [key2] 返回给定的所有集合的差集,并存储到destination集合中
SINTER key1 [key2] 返回给定的所有集合的交集
SINTERSTORE destination key1 [key2] 返回给定的所有集合的交集,并存储到destination集合中
SUNION key1 [key2] 返回给定的所有集合的并集
SUNIONSTORE destination key1 [key2] 返回给定的所有集合的并集,并存储到destination集合中

七、Sorted Set类型

在Redis中,Sorted Set比较像是一个混合了SetHash两种类型特点的数据类型。首先,在Sorted Set中,存储的元素是唯一不可重复的字符串类型,所以说其在某种意义上是一种集合。

但是Set中的元素是无序的,而Sorted Set中的每个元素都与一个浮点数相关联,这个浮点数被称为Score(分数),通过这个分数,Sorted Set实现了有序排列。这是其与Hash类型类似的地方,每一个元素都映射着一个Score

Sorted Set中的顺序主要由两个规则决定:

  • 首先,一般情况下由Score决定顺序。
  • 如果出现有两个或者两个以上元素的Score相同,这个时候由元素字符串的字典顺序决定先后。

命令

命令 作用
ZADD key score1 member1 [score2 member2] 添加或更新一个或多个元素及其分数
ZCARD key 获取集合中元素的数量
ZCOUNT key min max 获取指定分数范围内元素的数量
ZSCORE key member 获取某个元素的分数
ZRANK key member 获取某个元素的排名
ZLEXCOUNT key min max 获取指定区间内元素的数量
ZRANGE key start stop [WITHSCORES] 返回指定排名区间内的元素
ZRANGEBYLEX key min max [LIMIT offset count] 返回指定区间内的元素
ZRANGEBYSCORE key min max [WITHSCORES][LIMIT] 返回指定分数区间内的元素
ZINCRBY key increment member 给指定元素的分数加上increment数值
ZREM key member [member ...] 移除一个或多个元素
ZREMRANGEBYRANK key start stop 移除排名区间内的元素
ZREMRANGEBYSCORE key min max 移除分数区间内的元素
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335