Redis知识整理(三) -- String类型

本文详细介绍了Redis中的String类型,包括字符型和数值型操作,如set的NX与XX、mset/mget、APPEND、GETRANGE、SETRANGE和STRLEN等。此外,还深入探讨了String作为数值型时的INCR系列命令及编码类型。进一步讲解了Redis的二进制安全性,并介绍了String类型的Bitmap特性,如setbit、bitpos、bitcount和Bitop位运算的实际应用,如用户登录状态统计和活跃用户分析。
摘要由CSDN通过智能技术生成

Redis知识整理(三)

String类型 – 字符型

set的NX与XX

  • NX
    • If Not Exist
    • 如果不存在这个key则设置这个key的值为value
    • 一般用于分布式锁,多个client获取一个连接
    • 用于创建
  • XX
    • if Exist
    • 只有存在这个key才可以操作
    • 用于更新
  • 下图中 k1对应的value为hello k2不存在

在这里插入图片描述

mset与mget

  • 批量处理
  • 一次set多个kv,一次获取多个k值
> mset k3 a k4 b
> mget k3 k4

APPEND拼接

  • 拼接字符串到后面

GETRANGE获取部分

  • 获取字符串的部分字符

在这里插入图片描述

SETRANGE覆盖部分

  • 覆盖字符串的部分内容 从start开始,一直覆盖到value值的结束

在这里插入图片描述

STRLEN查询长度

  • 查询key对应的长度

String类型 – 数值型

Type命令

查看key对应的value类型

OBJECT encoding命令

三种类型

  • esbstr
  • raw
  • int

其中esbstr字符串长度达到一定限制会变成raw

类型之间可以相互转换

在这里插入图片描述

查看key对应的value编码

>set k1 99
>set k2 hello
>type k1 
"string"
>type k2
"string"
> OBJECT encoding k1
"int"
> OBJECT encoding k2
"embstr"

INCR加1

  • 对“int”类型的数加一

INCRBY累加

  • 对“int”类型的数加多个

DECR减一

DECRBY累减

INCRBYFLOAT加小数

>INCR k1
(integer) 100
>get k1
"100"
>INCRBY k1 22
(integer) 122


>DECR k1
(integer) 121
>get k1
"121"
>DECRBY k1 21
(integer) 100

Redis的二进制安全

使用字节流而不是字符流

数值计算时会把字节拿出来,计算后将encoding置为raw

根据不同的编码,设置中文的STRLEN是不一样的

K2是UTF-8 K3是GBK

在这里插入图片描述

redis是二进制安全的

与redis交互的时候传递的都是字节数组

encoding存在的意义是可以加速

  • 如果当前类型是esbstr,数值类型计算会直接报错
  • 如果当前类型是int,则直接计算
  • 如果当前类型是raw,会先判断是否可以计算

所以同样会带来一个问题:

使用redis存储字符时,必须提前约定好编解码的字符集

String类型 – bitmap

setbit设置偏移

setbit key offset value

设置key对应的偏移值

>setbit k1 1 1
0
>STRLEN k1
1
>get k1
@
>setbit k1 7 1
0
>STRLEN k1
1
>get k1
A
>setbit k1 9 1
0
>STRLEN k1
2
>get k1
A@

#ASCII码显示

bitpos查看偏移量

bitpos key bit [start] [end]

key对应的value的bit位图中的第几位中第一个的bit值

返回的是在bit在二进制位中的位置,而不是对应的字节中的位置

>bitpos k1 1 0 0 
1
>bitpos k1 1 1 1
9

bitcount查看位出现的次数

统计单位字节内1出现的次数

>BITCOUNT k1 0 1
3
>BITCOUNT k1 0 0
2
>BITCOUNT k1 1 1
1

Bitop位运算

BITOP operation destkey key [key…]

operation值的是位运算

  • and
  • or
# 提前准备好k1的值 0100 0001 ----> A
# 提前准备好k2的值 0100 0010 ----> B
> bitop and andkey k1 k2
(integer)1
> get andkey
"@"
# andkey的值 0100 0000


> bitop or orkey k1 k2
(integer)1
> get orkey
"C"
# orkey的值 0100 0011

BitMap实际应用

统计用户登陆情况

以userId为key,给400位用来记录每一天是否登陆,登陆为1,不登陆为0

> setbit zhangsan 1 1
> setbit zhangsan 7 1
> setbit zhangsan 364 1
# 一共64个字节 足够
> STRLEN zhangsan
(integer) 64
# 统计最后两个字节 16天内的登陆情况
> BITCOUNT zhangsan -2 -1
(integer) 1

占用空间小,二进制运算速度快

活跃用户统计

以日期为key,以userId映射到偏移位,登陆为1,未登陆为0

> setbit 20210802 1 1
> setbit 20210803 1 1 
> setbit 20210803 7 1
# 进行或运算 登陆一天即为活跃用户
> bitop or destkey 20210802 20210803
# 计算活跃用户数 二进制或运算 天然去重
> BITCOUNT destkey 0 -1
(integer) 2

知识整理

正反向索引

  • 元素是既有正向索引也有反向索引
  • 0 1 2 对应 0 -2 -1
    在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值