Redis之String

1 String

String是Redis里面最简单的一种数据结构

在Reids中,所有的key都是字符串(序列化之后是字符串)

不同的key对应的value则具备不同的数据结构,对于常说的五种不同的数据类型,主要是指value的数据类型不同

Redis中的字符串是动态字符串,内部是key修改的,像java中的StringBuffer,它采用分配冗余空间的方式来减少内存的频繁分配。

在Reids内存结构中,一般实际分配的内存会大于需要的内存,当字符串小于1M的时候,扩容都是在现有的空间基础上加倍,扩容每次扩1M空间,最大,最大512M。

1.1 set

//给一个k赋值
set k3 99

1.2 append

使用append命令时,如果key已经存在,则直接在存在的字符串后面追加值,否则就创建新的键值对

//存进键值对k1
append k1 java

//查看k1的值
get k1

//会在上面k1的基础上追加字符串
append k1 .org

1.3 get

get用来获取一个key的value

  • getset
    获取并更新字符串
//获取k3的值并把其更新为100
getset k3 100

1.4 decr

可以实现对value的减1操作(前提是value是一个数字,如果不是数据会报错,如果value不存在,则会给一个默认的值为0,在默认值的基础上减1)

//则会得到-1
decr k2
  • decrby

和decr类似,但是可以自己设置步长相减,该命令第二个参数是步长

decrby k3 5

1.5 incr

给名为k3的key设置value自增

incr k3
  • incrby
    给某个key的value自增,同时可以设置步长
incrby k3 9
  • incrbyfloat
    和incrby类似,但是自增的步长可以设置为浮点数
incrbyfloat k3 0.5

1.6 mget和mset

批量获取和批量存取

mget k1 k2 k3
mset k4 4 k5 5 k6 s

1.7 ttl

查看key的有效期(-1表示永远不会过期,-2表示过期)

ttl k7

1.8 setex

给key设置value的同时,还设置过期时间。(k7后面的第一个为过期时间)(时间单位是秒),第二个是要存储的值

setex k7 3 j

1.9 psetex

和setex类似,只不过这里的时间单位是毫秒

psetex k7 10000 java

1.10 setnx(分布式锁的关键)

默认情况下,set命令会覆盖已经存在的key,setnx不会(0表示没有被修改,存在不会修改,不存在会创建)

setnx k3 js
  • msetnx
    批量设置(0表示设置失败,有一个存在都会设置失败)
 msetnx k3 3 k6 6

1.11 getrange

可以用来返回key对应的value的子串,这有点类似于java里面的substring,这个命令第二个和第三个参数就是截取的起始和终止位置

获取从第四位到最后(-1表示最后一个字符串,-2表示到倒数第二个字符串·····)

getrange k1 4 -1

1.12 setrange

覆盖一个已经存在的value(3为从第几个开始)(如果设置的值超出本身字符串的值,中间的值会用0补齐)

setrange k3 3 123

设置前:“python”
设置后:“pyt123”

1.13 strlen

查看字符串长度

strlen k3

1.14 bit命令(操作位图)

在redis中,字符串都是以2进制的方式来存取的。

例如set k1 a,a对应的ASCII码是97,97转为二进制是01100001;
BIT相关的命令就是对二进制进行操作的。

1.14.1 getbit

key对应的value在offset处的bit值

127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> getbit k1 0
(integer) 0
127.0.0.1:6379> getbit k1 1
(integer) 1
127.0.0.1:6379> getbit k1 2
(integer) 1
127.0.0.1:6379> getbit k1 3
(integer) 0
127.0.0.1:6379> getbit k1 4
(integer) 0
127.0.0.1:6379> getbit k1 5
(integer) 0
127.0.0.1:6379> getbit k1 6
(integer) 0
127.0.0.1:6379> getbit k1 7
(integer) 1

1.14.2 setbit

修改key对应的value在offset处的bit值

b对应的ASCII码是98,98转为二进制是01100010

127.0.0.1:6379> setbit k1 6 1
(integer) 0
127.0.0.1:6379> setbit k1 7 0
(integer) 1
127.0.0.1:6379> get k1
"b"

1.14.3 bitcount

统计二进制中1的个数(0到3指的是字符串的计算长度,不是二进制的计算长度)

127.0.0.1:6379> bitcount k1 0 3
(integer) 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值