redis字符串数据结构的操作

redis字符串类型

  • 最大不能超过512MB
  • 包括字符串,数字,json,二进制

字符串相关操作

1.设置值

1)set

set key value [ex seconds] [px milliseconds] [nx|xx]

  • ex seconds:设置秒级过期时间
  • px milliseconds:设置毫秒级过期时间
  • nx:键必须不存在才可以设置成功,用于添加
  • xx:键必须存在才可以设置成功,用于更新
127.0.0.1:6379> set hello word
OK

127.0.0.1:6379> set key1 hello ex 10 xx
(nil)

127.0.0.1:6379> set key1 hello ex 10 nx
OK

2)setex

setex key seconds value

  • 指定的key设置值及过期时间,已存在则会替换旧的值
  • 原子性操作,关联值和设置生存时间两个动作会在同一时间内完成
127.0.0.1:6379> setex product 3600 friut
OK

3)setnx

setnx key value

  • set if not exists,指定key不存在时,为key设置指定值
  • 设置成返回1,失败返回0
127.0.0.1:6379> setnx tmp temp
(integer) 1

127.0.0.1:6379> setnx hello word
(integer) 0

4)mset

mset key value [key value …]

  • 批量设置值
127.0.0.1:6379> mset a 1 b 2 c 3
OK

5)setrange

setrange key offeset value

  • 设置指定位置的字符
  • 下标从0开始
  • 结果返回字符串的个数
127.0.0.1:6379> set user_name zhangsan
OK

127.0.0.1:6379> setrange user_name 0 c
(integer) 8

127.0.0.1:6379> get user_name
"changsan"

2.获取值

1)get

get key

  • 不存在返回nil
  • n次get时间=n次网络时间+n次命令时间
127.0.0.1:6379> get hello
"word"

127.0.0.1:6379> get key1
(nil)

2)mget

mget key [key …]

  • 批量获取值,可提高开发效率
  • n次get时间=1次网络时间+n次命令时间
  • 批量get的次数不能过多(50以内),可能造成redis阻塞或网络拥塞等性能影响
  • 返回给定key值的列表,不存在key返回nil
127.0.0.1:6379> mget a b c hello
1) "1"
2) "2"
3) "3"
4) "word"

3)getrange

getrange key start end

  • 获取部分字符串
  • start:开始偏移量
  • end:结束偏移量
  • 偏移量从0开始计算
127.0.0.1:6379> set user_name zhangsan
OK

127.0.0.1:6379> getrange user_name 5 8
"san"

4)getset

getset key value

  • 设置并返回原值
  • 不存在,则返回nil
  • 存在,则返回原来的值的,并且将value值更新
127.0.0.1:6379> getset aa "hello word"
(nil)

127.0.0.1:6379> getset hello redis
"word"

127.0.0.1:6379> get hello
"redis"

3.计数
1)incr

incr key

  • 数值增加1
  • 值不是整数,返回错误
  • 值是整数,返回自增后的结果
  • 键不存在,按照值为0自增,返回结果为1
127.0.0.1:6379> set age 17
OK

127.0.0.1:6379> incr age
(integer) 18

2)incrby

incrby key incr_amount

  • 数值加上指定增量值
127.0.0.1:6379> incrby age 10
(integer) 27

3)decr

decr key

  • 数字值减少1
127.0.0.1:6379> decr age
(integer) 17

4)decrby

decrby key decr_amount

  • 给指定数值减少指定数值
decrby age 5
(integer) 22

4.追加值

append key value

  • 向字符串尾部追加值
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> append hello 2021
(integer) 9
127.0.0.1:6379> get hello

5.查询字符串长度

strlen key

  • 中文占3个的字节
127.0.0.1:6379> strlen hello
(integer) 4

6.字符串类型命令时间复杂度

命令 时间复杂度
set O(1)
get O(1)
del O(k)
mset O(k)
mget O(k)
incr O(1)
decr O(1)
incrby O(1)
decrby O(1)
incrbyfloat O(1)
append O(1)
strlen O(1)
setrange O(1)
getrange O(n),n字符串长度,若字符串较短等同O(1)

mget性能测试:https://blog.csdn.net/Jinlu_npu/article/details/79744689

猜你喜欢

转载自blog.csdn.net/weixin_44375561/article/details/121820919