Redis详解(三)数据类型操作命令string、hash、list

字节跳动校招内推码: NH19EF9
投递链接: https://jobs.toutiao.com/s/L3bLQM3

第三章 Redis数据类型操作命令

1.字符串类型(string)

​ 字符串类型是redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据,json格式数据。

​ value值最多可以存512M。

1.1 基本命令(key 区分大小写)

(1)set
  • 作用:将字符串值value设置到key中。
  • 语法:set key value
127.0.0.1:6379> set k3 "{'name':'lisi','age':'20'}"
OK
(2)get
  • 作用:获取key中设置的字符串值
  • 语法:get key
## 获取k3的值
127.0.0.1:6379> get k3
"{'name':'lisi','age':'20'}"
## k100不存在
127.0.0.1:6379> get k100
(nil) ##  nil相当于null
(3)incr
  • 将key中存储的数字值加1,如果key不存在,则key的值先被初始化为0在执行incr操作(只能对数字类型的数据操作)
  • 语法:incr key
  • 用途:做计数器
127.0.0.1:6379> set index 1
OK
127.0.0.1:6379> incr index
(integer) 2
127.0.0.1:6379> incr index
(integer) 3

如果是储存的不是数字

127.0.0.1:6379> incr k1
(error) ERR value is not an integer or out of range

如果incr的值不存在

127.0.0.1:6379> keys *
1) "world"
2) "home"
3) "k1"
4) "word"
5) "index"
6) "age"
7) "k3"
127.0.0.1:6379> incr k4 ## 没有k4 执行的操作是k4赋初值并且加1.
(integer) 1
(4)decr
  • 用途:将key中存储的数字值减1。如果key不存在,那么key的值先被初始化为0再执行decr操作(只能对数字类型的数据操作)。
  • 语法:decr key
## 不是整形的情况
127.0.0.1:6379> decr k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decr k4
(integer) 0
127.0.0.1:6379> decr k4
(integer) -1

如果key不存在

127.0.0.1:6379> decr k6 ## 赋值为0然后减1。
(integer) -1
(5)append
  • 语法:append key value
  • 说明:
    • 如果key存在,则将value追加到原来旧值的末尾
    • 如果key不存在,则将key创建。
127.0.0.1:6379> append k1 linux
(integer) 10
127.0.0.1:6379> get k1
"hellolinux"
## k7不存在,那么就等同于set
127.0.0.1:6379> append k7 springmvc
(integer) 9

1.2 常用命令

(1)strlen
  • 语法: strlen key
  • 说明:返回key所存储的字符串值的长度
  • 返回值:
    • 如果key存在,返回字符串值的长度。
    • key不存在,返回0
127.0.0.1:6379> strlen k7
(integer) 9
127.0.0.1:6379> strlen k100
(integer) 0
(2)getrange
  • 语法:getrange key start end
  • 作用:获取key中字符串从start开始到end结束的子字符串,包括start和end,负数表示从字符串的末尾开始,-1 表示最后一个字符。
    • h e l l o
    • 0 1 2 3 4
    • -5 -4 -3 -2 -1
  • 返回值:截取的子字符串。
127.0.0.1:6379> set school bytedance
OK
127.0.0.1:6379> getrange school 2 4
"ted"
127.0.0.1:6379> getrange school -5 -1
"dance"

127.0.0.1:6379> getrange school 0 -1
"bytedance"
(3)setrange
  • 语法:setrange key offset value
  • 说明:用value覆盖(替换)key的存储的值从offset开始,不存在的key做空白字符串。
  • 返回值:修改后的字符串的长度。
## 这里tomcat写错了

127.0.0.1:6379> set item java-tmocat
OK
##从第5个字符开始修改

127.0.0.1:6379> setrange item 5 tom
(integer) 11  ## 表示一共11个字符。

127.0.0.1:6379> get item
"java-tomcat"

127.0.0.1:6379> setrange item 5 123456789
(integer) 14
127.0.0.1:6379> get item
"java-123456789"


## key不存在的情况
127.0.0.1:6379> setrange item_null 5 isNull
(integer) 11
127.0.0.1:6379> get item_null
"\x00\x00\x00\x00\x00isNull"
(4)mset
  • 语法:mset key value [key value…]

  • 说明:同时设置一个或多个key-value 键值对

  • 返回值:OK

