知识补充 :Redis的基本数据类型及对应的命令

Redis支持五种数据类型:

  • 字符串(string)类型
  • 哈希(hash)类型
  • 列表(list)类型
  • 集合(set)类型
  • 有序集合(sorted set或zset)类型

Redis缓存基础

  • 如果容器处于Exited状态,需要先通过【docker start 容器名】命令来启动(启动该容器的同时,其中包含的Redis服务器也会自动启动)
  • 启动容器后,通过【docker exec -it 容器名 /bin/bash】命令来进入容器的命令行交互窗口
  • 进入命令行交互窗口后,通过【redis-cli】命令来启动Redis客户端,并连接到Redis服务器
  • 启动Redis客户端后,通过【set 键 值】命令来将键值对缓存在内存里,用【get 键】命令来获取对应的值
  • 在实际项目中,一般需要同时设置数据的生存时间,通过【set 键 值 EX 秒数】来设置对象的生存时间(单位:秒),或者【set 键 值 PX 毫秒数】(单位:毫秒),如果用get命令去获取过期对象,会得到表示null的nil值

针对字符串类型变量的命令

(“键值对”里的“值”是以“字符串”的形式存储数据的)

数据的插入和获取:set和get

set key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]
# key和value分别对应待设置字符串的键和值;
# value需要是字符串类型,可以用单引号、双引号或者不带任何符号;
# 如果原key已经有值,再次执行set命令会用新值覆盖旧值;
# 通过EX和PX参数可以执行该变量的生存时间(EX对应秒,PX对应毫秒);
# NX参数表示当key不存在时才进行设置值的操作;
# XX参数表示当key存在时才进行设置值的操作;
# kEEPTTL是Redis 6.0的新特性,指“保留生存时间”。

数据的批量插入和获取:mset和mget

mset key value [key value...]
mget key [key...]
# 不包含NX、XX、PX、EX等参数
# 如果带上EX、PX参数,不会报错,但实际上不生效
# 如果带上NX、XX参数,会直接报错

 

数字类型值的增量和减量

(一般用在统计流量和控制并发的场景中)

incr key
# 对key对应的数字类型值进行加1操作

devr key
# 对key对应的数字类型值进行减1操作

incrby key increment
# 对key对应的数字类型值进行加increment的操作

devrby key decrement
# 对key对应的数字类型值进行减decrement的操作

通过getset命令设置新值

getset key value
# 如果key对应的值存在,则会用value覆盖旧值,同时返回旧值;
# 如果key对应的值不存在,也会设值,但会返回nil。

 

针对字符串的其他操作

(在缓存场景用得不多)

getrange key start end
# 获取key的子字符串命令,返回key对应的值(从start到end的字符串)

setrange key offset value
# 替换部分值命令,从offset位置开始,把值替换为value

strlen key
# 统计字符串长度的命令,返回字符串的长度

append key value
# 追加值的命令,把value追加到原值的末尾

针对哈希类型变量的命令

(哈希(hash)映射表类型值)

数据的插入和获取:hset和hget

hset key field value [field value ...]
# key是待缓存对象的键
# field value是以键值对的形式描述的对象数据
# 同一个key,可以用多个field value对来存储数据
# field可以理解成对象的属性名,value可以理解成对象的属性值

hget key field
# key是待读取对象的键
# 如果存在key和field对应的数据,就返回该数据;如果不存在,就返回neil值

(不能直接hset到不是哈希类型的key上;不支持EX和PX参数) 

通过hsetnx命令设置新值

hsetnx key field value
# 如果key和field对应的value不存在时,设置对应的value;
# key之后只能带一对field和value,超过数量直接报错。

针对key的相关操作

hkeys key
# 查看该key所对应的哈希类型数据的所有field

hvals key
# 查看key所对应的哈希类型数据的所有value

hgetall key
# 以field和value对的形式查看key对应的哈希类型数据

 

用hexists命令判断值是否存在

hexists key field
# 判断key和field对应的value是否存在

存在key和name对应的value,返回1;不存在则返回0;只输入key,报错。 

用hdel进行删除操作

hdel key field [field...]
# 能够同时删除一个key对应的多个field数据

del key
# 删除指定key所对应的整个哈希类型的数据

针对列表类型变量的命令

