Redis系列-3.字符串(String)结构

Redis系列-3.字符串(String)结构

文章中可能有地方描述偏差,欢迎留言指证

  • Redis系列-3字符串String结构
    • 基本
    • 常用命令
        • 设置值
        • 获取值
        • 批量设置值
        • 批量获取值
        • 计数
    • 不常用命令
        • 追加值
        • 字符串长度
        • 设置并返回原值
        • 设置指定位置的字符
        • 获取部分字符串
    • 内部编码
    • 适合场景

1.基本

String是一种常用的redis结构,和其他编程语言中的string类似。

2.常用命令

下面所有描述里 {}都是必需参数,<>是可选参数

设置值

set {key} {value} < ex seconds> < px milliseconds> < nx|xx>
key:键的名字
value:值
ex seconds:设置秒级的过期时间
px milliseconds:设置毫秒级的过期时间
nx:当键不存在时,这条命令生效
xx:当键存在时,这条命令生效

命令成功之后会返回一个ok

获取值

get {key}

获取值,如果键不存在,会返回空(nil)

批量设置值

mset {key} {value} [key value....]

通过mset可以一次设置多条值,但在线上环境中个人不建议一次设置太多。有可能因为网络原因传输失败,或服务器因为某种原因设置失败。redis是单线程架构,只要网络不是太差,可以采用多传的方式。
如果需求是要添加多条数据,也建议用mset而不是set,这样的话可以降低网络开销。

批量获取值

mget {key} [key...]

用法同mset

计数

incr {key}

这条命令是对键做自增操作。有三种情况:
1.值不是整数,操作失败
2.值是整数,返回自增后的结果(比如以前是2,返回3)
3.键不存在,会设置一条数据为0,键名是参数key的数据,并返回结果。

除了incr命令 还有几种同类命令;

decr {key} 自减
incrby {key} {increment} 自增指定的数字
decrby {key} {decrement} 自减指定的数字
incrbyfloat {key} {increment} 自增指字的浮点数

3.不常用命令

追加值

append {key} {value}

此命令可以向字符串尾部追加值
但个人不建议直接追加,这样会导致一定的计算开销和内存管理开销。建议可以在服务器做好处理,当需要追加时,获取旧值,再直接用set添加新值,替换掉。

字符串长度

strlen {key}
返回键的长度,但如果键不是字符串会报错。其他类型也有自己的获取长度命令。此类命令不会产生遍历操作,会直接读取内部键来获取数据,时间复杂度为O(1)

设置并返回原值

getset {key} {newValue}

作用和set一样,不同的是这条命令会返回旧值

设置指定位置的字符

setrange {key} {offeset} {value}

这条命令会替换指字位置的字符
Redis系列-3.字符串(String)结构_第1张图片

如图所示,当值为一个以上字符串,会顺序向后覆盖。

获取部分字符串

getrange {key} {start} {end}

从0开始算起,end是结束的下标,返回值也包括自己
这里写图片描述
-1代表末尾 其他数据结构也是

4.内部编码

有两种:
**int:**8个字节的长整型
embstr:字节数<=39
raw:字节数>39
redis会自动按情况转换编码类型,这样的好处是在性能 空间上取得了平衡。但是要设计阶段也要考虑数据的长度,尽量避免转换。

5.适合场景

1.缓存
保存查询结果。数据源收到命令后会处理,这些处理可有很销时。如果这些处理可能是重复的,那把结果保存在redis就非常爽了。
2.计数
像视频类网站,播放量这种数据,读写量都会比大,这时用redis也是非常好的。redis内部对int做了优化,在做加减时开销相对较小。
3.共享数据
redis有时也用做分布式架构,这时类如用户信息等数据需要在多个节点之间传递。redis就非常适合这样的场景。
4.限速
当短信验证码计时这类需求时,用redis也非常好。前面设置值时有个过期时间,当查询不到键时,不就可以又发送短信了么?

你可能感兴趣的:(Redis)