zoukankan      html  css  js  c++  java
  • redis基本数据类型字符串(string)学习笔记

    0 环境

    • 系统环境: centos7
    • 编辑器: xshell

    1 前言

    在redis中 key--> 字符串 不同的key对应的值不同 则具备不同的数据结构 5种数据结构(主指值的数据类型不同)

    2 string(字符串)

    字符串键是redis最基本的键值对类型(key-value形式 键值可以文字 图片。。) redis中的字符串是动态字符串 内部可修改(stringbuffer) 减少内存的频繁分配 当实际分配内存>现有的内存(字符串<1M 在现有空间上扩容 每次扩1M 最大512M)

    • set(为字符串键设置值)

    set给一个key赋值 实际情况 新加入的键可能会出现在数据库的任何位置上(无序)

    复杂度: O(1)

    覆盖规则 相同的key赋值 后来的覆盖前来的

    不过现在提供nx选项 只有key对应的value没有值的执行设置

    // 伪代码 只为容易理解 别钻牛角尖
    if(set.get(key)== null){
      set.get(key) = value;
    }
    

    setnx --> 输出的结果 成功1 失败0
    set key value [nx|xx] nx --> 成功 ok 失败 nil xx正好与之相反

    • get(获取字符串键的值)

    时间复杂度:O(1)

    • getset(获取旧值并设置新值)

    复杂度:o(1)

    getset类似:

    string.get(key);
    string.set(key, value);
    
    • mset(一次为多个字符串键设置值)

    时间复杂度o(n) 命令mset key value [key value...]

    • mget(一次性获取多个字符串键的值)

    时间复杂度o(n) 命令mget key[key ...]

    • msetnx(只在键不存在的时候 一次为多个字符串键设置值)

    时间复杂度o(n) 命令msetnx key value [key value...]

    // 只是为了方便理解
    list a = new arraylist();
    string.foreach(key:keys){
      if(string.get(key)!= null){
        return;
      }
      a.add(string.get(key));
    }
    
    • STRLEN(获取字符串值的字节长度)

    复杂度:o(1)

    • 字符串索引

    正数索引从0(头)开始
    负数索引从最末尾-1开始 从后往前递减 从前往后递增计算方式(-xxx.size。。。-1)

    • GETRANGE(获取字符串值索引范围的内容)

    时间复杂度o(n)

    命令GETRANGE key start end 类似数组的切片list[start:end] 类似看书 我们想获取想看的某某章节(查询) 只是展示 不影响数据本身

    • SETRANGE(对字符串值的指定索引范围进行设置)
      命令SETRANGE key index substitue 可类似substring方法 之前的set粗暴的很 一刀切 现在该命令更加精细 一线喉

    假设场景 在浴室搓背 对于有的人 角质不多 一刀切 set挺好 对于有的人 角质存在的不均匀 那么就得重点照顾了 SETRANGE就挺好 舒服(首先你得一刀切 才能知道是否需要一线喉 现有set 后有SETRANGE)

    自动扩展被修改的字符串 if old.size < new.size malloc xxx

    • APPEND(在值末尾追加新内容)
      命令APPEND key suffix 类似火车车厢最后追加车厢 若是前面车厢为空(处理不存在的键) 此刻类似set操作

    • INCR、DECR(对整数值+1 -1操作)

    • INCRBY、DECRBY(对整数值+n -n操作)
      INCRBY key increment

    DECRBY key increment

    类型限制 值限制 步长类型限制

    对于不存在的值操作

    • INCRBYFLOAT(对数字值进行浮点数+ -操作)
      INCRBYFLOAT key increment

    执行操作时 命令最多只会保留计算结果小数点后的17位数字

    • 查看key的有效期

    • 给key设置值时 顺便设置过期时间(s)

    • 给key设置值时 顺便设置过期时间(ms)

    3 string BIT命令

    在redis中 字符串以二进制的形式来存储。BIT相关命令对二进制就行操作(位操作 offset --> 可看做为步长)

    • getbit
      key对应的value 在offset处的bit值

    • setbit
      修改key对应的value在offset处的bit值

    • bitcount
      统计二进制数据中1的个数

    • 例子 a(97)对应的二进制01100001

    作者:以罗伊
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Poj 3264 Balanced Lineup RMQ模板
    Poj 3294 Life Forms (后缀数组 + 二分 + Hash)
    Poj 1743 Musical Theme (后缀数组+二分)
    Poj 2774 Long Long Message (后缀数组)
    Poj 3436 ACM Computer Factory (最大流)
    Hdu 4465 Candy (快速排列组合+概率)
    Hdu 3605 Escape (最大流 + 缩点)
    Hdu 4292 Food (最大流)
    Hdu 5416 CRB and Tree (bfs)
    Hdu 5407 CRB and Candies (找规律)
  • 原文地址:https://www.cnblogs.com/my-ordinary/p/12618244.html
Copyright © 2011-2022 走看看