(用Redis的列表(list)可以在一个key里存储一个或多个数据)

数据的插入和读取:

lpush key element [element...]
# key指定待插入的列表,element表示插入到列表的值

lindex key index
# 指定待读取的列表,index指定待读取列表值的索引号(索引号从0开始)

lpush可以一次一个地往key插入数据,也可以一次性多个。读取的时候,需要提供索引号,索引号从0开始,与插入顺序相反。读取的时候,如果不提供索引号,直接报错。

rpush key element [element...]
# 指定列表的尾部插入数据(方向与lpush相反)

 

 

通过lpushx和rpushx插入数据

lpushx key element [element...]
# 只有对应key存在时,才指定列表的头部插入数据

rpushx key element [element...]
# 只有对应key存在时,才指定列表的尾部插入数据(方向与lpushx相反)

 

 

用del语句进行删除key是003的列表,用lpushx向key是003的列表插入four,结果返回0,表示插入失败。再用lpush插入one,结果返回1,表示累计成功插入一个数据。再用lpushx插入two,结果返回2,表示累计成功插入两个数据。最后用lindex读取key是003的列表中,索引号为0的值,结果返回two(因为lpush和lpush是向头部方向插入数据的)。

用list模拟堆栈和队列

  • 上述的lpush和rpush命令,顾名思义,就是分别向左边(list头)和右边(list尾)插入数据。
  • 与之对应的是,有lpop和rpop命令,分别表示从左边(list头)和右边(list尾)弹出数据(读完删除)。
用list模拟堆栈和队列
lpushrpush
lpop模拟堆栈-先进后出模拟队列-先进先出
rpop模拟队列-先进先出模拟堆栈-先进后出

 

 

用lrange命令获取指定区间内的数据

  • 用lindex命令能获取key对应列表里指定索引的数据
  • 用lrange命令获取指定区间内的数据
lrange key start stop
# [start,stop]是闭区间
# 索引值超过列表范围也不会报错,会用实际的结束索引替换掉stop值
# 开始索引不能比结束索引大,会返回一个空值

用lset命令修改列表数据

lset key index element
# 只能做修改操作,不能做插入。所以如果key或index不存在,会直接报错

删除列表数据

lpop key
# 返回并删除key对应列表头部的第一个数据

rpop key
# 返回并删除key对应列表尾部的第一个数据

lrem key count element
# key指向待删除元素的列表
# 当count等于0时,删除该列表例所有值是element的数据
# 当count大于0时,删除从头到尾方向数量为count个、值是element的数据
# 当count小于0时,删除从尾到头方向数量为count个、值是element的数据

del key
# 连带key删除整个列表

 

针对集合类型变量的命令

  • 和列表数据类似,集合(set)类数据也能在同一个key下存储一个或多个数据;
  • 和列表数据不同,集合里存储的数据不能重复(且无序)。

数据的插入和读取

sadd key member [member ...]
# 插入
smembers key
# 读取

# 集合里无法存储重复数据,因此能够实现“去重”功能
# 集合还具有“无序”的特性,插入顺序未必等于输出顺序

# 列表存储数据时具有有序性,适合按照一定的规范存储同一类的数据,比如描述员工信息:第一个位置存姓名、第二个位置存工资等等,读取的时候就可以按照同一规范来读取了
# 集合存储数据不具有有序性,适合存储并列的数据,比如国家名、城市名、公司名等等

用sismember命令判断元素是否存在

(集合具有无序性,“读取指定索引数据”的命令没有意义)

sismember key member
# key和member分别是待查询的集合和元素

获取集合的交集、并集和差集

sinter key [key ...]
# 交集
sunion key [key ...]
# 并集
sdiff key [key ...]
# 差集(存在于集合A但不存在于集合B,参数次序不同,结果也不同)

用srem命令删除集合数据

srem key member [member ...]
# member是待删除的数据

# 如果从一个不存在的集合中删除数据,会返回0
# 如果从一个非集合对象中删除数据,会报错

del key
# 连带key删除整个集合

针对有序集合类型变量的命令

  • 有序集合(sorted set,也叫zset)与集合(set)类似,其中都不能出现重复数据;
  • 在有序集合中,每个数据都会对应一个score参数,以此来描述该数据的分数(作为排序的基础)

数据的插入和读取

