【Redis】Redis命令-String命令

一、介绍

String类型,也就是字符串类型,是Redis中最简单的存储类型。

其value是字符串,虽然都是字符串,不过根据字符串的格式不同,又可以分为3类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作

1652890121291

不管是哪种格式,都属于字符串,因此底层都是字节数组形式存储,只不过为了节省空间,数值类型的字符串在编码的时候会不同

数值类型会直接把数字直接转化为二进制的形式去存储,这样一来,一个字节就可以即表示一个很大的数字了,可以更节省空间

字符串只能把字符转成字节码然后再去存储,相对来说占用内存更多一点。

甚至你可以把一张图片编译成字节存到string类型中,但是字符串类型的最大空间不能超过512m,因此一般情况下也不会向一个key存储太多数据,因此一般也不会存图片,最多存图片的地址。

String的常见命令有:

增改查如下,删除是通用命令里面的。

  • SET:添加或者修改已经存在的一个String类型的键值对,如果key不存在则是新增,如果存在则是修改

  • GET:根据key获取String类型的value

  • MSET:批量添加多个String类型的键值对

  • MGET:根据多个key获取多个String类型的value

除了基本的存取以外,既然redis在存储数值类型的编码不同,因此对于数值类型就有一些特殊功能了。

  • INCR:让一个整型的key自增1

  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
    把值变成负数就是自减,eg:incrby age -1

  • DECR:自减1,但使用时一般都是使用INCR

  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长,但是浮点数没有默认增长,必须指定增长的步长

以下两个是组合命令

  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

    setnx name lisi 等价于 set name lisi nx

  • SETEX:添加一个String类型的键值对,并且指定有效期

    setex name 10 jack 等价于:set name jack ex 10,ex就是expire

贴心小提示:以上命令除了INCRBYFLOAT 都是常用命令


二、代码实现

SET 和GET

127.0.0.1:6379> set name Rose  //原来不存在
OK

127.0.0.1:6379> get name 
"Rose"

127.0.0.1:6379> set name Jack //原来存在,就是修改
OK

127.0.0.1:6379> get name
"Jack"

MSET和MGET

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK

127.0.0.1:6379> MGET name age k1 k2 k3
# 返回值是多个值形成的数组,redis中数组就会以下面的形式进行返回
1) "Jack" //之前存在的name
2) "10"   //之前存在的age
3) "v1"
4) "v2"
5) "v3"

INCR和INCRBY和DECY

127.0.0.1:6379> get age 
"10" # 这个10就是一个普通字符串,但是它是一个数值类型的,因此底层编码就是数字

127.0.0.1:6379> incr age # 增加1
(integer) 11
    
127.0.0.1:6379> get age # 获得age
"11"

127.0.0.1:6379> incrby age 2 # 一次增加2
(integer) 13 # 返回目前的age的值
    
127.0.0.1:6379> incrby age 2
(integer) 15
    
127.0.0.1:6379> incrby age -1 # 也可以增加负数,相当于减
(integer) 14
    
127.0.0.1:6379> incrby age -2 # 一次减少2个
(integer) 12
    
127.0.0.1:6379> DECR age # 相当于 incr 负数,但是一般在使用的时候一般都使用incr,只不过是给它正负而已
(integer) 11
    
127.0.0.1:6379> get age 
"11"


INCRBYFLOAT

浮点数没有默认增长,必须指定增长的步长

127.0.0.1:6379> set score 10.1
OK
127.0.0.1:6379> INCRBYFLOAT score 0.5
"10.6"
127.0.0.1:6379> INCRBYFLOAT score 0.5
"11.1"
127.0.0.1:6379> INCRBYFLOAT score 0.5

SETNX

SETNX是条组合命名,setnxnx 是参数,跟在 set 后面

我们在 set 的时候,其实后面可以跟很多很多参数,其中有一个参数就是 nx

image-20240523075904512

因此 setnx name lisi 等价于 set name lisi nx

127.0.0.1:6379> help setnx

  SETNX key value
  summary: Set the value of a key, only if the key does not exist # 如果key不存在才添加添加,存在就不添加。因此这个才是真正的新增功能,它只有新增效果
  since: 1.0.0
  group: string

127.0.0.1:6379> set name Jack  # 设置名称
OK
127.0.0.1:6379> setnx name lisi # 由于name已经存在,所以lisi的操作失败
(integer) 0 # 返回值是0,表示没有数据改变
127.0.0.1:6379> get name 
"Jack" # 重新查看name的值,依然是Jack
127.0.0.1:6379> setnx name2 lisi
(integer) 1 # name2 不存在,所以操作成功
127.0.0.1:6379> get name2 
"lisi"

SETEX

EX:代表有效期。

通用命令中有一个叫 EXPIRE,它的作用是设置一个key的有效期,通过 ttl 可以查看key的剩余有效期,但是 EXPIRE 是在key已经存在的情况下。

SETEX 就表示:添加一个key,并且设置有效期。

这也是条组合命名:setex name 10 jack 等价于:set name jack ex 10,ex就是expire

127.0.0.1:6379> setex name 10 jack
OK

127.0.0.1:6379> ttl name
(integer) 8

127.0.0.1:6379> ttl name
(integer) 7

127.0.0.1:6379> ttl name
(integer) 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值