mset k1 v1 k2 v2 k3 v3
(5)mget
  • 语法:mget key[keys …]
  • 作用:获取所有(一个或多个)给定key的值。
  • 返回值:包含所有key的列表
127.0.0.1:6379> mget k1 k111 k1
1) "v1"
2) (nil)
3) "v1"

2.哈希类型 hash

Redis hash 是一个string 类型的field和value的映射表,hash特别适合用于存储对象。

2.1 基本命令

(1)hset
  • 语法:hset hash表的key field value

  • 作用:将哈希表key中的域field的值设为value,如果key不存在,则新建hash表,执行赋值,如果有field,则覆盖值。

  • 返回值:

    • 如果field是hash表中新field,且设置值成功,返回1。

      127.0.0.1:6379> hset website baidu www.baidu.com
      (integer) 1
      
    • 如果field已经存在,旧值覆盖新值,返回0。

(2)hget
127.0.0.1:6379> hget website baidu
"www.baidu,com"
127.0.0.1:6379> hget website csdn
"www.csdn,com"
(3)hmset
  • 语法:hmset key field value [field value…]
  • 说明:
    • 同时将多个 field-value(域-值)设置到哈希表key中。
    • 此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,执行hmset。
  • 返回值:设置成功返回ok,如果失败返回一个错误。
127.0.0.1:6379> hmset website baidu www.baidu,com google www.google.com csdn www.csdn,com
OK
127.0.0.1:6379> hget website csdn
"www.csdn,com"
(4)hmget
  • 语法:hmget key
  • 作用:获取哈希表key中一个或多个给定域的值
  • 返回值:返回和field顺序对应的值,如果field不存在,返回nil
127.0.0.1:6379> hmget website csdn baidu
1) "www.csdn,com"
2) "www.baidu,com"
(5)hgetall
  • 语法:hgetall key
  • 作用:获取哈希表key中所有的域和值。
  • 返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash
127.0.0.1:6379> hgetall website
1) "baidu"
2) "www.baidu,com"
3) "google"
4) "www.google.com"
5) "csdn"
6) "www.csdn,com"
(6)hdel
  • 语法:hdel key field [field…]
  • 作用:删除哈希表key中的一个或多个指定域field,不存在field直接忽略
  • 返回值:成功删除的field的数量。
127.0.0.1:6379> hdel website baidu f1 csdn f2
(integer) 2  ## 成功删除了两个

127.0.0.1:6379> hgetall website
1) "google"
2) "www.google.com"

2.2 常用命令

1.hkeys
  • 语法:hkeys key
  • 作用:查看哈希表key中的所有field域
  • 返回值:包含所有field的列表,key不存在返回空列表
127.0.0.1:6379> hgetall myuser
1) "name"
2) "zhangsan"
3) "age"
4) "20"
5) "sex"
6) "man"

127.0.0.1:6379> hkeys myuser
1) "name"
2) "age"
3) "sex"
2.hvals
  • 语法:hvals key
  • 作用:返回哈希表中所有域的值
  • 返回值:包含哈希表所有域值的列表,key不存在返回空列表
127.0.0.1:6379> hvals myuser
1) "zhangsan"
2) "20"
3) "man"
3.hexists
  • 作用判断域下的key是否存在。
  • 返回值:有返回1,没有返回0。

127.0.0.1:6379> hexists myuser name
(integer) 1
127.0.0.1:6379> hexists myuser birth
(integer) 0

hash表中没有任何数据的时候,key值会被自动删掉。

3.列表 list

​ redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

3.1 基本命令

(1)lpush
  • 语法:lpush key value [value…]
  • 作用:将一个或多个值value插入到列表key的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头。
  • 返回值:数字,新列表的长度。
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> lpush mylist d e
(integer) 5
127.0.0.1:6379> lpush mylist2 a b c
(integer) 3
(2)rpush
  • 语法:rpush key value [value…]
  • 作用:将一个或多个值value插入到列表key的表尾(最右边),从左到右的顺序依次插入到表尾。
  • 返回值:数字,新列表的长度。