zadd key [NX|XX] [CH] [INCR] score member [score member ...]
# 插入

# NX参数表示只有当key对应的有序集合不存在时才添加member元素
# XX参数表示当有序集合存在时才添加member元素
# CH参数指定该zadd命令修改时返回的个数(默认返回0)
# 当待插入的member不存在时,INCR参数不会起作用
# 当member存在时,会让score加上由INCR指定的数值
# score参数是用来描述元素的数值(也叫权重),即元素在集合中的重要程度
# zadd命令能够同时添加一个或多个score member元素对

zrange key start stop [WITHSCORES]
# 以升序方式读取

zreverange key start stop [WITHSCORES]
# 以降序方式读取

# WITHSCORES参数控制读取后带不带scores信息输出

用zincrby命令修改元素的分值

zincrby key increment member

 

用zscore命令获取指定元素的分值

zscore key member

# 如果key或member不存在,会返回nil
# 只能提供一个key一个member,多了直接报错

查看有序集合里的元素排名

zrank key member
# 获取单个元素的正序排名(对应zrange的顺序)

zrevrank key member
# 获取单个元素的倒序排名(对应zrevrange的顺序)

# 元素序号从0开始
# 如果对应的元素不存在,返回nil

 

删除有序集合里的值

zrem key member [member ...]
# 只会删除集合里存在元素,不存在的直接忽略
# 如果指向的key不存在,会返回nil

zremrangebyrank key start stop
# 删除指向的有序集合里排名(zrange正序排名)在start到stop范围内的元素

zremrangebyscore key min max
# 删除指向的有序集合里score(分值)在min到max范围内的元素

 


归纳表

针对字符串类型变量的命令
插入单组k-vset key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]
获取单个k的vget key
插入多组k-vmset key value [key value...]
获取多个k的vmget key [key...]
数字类型v加1incr key
数字类型v减1devr key
数字类型v加Nincrby key N
数字类型v减Ndevrby key N
修改v的数据getset key value
获取v的子集getrange key strat end
替换v的子集setrange key offset value
统计v的长度strlen key
追加v的内容append key value
针对哈希类型变量的命令
插入多组k-f-vhset key field value [field value ...]
获取单组k-f-vhget key field
插入单组k-f-v(v为空)hsetnx key field value
获取k下全部fhkeys key
获取k下全部vhvals key
获取k下全部f+vhgetall key
判断k-f下是否存在指定vhexists key field
删除k下单个/多个fhdel key field [field ...]
删除整个kdel key
针对列表类型变量的命令
从k头部插入任意个elpush key element [element…]
从k尾部插入任意个erpush key element [element…]
获取k下单个e(依据索引)lindex key index
从k头部插入任意个e(k非空)lpushx key element [element...]
从k尾部插入任意个e(k非空)rpushx key element [element...]
从k头部弹出一个elpop key
从k尾部弹出一个erpop key
模拟堆栈(先进后出)lpush+lpop 或 rpush+rpop
模拟队列(先进先出)lpush+rpop 或 rpush+lpop
获取k下多个e(依据索引)lrange key start stop
修改k下单个e(依据索引)lset key index element
删除k下任意个指定elrem key count element
删除整个keydel key
针对集合类型变量的命令
插入k下任意个msadd key member [member ...]
获取k下全部msmembers key
判断k下是否存在指定msismember key member
获取多个k的交集sinter key [key ...]
获取多个k的并集sunion key [key ...]
获取多个k的差集sdiff key [key ...]
删除k下任意个msrem key member [member ...]
删除整个kdel key
针对有序集合类型变量的命令
插入k下任意组s-mzadd key [NX|XX] [CH] [INCR] score member [score member ...]
以升序读取k下的m(依据s)zrange key start stop [WITHSCORES]
以降序读取k下的m(依据s)zreverange key start stop [WITHSCORES]
给k-m对应的s加减Nzincrby key N member
获取k-m对应的szscore key member
查看m在k中的升序排名(依据s)zrank key member
查看m在k中的降序排名(依据s)zrevrank key member
删除k下的任意个m(依据m)zrem key member [member ...]
删除k下的任意个m(依据排名)zremrangebyrank key start stop
删除k下的任意个m(依据s)zremrangebyscore key min max

<完>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值