Redis学习(一) —— 基本使用与原理

摘要:
Redis字符串有两种存储方法:长度非常短。以emb格式存储的字符串长度大于44。在以raw格式存储字符串长度小于1M之前,扩展采用双重策略保留100%冗余空间。当字符串长度超过1M时,仅为每个容量扩展分配1M的冗余空间。

一、数据结构

Redis学习(一) —— 基本使用与原理第1张

string

Redis字符串是可修改字符串,在内存中以字节数组形式存在。

下面是string在源码中的定义,SDS(Simple Dynamic String)

struct SDS<T> {
  T capacity; // 数组容量
  T len; // 数组长度
  byte flags; // 特殊标识位,不理睬它
  byte[] content; // 数组内容
}

Redis规定字符串的长度不超过512M。

Redis字符串的两种存储方式:

  • 长度特别短,使用emb形式存储
  • 长度超过44,使用raw形式存储

扩容策略

字符串长度小于1M之前,扩容采用加倍策略,保留100%的冗余空间。(从源码中可以看到是现有的数组长度len+设定的容量大小capacity)
字符串长度超过1M后,每次扩容只多分配1M大小的冗余空间。


sds sdscatlen(sds s, const void *t, size_t len) {
    size_t curlen = sdslen(s);  // 原字符串长度

    // 按需调整空间,如果 capacity 不够容纳追加的内容,就会重新分配字节数组并复制原字符串的内容到新数组中
    s = sdsMakeRoomFor(s,len);
    if (s == NULL) return NULL; // 内存不足
    memcpy(s+curlen, t, len);  // 追加目标字符串的内容到字节数组中
    sdssetlen(s, curlen+len); // 设置追加后的长度值
    s[curlen+len] = '

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Unity游戏开发】AssetBundle杂记--AssetBundle的二三事SVN过滤设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JAVA中获取当前执行路径

1)方式一 URI webPathTemp = Thread.currentThread().getContextClassLoader().getResource("").toURI();StringwebPath=String.valueOf(webPathTemp.getPath());webPath = webPath.substring(1,we...

java8使用parallelStream并行流造成数据丢失或下标越界异常解决方案

描述 我们先看一段使用了并行流的代码 @Test public void testStream() { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10000; i++) { li...

4_Selenium框架封装

1 封装WebDriver 封装代码编写 package com.selenium.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDr...

vb编程代码大全

数值型函数:abs(num): 返回绝对值sgn(num): num>0 1; num=0 0; num<0 -1;判断数值正负hex(num): 返回十六进制值 直接表示:&Hxx 最大8位oct(num): 返回八进制值 直接表示:&Oxx 最大8位sqr(num): 返回平方根 num>0int(num): 取整...

miaosha

1:跨域请求配置 后端Controller 添加注解 @CrossOrigin(origins = {"*"},allowCredentials = "true")前端ajax 请求添加xhrFields: { withCredentials: true } 2:跨域解决方案 1:jsonp2:cors3:node 转发4:nginx 反向代理  3:命...

LeetCode#524通过删除字母匹配到字典里最长单词-java中CompareTo方法用法以及Comparator中Compare方法返回值

import java.util.Collections; import java.util.Comparator; import java.util.List; /* 524. 通过删除字母匹配到字典里最长单词 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典...