Redis学习笔记(二)--数据类型

Redis学习笔记(二)–数据类型

一、常用命令

1、获得符合规则的键名列表

KEYS pattern

pattern支持glob风格通配符格式

符号 含义
匹配一个字符
* 匹配任意个(包括0个)字符
[] 匹配括号间的任一字符,可以使用“-”符号表示一个范围
\x 匹配字符x,用于转义符号。

这里写图片描述
备注:keys命令需要遍历redis中的所有键,当键的数量较多时会影响性能,不建议生产环境中使用。redis是不区分命令大小写的。

2、判断一个键是否存在

EXISTS key

如果键存在则返回整数类型1,否则返回0。
这里写图片描述

3、删除键

DEL key[key1……]

可以删除一个或多个键,返回值是删除的键的个数。
这里写图片描述
备注:del命令的参数不支持通配符,另外del命令支持多个键作为参数,所以还可以执行redis-cil del ‘redis-cil keys “user:”’来打到同样的效果,但是性能更好。*

4、获得键值的数据类型

TYPE key

type命令用来获得键值的数据类型,返回值包括:string(字符串类型)、hash(散列类型)、list(列表类型)、set(集合类型)、zset(有序集合类型)。

二、字符串类型

字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。一个字符串类型键允许存储的数据的最大容量是512MB。

1、赋值与取值

SET key value
GET key

这里写图片描述
当键不存在的时候会返回空结果。

2、递增数字

INCR key

其作用是让当前键值递增,并返回递增后的值,
这里写图片描述

3、增加指定的整数

INCRBY key increment

INCRBY命令和INCR命令基本一样,只不过前者可以通过increment参数指定一次增加的数值。
Redis学习笔记(二)--数据类型_第1张图片

4、减少指定的整数

DECR key
DECRBY key decrement

DECR命令和INCR命令用法相同,只不过是让键值递减。
DECRBY命令和INCRBY命令用法相同,只不过前者可以通过decrement参数指定一次减小的数值。
Redis学习笔记(二)--数据类型_第2张图片

5、增加指定浮点数

INCRBYFLOAT key increment

Redis学习笔记(二)--数据类型_第3张图片

6、向尾部追加值

APPEND key value

APPEND作用是向键值的末尾追加value。如果键不存在则将该键值设置为value,即相当于set key value。返回值是追加后字符串的总长度。
这里写图片描述

7、获取字符串长度

STRLEN key

STRLEN命令返回键值的长度,如果键不存在则返回0。
Redis学习笔记(二)--数据类型_第4张图片

8、同时获得、设置多个键值

MGET key [key……]
MSET key [key……]

这里写图片描述

9、位操作

GETBIT key offset
SETBIT key offset value
BITCOUNT key [start] [end]
BITOP operation destkey key [key ……]

三、散列类型

1、赋值与取值

HSET KEY FIELD VALUE
HGET KEY FIELD
HMSET KEY FIELD VALUE [FIELD VALUE]
HMGET KEY FIELD [FIELD]
HGETALL KEY

HSET命令的方便在于不区分插入和更新操作,这就意味着修改数据时不用事先判断字段是否存在来决定要执行的是插入操作还是更新操作。当执行的是插入操作时HSET命令会返回1,当执行的是更新操作时HSET命令返回0。进一步讲,当键本身不存在时,HSET命令还会自动建立它。
Redis学习笔记(二)--数据类型_第5张图片

2、判断字段是否存在

HEXISTS KEY FIELD

HEXISTS 命令用来判断一个字段是否存在。如果存在则返回1,不存在返回0。
这里写图片描述

3、当字段不存在时赋值

HSETNX KEY FIELD VALUE

HSETNX 命令和HSET命令类似,区别在于如果字段已经存在,HSETNX 命令将不执行任何操作。只不过HSETNX 命令是原子操作,不用担心竞态条件。
Redis学习笔记(二)--数据类型_第6张图片

4、增加数字

HINCRBY KEY FIELD INCREMENT

备注:散列类型没有HINCR命令
这里写图片描述

5、删除字段

HDEL KEY FIELD [FIELD……]

这里写图片描述

6、只获取字段名或字段值

HKEYS KEY
KVALS KEY

Redis学习笔记(二)--数据类型_第7张图片

7、获得字段数量

HLEN KEY

这里写图片描述

四、列表类型

列表类型(list)可以存储在一个有序的字符串列表,内部是使用双向链表实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快,不过使用链表的代价是通过索引访问元素比较慢。

1、向列表两端添加元素

LPUSH KEY VALUE [VALUE……]
RPUSH KEY VALUE [VALUE……]

LPUSH命令用来向列表左边增加元素,返回值表示增加元素后列表的长度。
这里写图片描述

2、从列表两端弹出元素

LPOP KEY
RPOP KEY

该命令执行两步操作,第一部是将列表左边的元素从列表中删除,第二步是返回被移除的元素值。
这里写图片描述

3、 获取列表中元素的个数

LLEN KEY

当键不存在的时候返回0。
这里写图片描述

4、获得列表片段

LRANGE KEY START STOP

该命令将返回索引从start到stop之间的所有元素(包含着两端的元素),redis的列表起始索引为0。
这里写图片描述

5、删除列表中指定的值

LREM KEY COUNT VALUE

该命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数,根据count值的不同,LREN命令的执行方式会有所不同。
(1)当count>0时,LREM命令会从列表左边开始删除前count个值为value的元素。
(2)当count<0时,LREM命令会从列表右边开始删除前|count|个值为value的元素。
(3)当count=0时,LREM命令会删除所有值为value的元素。
Redis学习笔记(二)--数据类型_第8张图片

