Redis指令详解-string val相关指令

本文详细介绍了Redis中与String值相关的指令,将String值视为bit数据、数字和字符串进行操作。内容涵盖BITCOUNT、BITFIELD等位操作指令,DECR、INCR等数字操作,以及SET、GET、APPEND等字符串操作,讨论了这些指令在实时指标计算、排它锁、计数器和限流器等场景的应用。
摘要由CSDN通过智能技术生成

目录

目标

将val视为bit数据

BITCOUNT

BITFIELD

    bit顺序

    子命令

    类型

    offset

    OVERFLOW溢出

性能

BITOP

BITPOS

SETBIT

GETBIT key offset

将val视为数字

DECR key

INCR key

    场景

INCRBY key increment

INCRBYFLOAT

DECRBY key decrement

将val视为字符串

SET

    选项

    排它锁

GET key

APPEND

SETRANGE

    场景:高效的随机访问string数组

GETRANGE

STRLEN key

GETSET key value

MGET

MSET

MSETNX

PSETEX

SETEX

SETNX


目标

列举redis中与string val相关的指令,将指令分为bit、string、数字3组,包括作用、使用时需要注意的地方等。可用于高效计算实时指标、排它锁、计数器、限制器。

将val视为bit数据

BITCOUNT

BITCOUNT key [startCharIndex endCharIndex]
    O(N)
    将String val视为bit数组形式,返回bit为1的bit数量,即群体统计,可指定字符index范围,index为0表示第一个字符,index为-1表示最后一个字符

BITFIELD

BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
    since 3.2
     O(1) 
    将key对应string val视为bit数组,使用offset(based-0)和特定bit宽度确定field且进行操作,支持在一个命令中对多个field执行不同的操作。如从位偏移1000开始,对5位的无符号整数进行读取、设置、增加、减少并可设置上溢下溢行为。
    为什么提供该指令
        出于高效使用内存的目的,可以将很多小整数存储在一个大bitmap中,这样也避免出现大批key。


    bit顺序

  •         offset是从左向右计数,左侧第一个bit为offset-0.
  •         offset和宽度确定field后,该field左为高位,右为低位。

    子命令

  •         GET <type> <offset> -- 返回特定宽度的 bit field
  •         SET <type> <offset> <value> -- 设置特定宽度 bit field,返回旧数据.
  •         INCRBY <type> <offset> <increment> --针对特定宽度bit field进行增加或减少操作,返回最新数据.
  •         OVERFLOW [WRAP|SAT|FAIL] 仅对紧跟其后的一个INCRBY子命令其作用,指定溢出的处理方式

    类型

  •         使用i表示有符号整数,u表示无符号整数,后边使用数字表示占用bit位数,如i6 6bit有符号整数,u2 2bit无符号整数。
  •         redis仅支持最多64bit有符号整数,最多63bit无符号整数(redis无法复制64bit无符号整数).

    offset

  •         无前缀整数,表示based-0的bit偏移量,如1000,表示偏移量为1000的bit
  •         前缀#,表示offset=bit宽度乘以#后的数字, i8 #0 表示offset=8*0, i8 #i表示offset=8*1。当使用string val的存储整数数组数据时,可以使用该方式#后为元素index。

    OVERFLOW溢出

        允许用户针对增加或减少操作,选择溢出的处理方式
        wrap 环绕式,默认方式
            无符号整数,对溢出进行取模处理,如u2最大整数个数为2^2=4,当前数据为3,则加1后为4,溢出采用4%4,则结果为0
            有符号整数,对溢出的处理为在正max和负min之间变化,如i8,当前为正max127,加1后变为负min-128,之后再加1,变为正max127
        SAT 饱和式
            当增加时,上限为正max,如i8当前120,加10,结果为上限127,继续增加结果不变
            当减少时,下限为负min
        FAIL 操作失败式
            溢出时不对数据进行任何操作,仅返回NULL以告知client发生溢出
        每个overflow命令仅对紧跟overflow之后一个increby命令起作用,未指定overflow,则默认使用wrap方式。
        举例
            > BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
1) (integer) 1
2) (integer) 1
> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
1) (integer) 2
2) (integer) 2
> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
1) (integer) 3
2) (integer) 3
> BITFIELD mykey incrby u2 100 1 OVERFLOW SAT incrby u2 102 1
1) (integer) 0 // 第一个inc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值