127.0.0.1:6379> rpush mylist 1 2 3
(integer) 8
(3)lrang
  • 语法:lrange key start stop
  • 作用:获取key中指定区间内的元素,0表示列表的第一个元素,以1表示列表的第二个元素;start,stop是列表的下表值,也可以负数下表,-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
  • 返回值:指定区间的列表。
127.0.0.1:6379> rpush lang c php java rust python c# c++ dart js
(integer) 9
127.0.0.1:6379> lrange lang 1 3
1) "php"
2) "java"
3) "rust"


127.0.0.1:6379> lrange lang -5 -3
1) "python"
2) "c#"
3) "c++"


127.0.0.1:6379> lrange lang 0 100
1) "c"
2) "php"
3) "java"
4) "rust"
5) "python"
6) "c#"
7) "c++"
8) "dart"
9) "js"
(4)lindex
  • 语法:lindex key index
  • 作用:获取列表key中下标为指定index的元素,列表元素不删除,只是查询。
    • 0表示列表的第一个元素,以1表示列表的第二个元素
    • start,stop是列表的下标值,也可以负数的下标。
    • -1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
  • 返回值:指定下标的元素,index不在列表范围,返回nil
127.0.0.1:6379> lindex lang 2
"java"

127.0.0.1:6379> lindex lang -2
"dart"

127.0.0.1:6379> lindex lang 100
(nil)
(5)llen
  • 语法:lien key
  • 作用:获取列表key的长度
  • 返回值:数值,列表的长度;key不存在返回0
127.0.0.1:6379> llen lang
(integer) 9

3.2常用命令

(1)lrem
  • 语法:lrem key count value
  • 作用:根据参数cout的值,移除列表中与参数value相等的元素,count>0,从列表的左侧向右开始移除;count<0从列表的尾部开始移;count=0移除表中所有与value相等的值。
127.0.0.1:6379> lrange course 0 -1
 1) "html"
 2) "js"
 3) "mysql"
 4) "js"
 5) "java"
 6) "html"
 7) "spring"
 8) "mysql"
 9) "springmvc"
10) "java"
11) "mysql"
12) "html"
13) "js"

## 从头部删除两个js
127.0.0.1:6379> lrem course 2 js ## 删除两个js 
(integer) 2
127.0.0.1:6379> lrange course 0 -1
 1) "html"
 2) "mysql"
 3) "java"
 4) "html"
 5) "spring"
 6) "mysql"
 7) "springmvc"
 8) "java"
 9) "mysql"
10) "html"
11) "js"

## 从尾部删除两个mysql
127.0.0.1:6379> lrem course -2 mysql
(integer) 2
127.0.0.1:6379> lrange course 0 -1
1) "html"
2) "mysql"
3) "java"
4) "html"
5) "spring"
6) "springmvc"
7) "java"
8) "html"
9) "js"
## 全部删除html
lrem course 0 html 
(2)lset
  • 语法:lset key index value
  • 作用:将列表key下标为index的元素的值设置为value。
  • 返回值:设置成功返回ok;key不存在或者index超出范围返回错误信息。
127.0.0.1:6379> lrange course 0 -1
1) "mysql"
2) "java"
3) "spring"
4) "springmvc"
5) "java"
6) "js"

## 将spring替换为SSM
127.0.0.1:6379> lset course 2 SSM
OK

127.0.0.1:6379> lrange course 0 -1
1) "mysql"
2) "java"
3) "SSM"
4) "springmvc"
5) "java"
6) "js"

(3)linsert
  • 语法:linsert key BEFORE AFTER pivot value
  • 作用:将值value插入到列表key当中位于值pivot之前或之后的位置。key不存在,pivot不在列表中,不执行任何操作。
  • 返回值:命令执行成功,返回新列表长度。没有找到pivot返回-1,key不存在返回0。
##在ssm之前加入linux

127.0.0.1:6379> linsert course before SSM linux
(integer) 7
127.0.0.1:6379> lrange course 0 -1
1) "mysql"
2) "java"
3) "linux"
4) "SSM"
5) "springmvc"
6) "java"
7) "js"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值