zoukankan      html  css  js  c++  java
  • redis数据结构操作--字符串类型操作

    ---redis 数据结构操作

    ---字符串类型操作

    set 设置的就是字符串类型的 变量

    set key value [ex 秒数] / [px 毫秒数] [nx][xx]

    --举例
    set a 1 ex 10 ---10秒有效期

    set a 1 px 9000 ---有效期 9000毫秒 =9秒

    --ex px 不能同时写;否则 以 后面有效期为准

    例如:
    set a 1 ex 100 px 9000 实际上有效期 9000毫秒

    nx :表示 key 不存在的时候执行操作--相当于新建
    xx :表示 key 存在的时候,执行操作---相当于修改


    flushdb ---冲刷db 则这个db 的所有key 全部没了;

    keys * ---返回空


    set site www.zixue.it ---默认永久有效

    ttl site ---返回结果 -1

    set search www.baidu.com ex 10 px 1567 ---因为 ex px 同事使用;所以 以 px 为准,生命周期 1567 毫秒
    get search ---发现返回 空
    ttl search ---返回 -1 ---说明 1567 毫秒 时间太短;get 的时候直接 过期了

    ----换一个大一点的值

    set search www.baidu.com ex 10 px 6567

    get search --返回结果 www.baidu.com
    pttl search ---返回还剩下 2528毫秒


    ---
    flushdb ---冲刷db

    set site www.zixue.it

    set site www.baidu.com nx ---表示 site 不存在的时候,在做修改操作,存在则修改失败---由于已存在,返回失败 nil

    get site
    www.zixue.it


    set site www.google.com xx ----表示必须存在site 才能做修改,由于site 存在,返回结果 OK

    get site
    www.google.com

    ---
    set abc www.google.com xx ----因为abc 本身不存在,所以返回 nil

    ---一次设置多个值 mset
    mset a aman b bold c controller d diamond

    keys * ---显示
    a
    d
    b
    c
    site

    ---分别查看 z b c d 值
    get a
    get b
    ...

    ---mget 一次 查询(获取)多个 键值
    mget a b c d

    --setrange key offset value
    --把 offset 偏移字节改成 value

    例如: site 值
    hell this is


    偏移量从 0 开始 假如,指针指向 t 和 h 中间;则 offset 变更 h 后面的值

    setrange site 5 xyz

    get site --返回结果 hell txyz is ---把 his 换成了 xyz


    flushdb

    set world hell

    get world --返回hell

    setrange world 2 ??

    get world ---返回结果 wor??

    ---假如 offset 偏移量大于 world 全部字符的个数,会发生什么情况呢?
    假如 5个人字符,一下子便宜到 10个字符,那中间的几个字符怎么办?使用 x00填充

    即:如果偏移量>字符长度 ,该字符 自动补 0x00

    --测试

    set world hello

    setrange world 6 !
    get world --返回结果 hellox00!


    --append key value --把 value 追加到key 原值上

    append world @@

    get world --返回:hellox00!@@

    ---获取key 一小部分值 获取字符串中 [start stop] 范围值
    getrange key start stop

    --注意:对于字符串的下标,从左数 0开始 ,右数 -1 开始

    set area chiness

    getrange area 1 4 ---返回结果 hine

    --假如不知道单词有多长,我就想获取倒数 第几个,怎么办呢?

    set status working --想去掉 ing


    getrange status 0 -4 --返回结果 work


    ---假如 start 比 stop 值还大,怎么办呢?

    getrange status 6 3 ---返回 空 ""

    ---假如 stop 比 实际字符串 大很多

    即:
    1.start > length 则返回空字符串
    2.stop > length 则 截取 到字符尾
    3.如果 start 所处位置在 stop 右边,返回空字符串


    ---getset 获取就值的同时设置新值

    set status sleep
    getset status wakeup ---返回值 sleep

    get status --返回 wakeup

    getset status working ---返回 wakeup


    ---inc dec

    set age 29

    get age --返回29

    --长一岁
    incr age ----返回结果 30

    --降一岁
    decr age ---返回 29

    ---秒杀,抢票这类的工作

    --10W 手机,约等于 10W 订单,先拿到资格

    set num 100000

    derc num ---返回99999

    ----不想 一岁一岁涨 ,假如想一下子涨5岁

    incrby age 5 ---返回结果 34

    incrby age 5 ---返回结果 39

    decrby age 10 ---一下子降10岁

    incrbyfloat --浮点数增加

    incrbyfloat age 0.5 ---返回结果29.5 岁

    decybyfloat age 1.5 ---返回 28岁

    ---在位上做操作??

    给定字母 可能是 A--Z
    但是具体是谁不知道,如何把他们变成 小写字母

    set char A
    get char ---返回A

    set char a
    get char ---返回小写a

    ---ascli 码表 中
    A 的值 65 转换成 二进制 64+1 即: 0100 0001 如果从 位的角度看,一个字节 8个位

    a 的值 97 转换成 二进制 98+1 即: 0110 0001

    --同理
    B 66 B 和 b 差了 32个
    b 98

    --大小写之间来回转换,通过 位 操作 达到效果

    setbit key offset value

    设置 offset 对应二进制位上的值
    返回:改位上的旧值

    注意:
    1.如果 offset 过大,则会在中间填充 0
    2.offset 最大大到多少?

    ---举例:
    set char A

    等于把 :0100 0001 偏移量是 2 的位 上的0 改成 1 0110 0001

    setbit char 2 1 ---返回 0

    get char ---返回结果 小a

    ---同理,小写变成 大写

    setbit char 2 0 ---返回1
    get char ---返回结果 A


    ---offset 这个值最大能大到多少???

    假设可以大到N
    调 max offset N

    意味着 valus 一共有 n+1 个位
    意味着 (n+1)/8 个字节

    ---可以推算出字符串 的值是多大?

    ---2 的 32次方 4294967296

    setbit char 4294967296 1 ---返回报错 (error) ERR bit offset is not an integer or out of range --值超出范围了

    ---把值改小一点

    setbit char 4294967295 1 ---返回 0 表示设置成功

    即:最大值能达到 2的 32次方-1 =4294967295
    ---得出字符串最大长度:
    2^32*2^-3 =2^29 =10+10+9 K-M, 512M

    总结:redis 设置字符串变量的时候得到的最大值 512M
    offset 最大 2^32-1 即可以推出最大的字符串 512M

    释放内存
    flushdb

    ---bitop 作用:让两个 key 做相应的位上的:and or not xor

    0010 0000

    setbit upper 2 1

    get upper ---返回 " " 也不知道是啥

    setbit lower 2 1 ---返回 0 谁跟这个 值 and or 谁变成 小写

    set char Q

    ---让上面两个做 位上的 碰撞

    bitop or char char lower ---返回1
    ---操作结果放在 char 上(第一个char 是)

    get char ---返回小写 q

    ---可以尝试 1101 1111 ---碰到谁 跟谁 and 一下 ???

  • 相关阅读:
    Httprunner生成Allure格式HTML报告
    Go语言编写单元测试用例
    dotnet 在 UOS 国产系统上安装 dotnet sdk 的方法
    dotnet 在国产 UOS 系统利用 dotnet tool 工具做文件传输
    webpack丑化插件
    webpack自动生成html
    webpack vue
    webpack vue
    HO引擎近况20210225
    常用十大算法(三)— 动态规划算法
  • 原文地址:https://www.cnblogs.com/ss-33/p/11193705.html
Copyright © 2011-2022 走看看