redis–04–操作–String
1、简介
- String类型是最基本的数据类型,一个key对应一个value。
- String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
- String类型value最多可以是512MB
2、数据结构
- 数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。
- 是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
如图中所示
1. 内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。
2. 当字符串长度小于1M时,扩容都是加倍现有的空间,
3. 当字符串长度超过1M时,扩容时一次只会多扩1M的空间。
4. 字符串最大长度为512M。
3、操作
3. 1、set key value [ex ss] | [px sss] [nx | xx]
- ex ss:设置生命周期,单位秒
- px sss:设置生命周期,单位毫秒
- ex,px不能同时写
- nx: 表示key不存在时,执行set key操作,否则不做任何操作
- xx: 表示key存在时,执行set key操作,否则不做任何操作
127.0.0.1:6379> set userid1 1101 ex 120
OK
127.0.0.1:6379> ttl userid1
(integer) 117
127.0.0.1:6379> set userid1 1101 px 500000
OK
127.0.0.1:6379> pttl userid1
(integer) 492500
127.0.0.1:6379> set userid1 1101 px 55500 nx
(nil)
127.0.0.1:6379> set userid1 1101 px 55500 xx
OK
127.0.0.1:6379> set userid2 1101 px 55500 nx
OK
127.0.0.1:6379> keys *
1) "userid1"
2) "userid2"
3. 2、mset key1 v1 key2 v2 …
一次性设置多个键值
3. 3、mget key1 key2 …keyn
获取多个key的值
127.0.0.1:6379> mset a 1 b 2 c 3
OK
127.0.0.1:6379> mget a b c
1) "1"
2) "2"
3) "3"
3. 4、setrange key offset value
- 从字符串的offset字节处开始,替换成value
- 如果offset>字符长度, 该字符自动补0x00
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> setrange userid 2 aa
(integer) 6
127.0.0.1:6379> get userid
"11aa11"
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> setrange userid 8 bb
(integer) 10
127.0.0.1:6379> get userid
"111111\x00\x00bb"
127.0.0.1:6379>
3. 5、append key value
作用: 把value追加到key的原值上
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> append userid 222
(integer) 9
127.0.0.1:6379> get userid
"111111222"
3. 6、getrange key start stop
- 是获取字符串中 [start, stop]范围的值
- 对于字符串的下标,左数从0开始,右数从-1开始
- start>=length, 则返回空字符串
- stop>=length,则截取至字符结尾
- start >stop, 返回空字符串
127.0.0.1:6379> set userid 123456
OK
127.0.0.1:6379> getrange userid 0 2
"123"
127.0.0.1:6379> getrange userid -3 -1
"456"
127.0.0.1:6379> getrange userid 0 -1
"123456"
3. 7、getset key newvalue
- 设置新值,返回旧值
- 相当于先做get操作,后做set操作
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> getset userid 222222
"111111"
127.0.0.1:6379> get userid
"222222"
3. 8、incr key
- 指定的key的值加1,并返回加1后的值
- 注意:范围为64位有符号
---不存在的key当成0,再incr操作
127.0.0.1:6379> incr aa
(integer) 1
127.0.0.1:6379> get aa
"1"
--incr key操作
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> incr userid
(integer) 111112
3. 9、incrby key n
- 指定的key的值加n,并返回加n后的值
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> incrby userid 10
(integer) 111121
3. 10、incrbyfloat key floatnumber
指定的key的值加floatnumber,并返回加floatnumber后的值
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> incrbyfloat userid 5.5
"111116.5"
3. 11、decr key
指定的key的值减1,并返回减1后的值
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> decr userid
(integer) 111110
3. 12、decrby key n
指定的key的值减n,并返回减n后的值
127.0.0.1:6379> set userid 111111
OK
127.0.0.1:6379> decrby userid 11
(integer) 111100
3. 13、getbit key offset
- 从值的二进制表示,返回对应offset位上的值(从左到右)
- 例如:A的二进制是0100 0001
3. 以字符A为案例
A的二进制是0100 0001
127.0.0.1:6379> set char A
OK
127.0.0.1:6379> getbit char 0
(integer) 0
127.0.0.1:6379> getbit char 1
(integer) 1
127.0.0.1:6379> getbit char 2
(integer) 0
127.0.0.1:6379> getbit char 3
(integer) 0
3. 14、setbit key offset value
- 设置offset对应二进制位上的值为value,返回该位上的旧值
- 注意:
- 如果offset过大,则会在中间填充0,
- offset最大2^32-1,最大的的字符串为512M
3. 以字符A为案例
A的二进制是0100 0001
127.0.0.1:6379> set char A
OK
127.0.0.1:6379> setbit char 2 1
(integer) 0
127.0.0.1:6379> get char
"a"
3. 15、bitop operation destkey key1 [key2 …]
- 对key1,key2…keyN作operation,并将结果保存到 destkey 上。
- operation 可以是
- AND:与
- OR:或
- NOT:非
- 对于NOT操作, key不能多个
- XOR:异或
3. 设置一个userid1 的二进制位0010 0000
127.0.0.1:6379> setbit userid1 7 0
(integer) 0
127.0.0.1:6379> setbit userid1 2 1
(integer) 0
3. 设置一userid2为A对应的二进制位0100 0001
127.0.0.1:6379> set userid2 A
OK
3. 对userid1和userid2做or操作
127.0.0.1:6379> bitop or return userid1 userid2
(integer) 1
127.0.0.1:6379> get return
"a"
0010 0000
or
0100 0001
----------
0110 0001
97="a"
3. 16、strlen key
- 返回键值长度
- 如果键不存在,返回0
127.0.0.1:6379> set a 1111
OK
127.0.0.1:6379> strlen a
(integer) 4
127.0.0.1:6379>
3. 17、setnx key value
只有在 key 不存在时,才执行set操作
127.0.0.1:6379> setnx k1 v1
(integer) 1
127.0.0.1:6379> setnx k1 v1
(integer) 0
127.0.0.1:6379>
3. 18、msetnx key1 value1 key2 value2 …
- 设置一个或多个 key-value 对,
- 当且仅当所有给定 key 都不存在,才执行msetnx操作
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3
(integer) 0
127.0.0.1:6379> msetnx k11 v11 k21 v21 k31 v31
(integer) 1
127.0.0.1:6379>
3. 19、setex key 过期时间 value
设置键值的同时,设置过期时间,单位秒。
127.0.0.1:6379> setex k1 10 v1
OK
127.0.0.1:6379>