Redis五大数据类型

来源:互联网 发布:mac chill翻译 编辑:程序博客网 时间:2024/06/06 06:35
Redis的五大数据类型

  • String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

  • Hash(哈希,类似java里的Map)
Redis hash 是一个键值对集合。KV模式不变,但V是一个键值对。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>

  • List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
它的底层实际是个链表

  • Set(集合)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,

  • zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。


redis常见数据类型操作命令: http://redisdoc.com/

Key(键)常用命令
命令用法描述示例DELDEL key [key ...]删除给定的一个或多个 key。 不存在的 key 会被忽略 DUMPDUMP key序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键 EXISTSEXISTS key检查给定 key 是否存在 EXPIREEXPIRE key seconds为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除 PERSISTPERSIST key移除 key 的过期时间,key 将持久保持。 EXPIREATEXPIREAT key timestampEXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置生存时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)EXPIREAT cache 1355292000 # 这个 key 将在 2012.12.12 过期KEYSKEYS pattern查找所有符合给定模式 pattern 的 keyKEYS * # 匹配数据库内所有 keyMOVEMOVE key db将当前数据库的 key 移动到给定的数据库 db 当中
如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。

因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)MOVE song 1 # 将 song 移动到数据库 1TTLTTL key以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间 PTTLPTTL key以毫秒为单位返回 key 的剩余的过期时间。 TYPETYPE key返回 key 所储存的值的类型 RENAMERENAME key newkey将 key 改名为 newkey 。
当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
当 newkey 已经存在时, RENAME 命令将覆盖旧值 

String (字符串)常用命令
命令用法描述示例SETSET key value [EX seconds] [PX milliseconds] [NX|XX]将字符串值 value 关联到 key 。
如果 key 已经持有其他值, SET 就覆写旧值,无视类型SET key "value"MSETMSET key value [key value ...]同时设置一个或多个 key-value 对。
如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作MSET date "2012.3.30" time "11:00 a.m." weather "sunny"SETNXSETNX key value将 key 的值设为 value ,当且仅当 key 不存在。
若给定的 key 已经存在,则 SETNX 不做任何动作 SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写 MSETNXMSETNX key value [key value ...]同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作 SETRANGESETRANGE key offset value用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。
不存在的 key 当作空白字符串处理 SETBITSETBIT key offset value对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)GETBIT bit 100 # bit 默认被初始化为 0SETEXSETEX key seconds value将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。
如果 key 已经存在, SETEX 命令将覆写旧值。 PSETEXPSETEX key milliseconds value这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位 STRLENSTRLEN key返回 key 所储存的字符串值的长度。
当 key 储存的不是字符串值时,返回一个错误 GETGET key返回 key 所关联的字符串值。
如果 key 不存在那么返回特殊值 nil MGETMGET key [key ...]返回所有(一个或多个)给定 key 的值。
如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。因此,该命令永不失败 GETRANGEGETRANGE key start end返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。GETRANGE greeting 0 4GETSETGETSET key value将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
当 key 存在但不是字符串类型时,返回一个错误。 GETBITGETBIT key offset对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
当 offset 比字符串值的长度大,或者 key 不存在时,返回 0 APPENDAPPEND key value如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样 DECRDECR key将 key 中储存的数字值减一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作redis> SET failure_times 10
OK

redis> DECR failure_times
(integer) 9DECRBYDECRBY key decrement将 key 所储存的值减去减量 decrement INCRINCR key将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作 INCRBYINCRBY key increment将 key 所储存的值加上增量 increment INCRBYFLOATINCRBYFLOAT key increment为 key 中所储存的值加上浮点数增量 incrementINCRBYFLOAT mykey 0.1BITCOUNTBITCOUNT key [start] [end]计算给定字符串中,被设置为 1 的比特位的数量 BITOPBITOP operation destkey key [key ...]对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。 

List(列表)常用命令
命令用法描述示例LPUSHLPUSH key value [value ...]将一个或多个值 value 插入到列表 key 的表头
如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头正着进反着出LPUSHXLPUSHX key value将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。
和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做 RPUSHRPUSH key value [value ...]将一个或多个值 value 插入到列表 key 的表尾(最右边)怎么进怎么出RPUSHXRPUSHX key value将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。
和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。 LPOPLPOP key移除并返回列表 key 的头元素。 BLPOPBLPOP key [key ...] timeout移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 RPOPRPOP key移除并返回列表 key 的尾元素。 BRPOPBRPOP key [key ...] timeout移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 BRPOPLPUSHBRPOPLPUSH source destination timeout从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 RPOPLPUSHRPOPLPUSH source destination命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素RPOPLPUSH  list01 list02LSETLSET key index value将列表 key 下标为 index 的元素的值设置为 value LLENLLEN key返回列表 key 的长度。
如果 key 不存在,则 key 被解释为一个空列表,返回 0 .
如果 key 不是列表类型,返回一个错误 LINDEXLINDEX key index返回列表 key 中,下标为 index 的元素。
下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 LRANGELRANGE key start stop返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定 LREMLREM key count value根据参数 count 的值,移除列表中与参数 value 相等的元素 LTRIMLTRIM key start stop对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 LINSERTLINSERT key BEFORE|AFTER pivot value将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
当 pivot 不存在于列表 key 时,不执行任何操作。
当 key 不存在时, key 被视为空列表,不执行任何操作。
如果 key 不是列表类型,返回一个错误。LINSERT list01 before c++ c#(在c++之前加上C#)

