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

文章目录

    • 0 环境
    • 1 前言
    • 2 string(字符串)
    • 3 string BIT命令

0 环境

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

1 前言

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

  • reids官网教程

2 string(字符串)

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

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

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

复杂度: O(1)
redis基本数据类型字符串(string)学习笔记_第1张图片

覆盖规则 相同的key赋值 后来的覆盖前来的
redis基本数据类型字符串(string)学习笔记_第2张图片
不过现在提供nx选项 只有key对应的value没有值的执行设置

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

redis基本数据类型字符串(string)学习笔记_第3张图片

redis基本数据类型字符串(string)学习笔记_第4张图片

redis基本数据类型字符串(string)学习笔记_第5张图片

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

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

时间复杂度:O(1)

redis基本数据类型字符串(string)学习笔记_第6张图片

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

复杂度:o(1)

redis基本数据类型字符串(string)学习笔记_第7张图片

getset类似:

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

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

redis基本数据类型字符串(string)学习笔记_第8张图片

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

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

redis基本数据类型字符串(string)学习笔记_第9张图片

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

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

redis基本数据类型字符串(string)学习笔记_第10张图片

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

复杂度:o(1)

redis基本数据类型字符串(string)学习笔记_第11张图片

redis基本数据类型字符串(string)学习笔记_第12张图片

  • 字符串索引

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

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

时间复杂度o(n)

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

redis基本数据类型字符串(string)学习笔记_第13张图片

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

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

redis基本数据类型字符串(string)学习笔记_第14张图片

redis基本数据类型字符串(string)学习笔记_第15张图片

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

redis基本数据类型字符串(string)学习笔记_第16张图片

redis基本数据类型字符串(string)学习笔记_第17张图片

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

redis基本数据类型字符串(string)学习笔记_第18张图片

redis基本数据类型字符串(string)学习笔记_第19张图片

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

redis基本数据类型字符串(string)学习笔记_第20张图片

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

redis基本数据类型字符串(string)学习笔记_第21张图片

DECRBY key increment

redis基本数据类型字符串(string)学习笔记_第22张图片

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

redis基本数据类型字符串(string)学习笔记_第23张图片

对于不存在的值操作

redis基本数据类型字符串(string)学习笔记_第24张图片

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

redis基本数据类型字符串(string)学习笔记_第25张图片

redis基本数据类型字符串(string)学习笔记_第26张图片

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

  • 查看key的有效期

redis基本数据类型字符串(string)学习笔记_第27张图片

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

redis基本数据类型字符串(string)学习笔记_第28张图片

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

redis基本数据类型字符串(string)学习笔记_第29张图片

3 string BIT命令

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

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

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

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

  • 例子 a(97)对应的二进制01100001
    redis基本数据类型字符串(string)学习笔记_第30张图片

你可能感兴趣的:(redis)