redis基本数据类型字符串(string)学习笔记

231 阅读4分钟

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