6、获得、设置指定索引的元素值

LINDEX KEY INDEX
LSET KEY INDEX VALUE

如果将列表类型当做数组来用,LINDEX命令是必不可少的,LINDEX命令用来返回指定索引的元素,索引从0开始。如果index是负数则表示从右边开始计算索引,最右边元素的索引是-1。LSET是另一个通过索引操作的命令,它会将索引为index的元素赋值为value。
Redis学习笔记(二)--数据类型_第9张图片

7、只保留列表指定片段

LTRIM KEY START END

该命令可以删除指定索引范围之外的所有元素,指定方法同LRANGE。
Redis学习笔记(二)--数据类型_第10张图片

8、向列表中插入元素

LINSERT KEY BEFORE|AFTER PIVOT VALUE

该命令首先会在列表中从做到右查找值为pivot的元素,然后根据第二个参数决定插入到该元素的前面还是后面。
Redis学习笔记(二)--数据类型_第11张图片

9、将元素从一个列表转到另一个列表

RPOPLPUSH SOURCE DESTINATION

执行过程:先执行RPOP命令再执行LPUSH命令。RPOPLPUSH 命令从SOURCE列表类型键的右边弹出一个元素,然后将其加入到DESTINATION

五、集合类型

集合类型和列表有相似之处,但很容易将它们区分的。

类型 存储内容 有序性 唯一性
集合类型 最多2[32]-1个字符串
列表类型 最多2[32]-1个字符串

1、增加、删除元素

SADD KEY MEMBER [MEMBER …]
SREM KEY MEMBER [MEMBER…]

这里写图片描述

2、获得集合中的所有元素

SMEMBERS KEY

这里写图片描述

3、判断元素是否在集合中

SISMEMBER KEY MEMBER

判断一个元素是否在集合中是一个时间时间复杂度为O(1)的操作。当值存在的时候返回1,不存在返回0。
Redis学习笔记(二)--数据类型_第12张图片

4、集合间运算

SDIFF KEY [KEY …]
SINTER KEY [KEY…]
SUNION KEY [KEY…]

(1)SDIFF 命令是用来对多个集合执行差集运算。
Redis学习笔记(二)--数据类型_第13张图片
(2)SINTER 命令用来对多个集合执行交集运算。
这里写图片描述
(3)SUNION 命令用来对多个集合执行并集运算。
这里写图片描述

5、获得集合中元素个数

SCARD KEY

Redis学习笔记(二)--数据类型_第14张图片

6、进行集合运算并将结果存储

SDIFFSTORE DESTINATION KEY [KEY…]

该命令和sdiff命令功能一样,唯一的区别就是该命令不会直接返回运算结果,而是将结果存储在destination键中。该命令常用于进行多步集合运算的场景中。

7、随机获得集合中的元素

SRANDMEMBER KEY [COUNT]

(1)当count为正数时,该命令会随机从集合里获得count个不重复的元素,如果count大于集合中的元素个数,则返回集合中的全部元素。
(2)当count为负数时,该命令会随机从集合里获得|count|个元素,可能相同。
Redis学习笔记(二)--数据类型_第15张图片

8、从集合中弹出一个元素

SPOP KEY

该命令会从集合中随机选择一个元素弹出。
Redis学习笔记(二)--数据类型_第16张图片

六、有序集合类型

有序集合类型与列表类型相似,但是也存在很大的区别。

  1. 二者都是有序的。
  2. 二者都可以获得某一范围的元素
  3. 列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当数据增多后,访问中间数据的数据会比较慢。
  4. 有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快,时间复杂度为O(log(N)).
  5. 列表中不能简单地调整某个元素的位置,但是有序集合可以。
  6. 有序集合要比列表类型更耗费内存。

1、增加元素

ZADD KEY SCORE MEMBER[SCORE MEMBER…]
这里写图片描述

2、获得元素的分数

ZSCORE KEY MEMBER

这里写图片描述

3、获得排名在某个范围的元素列表

ZRANGE KEY START STOP [WITHSCORES]
ZREVRANGE KEY START STOP [WITHSCORES]

这里写图片描述

4、获得指定分数范围的元素

ZRANGEBYSCORE KEY MIN MAX [WITHSCORES] [LIMIT OFFSET COUNT]

这里写图片描述

5、增加某个元素的分数

ZINCRBY KEY INCREMENT MEMBER

这里写图片描述

6、获得集合中元素的数量

ZCARD KEY

这里写图片描述

7、获得指定分数范围内的元素个数

ZCOUNT KEY MIN MAX

这里写图片描述

8、删除一个或多个元素

ZREM KEY MEMBER [MEMBER…]

这里写图片描述

9、按照排名范围删除元素

ZREMRANGEBURANK KEY START STOP

Redis学习笔记(二)--数据类型_第17张图片

10、按照分数范围删除元素

ZREMRANGEBYSCORE KEY MIN MAX

11、获得元素的排名

ZRANK KEY MEMBER
ZREVRANK KEY MEMBER

12、计算有序集合的交集

ZINTERSTORE DESTINATION NUMKEYS KEY [KEY …] [WEIGHTS WEIGHT
[WEIGHT…]] [AGGREGATE SUM|MIN|MAX]

(1)当AGGREGATE是SUM(默认)时,DESTINATION键中的元素的分数是每个参与计算的集合中该元素分数的和。
(2)当AGGREGATE是MIN时,DESTINATION键中的元素的分数是每个参与计算的集合中该元素分数的最小值。
(2)当AGGREGATE是MAX时,DESTINATION键中的元素的分数是每个参与计算的集合中该元素分数的最大值。

你可能感兴趣的:(Redis)