Hash(哈希表)常用命令
命令用法描述示例HSETHSET key field value将哈希表 key 中的域 field 的值设为 value 。
如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。
如果域 field 已经存在于哈希表中,旧值将被覆盖。 HMSETHMSET key field value [field value ...]同时将多个 field-value (域-值)对设置到哈希表 key 中。
此命令会覆盖哈希表中已存在的域。 HSETNXHSETNX key field value将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
若域 field 已经存在,该操作无效 HGETHGET key field返回哈希表 key 中给定域 field 的值 HMGETHMGET key field [field ...]返回哈希表 key 中,一个或多个给定域的值。 HGETALLHGETALL key返回哈希表 key 中,所有的域和值。
在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍 HDELHDEL key field [field ...]删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略 HEXISTSHEXISTS key field查看哈希表 key 中,给定域 field 是否存在 HLENHLEN key返回哈希表 key 中域的数量 HKEYSHKEYS key返回哈希表 key 中的所有域 HVALSHVALS key返回哈希表 key 中所有域的值 HSTRLENHSTRLEN key field返回哈希表 key 中,
与给定域 field 相关联的值的字符串长度(string length)。
如果给定的键或者域不存在,
那么命令返回 0 HINCRBYHINCRBY key field increment为哈希表 key 中的域 field 的值加上增量 increment HINCRBYFLOATHINCRBYFLOAT key field increment为哈希表 key 中的域 field 加上浮点数增量 increment HSCANHSCAN key cursor [MATCH pattern] [COUNT count]迭代哈希表中的键值对。 

Set(集合)常用命令
命令用法描述示例SADDSADD key member [member ...]将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
当 key 不是集合类型时,返回一个错误 SCARDSCARD key返回集合 key 的基数(集合中元素的数量)。 SDIFFSDIFF key [key ...]返回一个集合的全部成员,该集合是所有给定集合之间的差集。
不存在的 key 被视为空集。差集SDIFFSTORESDIFFSTORE destination key [key ...]这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。
如果 destination 集合已经存在,则将其覆盖。
destination 可以是 key 本身。 SINTERSINTER key [key ...]返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的 key 被视为空集。
当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)交集SINTERSTORESINTERSTORE destination key [key ...]这个命令类似于 SINTER 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
如果 destination 集合已经存在,则将其覆盖。
destination 可以是 key 本身 SUNIONSUNION key [key ...]返回一个集合的全部成员,该集合是所有给定集合的并集。
不存在的 key 被视为空集并集SUNIONSTORESUNIONSTORE destination key [key ...]这个命令类似于 SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
如果 destination 已经存在,则将其覆盖。
destination 可以是 key 本身 SMEMBERSSMEMBERS key返回集合 key 中的所有成员。
不存在的 key 被视为空集合 SRANDMEMBERSRANDMEMBER key [count]如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素 SISMEMBERSISMEMBER key member判断 member 元素是否集合 key 的成员 SMOVESMOVE source destination member将 member 元素从 source 集合移动到 destination 集合。 SPOPSPOP key移除并返回集合中的一个随机元素。
如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。 SREMSREM key member [member ...]移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。
当 key 不是集合类型,返回一个错误 SSCANSSCAN key cursor [MATCH pattern] [COUNT count]迭代集合中的元素 


SortedSet(有序集合)常用命令
命令用法描述示例ZADDZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员,或者更新已存在成员的分数 ZCARDZCARD key返回有序集 key 的基数。 ZCOUNTZCOUNT key min max返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
关于参数 min 和 max 的详细使用方法,请参考 ZRANGEBYSCORE 命令。 ZRANGEZRANGE key start stop [WITHSCORES]返回有序集 key 中,指定区间内的成员。
其中成员的位置按 score 值递增(从小到大)来排序 ZREVRANGEZREVRANGE key start stop [WITHSCORES]返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到小)来排列。
具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列。除了成员按 score 值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。 ZREVRANGEBYSCOREZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。 ZREVRANKZREVRANK key member返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。
排名以 0 为底,也就是说, score 值最大的成员排名为 0 。
使用 ZRANK 命令可以获得成员按 score 值递增(从小到大)排列的排名。 ZSCOREZSCORE key member返回有序集 key 中,成员 member 的 score 值。
如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。 ZRANGEBYSCOREZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 ZRANKZRANK key member返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。 ZINCRBYZINCRBY key increment member为有序集 key 的成员 member 的 score 值加上增量 increment ZREMZREM key member [member ...]移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
当 key 存在但不是有序集类型时,返回一个错误。 ZREMRANGEBYRANKZREMRANGEBYRANK key start stop移除有序集 key 中,指定排名(rank)区间内的所有成员 ZREMRANGEBYSCOREZREMRANGEBYSCORE key min max移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。 ZUNIONSTOREZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。
默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。 ZINTERSTOREZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。
默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和. ZSCANZSCAN key cursor [MATCH pattern] [COUNT count]迭代有序集合中的元素(包括元素成员和元素分值) ZRANGEBYLEXZRANGEBYLEX key min max [LIMIT offset count]当有序集合的所有成员都具有相同的分值时,
有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序,
而这个命令则可以返回给定的有序集合键 key 中,
值介于 min 和 max 之间的成员。 ZLEXCOUNTZLEXCOUNT key min max对于一个所有成员的分值都相同的有序集合键 key 来说,
这个命令会返回该集合中,
成员介于 min 和 max 范围内的元素数量。
这个命令的 min 参数和 max 参数的意义和 ZRANGEBYLEX 命令的 min 参数和 max 参数的意义一样 ZREMRANGEBYLEXZREMRANGEBYLEX key min max对于一个所有成员的分值都相同的有序集合键 key 来说,
这个命令会移除该集合中,
成员介于 min 和 max 范围内的所有元素。
这个命令的 min 参数和 max 参数的意义和 ZRANGEBYLEX 命令的 min 参数和 max 参数的意义一样 


参考:尚硅谷周阳老师视频内容
0 0