redis02——一篇终结redis的五种数据类型操作命令(可学习、复习、面试(1)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

OK
127.0.0.1:6379> keys *

  1. “k1”
  2. “k2”

#### 1.8 删除存在的key



> 
> 语法:del key [key…]  
>  作用:删除存在的key,不存在的key忽略。  
>  返回值:数字,删除的key的数量。
> 
> 
> 


demo如下



127.0.0.1:6379> del k1
(integer) 1
127.0.0.1:6379> keys *

  1. “k2”

### 2.操作字符串类型数据(string)


字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。


字符串类型的数据操作总的思想是通过key操作value,key是数据标识,value是我们感兴趣的业务数据。


#### 2.1 添加string数据



> 
> 语法:set key value  
>  功能:将字符串值 value 设置到 key 中,如果key已存在,后放的值会把前放的值覆盖掉。  
>  返回值:OK表示成功  
>  demo如下
> 
> 
> 



127.0.0.1:6379> set zhangsan zhangsan
OK


#### 2.2 获取 key 中设置的字符串值



> 
> 语法:get key  
>  功能:获取 key 中设置的字符串值  
>  返回值:key存在,返回key对应的value;  
>  key不存在,返回nil
> 
> 
> 


demo如下



127.0.0.1:6379> set zhangsan zs
OK
127.0.0.1:6379> get zhangsan
“zs”


#### 2.3 追加字符串



> 
> 语法:append key value  
>  功能:如果 key 存在,则将 value 追加到 key 原来旧值的末尾  
>  如果 key 不存在,则将新增key,将value 设置值为 value  
>  返回值:追加字符串之后的总长度(字符个数)
> 
> 
> 


demo如下



127.0.0.1:6379> append zhangsan zs
(integer) 4
127.0.0.1:6379> get zhangsan
“zszs”


#### 2.4获取字符串值的长度



> 
> 语法:strlen key  
>  功能:返回 key 所储存的字符串值的长度  
>  返回值:如果key存在,返回字符串值的长度;  
>  key不存在,返回0
> 
> 
> 


demo如下



127.0.0.1:6379> STRLEN zhangsan
(integer) 4


#### 2.5 将字符串数字值自增



> 
> 语法:incr key  
>  功能:将 key 中储存的数字值加1,如果 key 不存在,则 key 的值先被初始化为 0 再执行incr操作。,非数字值类型报错  
>  返回值:返回加1后的key值
> 
> 
> 


demo如下



127.0.0.1:6379> set zsage 10
OK
127.0.0.1:6379> INCR zsage
(integer) 11
127.0.0.1:6379> INCR zhangsan
(error) ERR value is not an integer or out of range


#### 2.6 将字符串数字值自减



> 
> 语法:decr key  
>  功能:将 key 中储存的数字值减1,如果 key 不存在,则么 key 的值先被初始化为 0 再执行 decr 操作。  
>  返回值:返回减1后的key值
> 
> 
> 


demo如下



127.0.0.1:6379> DECR zsage
(integer) 10


#### 2.7 将字符串数字值改变偏移量


将字符串数字值增加偏移量



> 
> 语法:incrby key offset  
>  功能:将 key 所储存的值加上增量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行 INCRBY 命令。  
>  返回值:返回增量之后的key值。
> 
> 
> 


demo如下



127.0.0.1:6379> INCRBY zsage 3
(integer) 13


将字符串数字值减少偏移量



> 
> 语法:decrby key offset  
>  功能:将 key 所储存的值减去减量值,如果 key 不存在,则 key 的值先被初始化为 0 再执行 DECRBY 命令。  
>  返回值:返回减量之后的key值。
> 
> 
> 


demo如下



127.0.0.1:6379> DECRBY zsage 2
(integer) 11


#### 2.8 截取字符串



> 
> 语法:getrange key startIndex endIndex  
>  功能:获取 key 中字符串值从 startIndex 开始到 endIndex 结束的子字符串,包括startIndex和endIndex, 下标从0开始,负数表示从字符串的末尾开始,-1 表示最后一个字符。截取的子字符串是闭区间截取的。
> 
> 
> 


demo如下



127.0.0.1:6379> getrange wz 2 6
“ngzho”
127.0.0.1:6379> getrange wz 1 -1
“angzhoushishuaige”


#### 2.9 修改(覆盖)字符串



> 
> 语法:setrange key offsetIndex value  
>  功能:用value覆盖key的存储的值从offset开始,能够覆盖几个就是几个。  
>  返回值:修改后的字符串的长度。
> 
> 
> 


demo如下



127.0.0.1:6379> setrange wz 4 xiaopengyou
(integer) 18
127.0.0.1:6379> get wz
“wangxiaopengyouige”


#### 2.10 设置数据的同时设置生存时间



> 
> 语法:setex key seconds value  
>  功能:设置key的值,并将 key 的生存时间设为 seconds (以秒为单位) ,如果key已经存在,将覆盖旧值。  
>  返回值:设置成功,返回OK。
> 
> 
> 


demo如下



127.0.0.1:6379> setex k3 20 v3
OK


#### 2.11 设置字符串数据(不重复)



> 
> 语法:setnx key value  
>  功能:setnx 是 set if not exists 的简写,如果key不存在,则 set 值,存在则不设置值。  
>  返回值:设置成功,返回1  
>  设置失败,返回0
> 
> 
> 


demo如下



127.0.0.1:6379> setnx k4 v4
(integer) 1
127.0.0.1:6379> setnx k4 v4
(integer) 0


#### 2.12 同时设置一个或多个字符串数据



> 
> 语法:mset key value [key value…]  
>  功能:同时设置一个或多个 key-value 对  
>  返回值:设置成功,返回OK。
> 
> 
> 


#### 2.13 同时获取一个或多个字符串数据



> 
> 语法:mget key [key …]  
>  功能:获取所有(一个或多个)给定 key 的值  
>  返回值:包含所有key的列表,如果key不存在,则返回nil。
> 
> 
> 


demo如下



127.0.0.1:6379> mset k4 v4 k5 v5
OK
127.0.0.1:6379> mget k1 k2 k3 k4 k5

  1. (nil)
  2. “hello”
  3. (nil)
  4. “v4”
  5. “v5”

#### 2.14 设置多个字符串数据(不重复)



> 
> 语法:msetnx key value[key value…]  
>  功能:同时设置一个或多个 key-value 对,如果有一个key是存在的,则设置不成功。  
>  返回值:设置成功,返回1  
>  设置失败,返回0
> 
> 
> 


demo如下



127.0.0.1:6379> msetnx k5 vv k6 v6
(integer) 0


### 3.操作列表类型数据(list)


Redis列表是简单的字符串列表,按照**插入顺序**排序,左边(头部)、右边(尾部)或者中间都可以添加元素。链表的操作无论是头或者尾效率都极高,但是如果对中间元素进行操作,那效率会大大降低了。


列表类型的数据操作总的思想是通过key和下标操作value,key是数据标识,下标是数据在列表中的位置,value是我们感兴趣的业务数据。表头元素的下标是0,依次往后下标都是前一个下标加1.当然也可以按照表尾为-1,依次往前下标减1来表示。


其主要的操作可以参考下图,下面我们将一一讲解。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/935bcba8dc104037b2910348791622da.jpeg#pic_center)


#### 3.1 将一个或多个值依次插入列表表头



> 
> 语法:lpush key value [value…]  
>  功能:将一个或多个值 value 插入到列表 key 的最左边(表头),各个value值依次插入到表头位置。  
>  返回值:插入之后的列表的长度。
> 
> 
> 


demo如下



127.0.0.1:6379> lpush list01 1 2 3
(integer) 3


#### 3.2 将一个或多个值依次插入列表表尾



> 
> 语法:rpush key value [value…]  
>  功能:将一个或多个值 value 插入到列表 key 的最右边(表尾),各个 value 值按依次插入到表尾。  
>  返回值:插入之后的列表的长度。
> 
> 
> 


demo如下



127.0.0.1:6379> rpush list02 3 2 1
(integer) 3


#### 3.3 获取列表的元素



> 
> 语法:lrange key startIndex endIndex  
>  功能:获取列表 key 中指定下标区间内的元素,下标从0开始,到列表长度-1;下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推;startIndex和endIndex超出范围不会报错。  
>  返回值:获取到的元素列表。
> 
> 
> 


demo如下



127.0.0.1:6379> lrange list01 0 2

  1. “3”
  2. “2”
  3. “1”

#### 3.4 移除并返回列表头部第一个元素



> 
> 语法:lpop key  
>  功能:移除并返回列表key头部第一个元素,即列表左侧的第一个元素。  
>  返回值:列表左侧第一个元素的值;列表key不存在,返回nil。
> 
> 
> 


demo如下



127.0.0.1:6379> lpop list01
“3”
127.0.0.1:6379> lrange list01 0 2

  1. “2”
  2. “1”

#### 3.5 移除并返回列表尾部第一个元素



> 
> 语法:rpop key  
>  功能:移除并返回列表key尾部第一个元素,即列表右侧的第一个元素。  
>  返回值:列表右侧第一个元素的值;列表key不存在,返回nil。
> 
> 
> 


demo如下



127.0.0.1:6379> rpop list01
“1”
127.0.0.1:6379> lrange list01 0 2

  1. “2”

#### 3.6 获取列表指定下标元素



> 
> 语法:lindex key index  
>  功能:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。0 表示列表的第一个元素,1 表示列表的第二个元素;index也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。  
>  返回值:key存在时,返回指定元素的值;  
>  Key不存在时,返回nil。
> 
> 
> 


demo如下



127.0.0.1:6379> lindex list02 1
“2”


#### 3.7 获取列表的长度



> 
> 语法:llen key  
>  功能:获取列表 key 的长度  
>  返回值:数值,列表的长度;key不存在返回0
> 
> 
> 


demo如下



127.0.0.1:6379> llen list02
(integer) 3


#### 3.8 批量移除列表值为value的元素



> 
> 语法:lrem key count value  
>  功能:根据参数 count 的值,移除列表中与参数 value 相等的元素,  
>  count >0 ,从列表的左侧向右开始移除count个元素;  
>  count < 0 从列表的尾部开始移除count个元素;  
>  count = 0移除表中所有与 value 相等的值。  
>  返回值:数值,移除的元素个数
> 
> 
> 


demo如下



127.0.0.1:6379> lpush list03 a b c a d e a
(integer) 7
127.0.0.1:6379> lrem list03 1 a
(integer) 1
127.0.0.1:6379> lrange list03 0 -1

  1. “e”
  2. “d”
  3. “a”
  4. “c”
  5. “b”
  6. “a”

#### 3.9 截取列表指定下标区间的元素



> 
> 语法:ltrim key startIndex endIndex  
>  功能:截取key的指定下标区间的元素,并且赋值给key。下标从0开始,一直到列表长度-1;下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推;startIndex和endIndex超出范围不会报错。  
>  返回值:执行成功返回ok
> 
> 
> 


demo如下



127.0.0.1:6379> ltrim list03 0 -2
OK
127.0.0.1:6379> lrange list03 0 -1

  1. “e”
  2. “d”
  3. “a”
  4. “c”
  5. “b”

#### 3.10 修改列表指定下标的元素



> 
> 语法:lset key index value  
>  功能:将列表 key 下标为 index 的元素的值设置为 value。  
>  功能:设置成功返回ok ; key不存在或者index超出范围返回错误信息。
> 
> 
> 


demo如下



127.0.0.1:6379> lrange list01 0 -1

  1. “3”
  2. “2”
  3. “1”
  4. “0”
    127.0.0.1:6379> lset list01 0 4
    OK
    127.0.0.1:6379> lrange list01 0 -1
  5. “4”
  6. “2”
  7. “1”
  8. “0”

#### 3.11 在指定位置插入元素



> 
> 语法:linsert key before/after pivot value  
>  功能:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key不存在或者pivot不在列表中,不执行任何操作。  
>  返回值:命令执行成功,返回新列表的长度。没有找到pivot返回 -1, key不存在返回0。
> 
> 
> 


demo如下



127.0.0.1:6379> linsert list01 before 2 x
(integer) 5
127.0.0.1:6379> lrange list01 0 -1

  1. “4”
  2. “x”
  3. “2”
  4. “1”
  5. “0”

### 4.操作集合类型数据(set)


Redis的Set是string类型的无序不重复集合。集合类型的数据操作总的思想是通过key确定集合,key是集合标识,元素没有下标,只有直接操作业务数据和数据的个数。


#### 4.1 集合中添加元素



> 
> 语法:sadd key member [member…]  
>  功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。  
>  返回值:加入到集合的新元素的个数(不包括被忽略的元素)。
> 
> 
> 


demo如下



127.0.0.1:6379> sadd set01 a a b b c c
(integer) 3


#### 4.2 获取集合中的所有元素



> 
> 语法:smembers key  
>  功能:获取集合 key 中的所有成员元素,不存在的key视为空集合。  
>  返回值:返回指定集合的所有元素集合,不存在的key,返回空集合。
> 
> 
> 


demo如下



127.0.0.1:6379> smembers set01

  1. “c”
  2. “b”
  3. “a”

#### 4.3 判断元素是否存在于集合



> 
> 语法:sismember key member  
>  功能:判断 member 元素是否是集合 key 的元素  
>  返回值:member是集合成员返回1,其他返回 0 。
> 
> 
> 


demo如下



127.0.0.1:6379> sismember set01 a
(integer) 1


#### 4.4 获取集合里面的元素个数



> 
> 语法:scard key  
>  功能:获取集合里面的元素个数  
>  返回值:数字,key的元素个数。其他情况返回 0 。
> 
> 
> 


demo如下



127.0.0.1:6379> scard set01
(integer) 3


#### 4.5 移除集合中一个或多个元素



> 
> 语法:srem key member [member…]  
>  功能:移除集合中一个或多个元素,不存在的元素被忽略。  
>  返回值:数字,成功移除的元素个数,不包括被忽略的元素。
> 
> 
> 


demo如下



127.0.0.1:6379> srem set01 a
(integer) 1
127.0.0.1:6379> smembers set01

  1. “c”
  2. “b”

#### 4.6 随机返回集合中n个元素



> 
> 语法:srandmember key[count]  
>  功能:只提供key,随机返回集合中一个元素,元素不删除,依然在集合中;  
>  提供了count时,count 正数, 返回包含count个数元素的集合,集合元素各不重复。count是负数,返回一个count绝对值的长度的集合,集合中元素可能会重复多次。  
>  返回值:一个元素或者多个元素的集合
> 
> 
> 


demo如下



127.0.0.1:6379> srandmember set01
“c”
127.0.0.1:6379> srandmember set01 2

  1. “c”
  2. “b”
    127.0.0.1:6379> srandmember set01 3
  3. “c”
  4. “b”
    127.0.0.1:6379> srandmember set01 -3
  5. “b”
  6. “c”
  7. “b”

#### 4.7 随机从集合中删除n个元素



> 
> 语法:spop key[count]  
>  功能:随机从集合中删除一个或count个元素。  
>  返回值:被删除的元素,key不存在或空集合返回nil。
> 
> 
> 


demo如下



127.0.0.1:6379> spop set01
“c”


#### 4.8 元素移动



> 
> 语法:smove src dest member  
>  功能:将 member 元素从src集合移动到dest集合,member不存在,smove不执行操作,返回0,如果dest存在member,则仅从src中删除member。  
>  返回值:成功返回 1 ,其他返回 0 。
> 
> 
> 


demo如下



127.0.0.1:6379> smove set01 set02 b
(integer) 1
127.0.0.1:6379> smembers set02

  1. “b”

#### 4.9集合比较



> 
> 语法:sdiff key key [key…]  
>  功能:返回指定集合的差集,以第一个集合为准进行比较,即第一个集合中有但在其它任何集合中都没有的元素组成的集合。  
>  返回值:返回第一个集合中有而后边集合中都没有的元素组成的集合,如果第一个集合中的元素在后边集合中都有则返回空集合。
> 
> 
> 


demo如下



127.0.0.1:6379> sadd set01 a b c d e f
(integer) 6
127.0.0.1:6379> sadd set02 b e f
(integer) 3
127.0.0.1:6379> sdiff set01 set02

  1. “d”
  2. “c”
  3. “a”

#### 4.10 返回指定集合的交集



> 
> 语法:sinter key key [key…]  
>  功能:返回指定集合的交集,即指定的所有集合中都有的元素组成的集合。  
>  返回值:交集元素组成的集合,如果没有则返回空集合。
> 
> 
> 


demo如下



127.0.0.1:6379> sinter set01 set02

  1. “f”
  2. “e”
  3. “b”

#### 4.11 返回指定集合的并集


语法:sunion key key [key…]  
 功能:返回指定集合的并集,即指定的所有集合元素组成的大集合,如果元素有重复,则保留一个。  
 返回值:返回所有集合元素组成的大集合,如果所有key都不存在,返回空集合。


demo如下



127.0.0.1:6379> sunion set01 set02

  1. “f”
  2. “c”
  3. “d”
  4. “a”
  5. “e”
  6. “b”

### 5.操作哈希类型数据(hash)


Redis的hash 是一个string类型的key和value的映射表,这里的value是一系列的键值对,hash特别适合用于存储对象。


哈希类型的数据操作总的思想是通过key和field操作value,key是数据标识,field是域,value是我们感兴趣的业务数据。


#### 5.1 添加元素(覆盖)



> 
> 语法:hset key field value [field value …]  
>  功能:将键值对field-value设置到哈希列表key中,如果key不存在,则新建哈希列表,然后执行赋值,如果key下的field已经存在,则value值覆盖。  
>  返回值:返回设置成功的键值对个数。
> 
> 
> 


demo如下



127.0.0.1:6379> hset user id 1001
(integer) 1
127.0.0.1:6379> hset user name zhangsan age 20
(integer) 2


#### 5.2 查找元素



> 
> 语法:hget key field  
>  功能:获取哈希表 key 中给定域 field 的值。  
>  返回值:field域的值,如果key不存在或者field不存在返回nil。
> 
> 
> 


demo如下



127.0.0.1:6379> hget user name
“zhangsan”


#### 5.3 插入多个元素



> 
> 语法:hmset key field value [field value…]  
>  功能:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,再执行hmset.  
>  返回值:设置成功返回ok,如果失败返回一个错误。
> 
> 
> 


demo如下



127.0.0.1:6379> hmset user id 1001 name zhangsan age 11
OK
127.0.0.1:6379> hget user age
“11”



> 
> 💡 Q:hmset于hset有什么区别  
>  As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.  
>  根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。  
>  ——redis 官网
> 
> 
> 


#### 5.4获取多个元素



> 
> 语法:hmget key field [field…]  
>  功能:获取哈希表 key 中一个或多个给定域的值  
>  返回值:返回和field顺序对应的值,如果field不存在,返回nil。
> 
> 
> 


demo如下



127.0.0.1:6379> hmget user id age name sex

  1. “1001”
  2. “11”
  3. “zhangsan”
  4. (nil)
    127.0.0.1:6

#### 5.5 获取所有元素



> 
> 语法:hgetall key  
>  功能:获取哈希表 key 中所有的域和值  
>  返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash.
> 
> 
> 


demo如下



127.0.0.1:6379> hgetall user

  1. “id”
  2. “1001”
  3. “name”
  4. “zhangsan”
  5. “age”
  6. “11”

#### 5.6 删除元素



> 
> 语法:hdel key field [field…]  
>  功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。  
>  返回值:成功删除的field的数量。
> 
> 
> 


demo如下



127.0.0.1:6379> hdel user name
(integer) 1
127.0.0.1:6379> hgetall user

  1. “id”
  2. “1001”

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

被视为已弃用。请在新代码中使用HSET。

——redis 官网

5.4获取多个元素

语法:hmget key field [field…]
功能:获取哈希表 key 中一个或多个给定域的值
返回值:返回和field顺序对应的值,如果field不存在,返回nil。

demo如下

127.0.0.1:6379> hmget user id age name sex
1) "1001"
2) "11"
3) "zhangsan"
4) (nil)
127.0.0.1:6

5.5 获取所有元素

语法:hgetall key
功能:获取哈希表 key 中所有的域和值
返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash.

demo如下

127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "name"
4) "zhangsan"
5) "age"
6) "11"

5.6 删除元素

语法:hdel key field [field…]
功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。
返回值:成功删除的field的数量。

demo如下

127.0.0.1:6379> hdel user name
(integer) 1
127.0.0.1:6379> hgetall user
1) "id"
2) "1001"


[外链图片转存中...(img-7VzRBqKd-1715687255100)]
[外链图片转存中...(img-y3gQwILk-1715687255101)]
[外链图片转存中...(img-Gncj6zyT-1715687255101)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值