广告
返回顶部
首页 > 资讯 > 数据库 >Redis中怎么实现字符串类型
  • 791
分享到

Redis中怎么实现字符串类型

2024-04-02 19:04:59 791人浏览 薄情痞子
摘要

Redis中怎么实现字符串类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Redis是一个基于键-值存储的数据库。Redis中使用字符串作为

Redis中怎么实现字符串类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Redis是一个基于键-值存储的数据库。Redis中使用字符串作为它的键,同时字符串也是“值”所使用的最基本的数据类型。当然还有更复杂的类型,比如:列表,集合,有序集合以及哈希表,不过即使是这些复杂的类型也是使用字符串来实现的。

Redis内部实现了自己的字符串类型。实现的细节包含在sds.c文件中(sds即为SimpleDynamicStrings)。

structsdshdr{

longlen;

longfree;

charbuf[];

};

buf存放的实际的字符串

len字段存放了buff的长度。这个字段使得Redis取字符串长度的操作复杂度为O(1)。

free字段存放了buff中剩余的空间。

len和free字段可以看成是保存了buf字符串数组的元信息。

Redis内部怎么实现字符串类型

新建Redis字符串

在sds.h中定义了一种新的叫做sds的数据类型,其实就是字符串指针:

typedefchar*sds;

在sds.c中定义了新建Redis字符串指针的函数sdsnewslen:

sdssdsnewlen(constvoid*init,size_tinitlen){

structsdshdr*sh;

sh=zmalloc(sizeof(structsdshdr)+initlen+1);

#ifdefSDS_ABORT_ON_OOM

if(sh==NULL)sdsOomAbort();

#else

if(sh==NULL)returnNULL;

#endif

sh->len=initlen;

sh->free=0;

if(initlen){

if(init)memcpy(sh->buf,init,initlen);

elsememset(sh->buf,0,initlen);

}

sh->buf[initlen]='\0';

return(char*)sh->buf;

}

上边说过Redis字符串是structsdshdr类型的。但是sdsnewlen函数返回的却是一个字符串指针!!

这只是个小技巧,这里解释一下,假设我们如下用sdsnewlen函数新建一个Redis字符串:

sdsnewlen("redis",5);

这个函数新建了一个structsdshdr类型的变量,同时为len,free和buf字段分配了空间。分配空间的代码如下:

sh=zmalloc(sizeof(structsdshdr)+initlen+1);//initlenislengthofinitargument.

sdsnewlen成功返回之后,得到的Redis字符串大致是这个样子的:

-----------

|5|0|redis|

-----------

^^

shsh->buf

sdsnewlen函数返回给调用者的是sh->buf。

那么如果当你想释放sh所指向的Redis字符串所占用的空间时,该怎么办呢?

此时你想要的是一个指向sh的指针,而你得到的却是指向sh->buf的指针。

那么你能够从指向sh->buf的指针得到指向sh的指针吗?

是的,不过是指针运算而已。注意上边那个内存示意图,当我们从sh->buf的地址减去两个long型长度之后就得到了sh的地址。

而且巧合的是两个long型的长度加起来正好是structsdshdr的长度。(注:将buf声明为charbuf[],是一个针对可变长结构体普遍使用的编程技巧。)

我们来看一下sdslen函数是如何做的:

size_tsdslen(constsdss){

structsdshdr*sh=(void*)(s-(sizeof(structsdshdr)));

returnsh->len;

}

看完上述内容,你们掌握Redis中怎么实现字符串类型的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: Redis中怎么实现字符串类型

本文链接: https://www.lsjlt.com/news/56142.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis中怎么实现字符串类型
    Redis中怎么实现字符串类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Redis是一个基于键-值存储的数据库。Redis中使用字符串作为...
    99+
    2022-10-18
  • Redis字符串类型
        字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。一个字符串类型键允许存储的数据的最大容量是512MB。字符...
    99+
    2022-10-18
  • Redis字符串类型的操作
    set key value [ex 秒数] / [px 毫秒数] [nx] /[xx] 如: set a 1 ex 10 , 10秒有效Set a 1 px 9000 , 9秒有效注: 如果ex,p...
    99+
    2022-10-18
  • Redis字符串类型的应用场景
    这篇文章运用了实例代码展示Redis字符串类型的几种应用场景,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。限流使用redis可以做到限流的作用。redis本身性能极高,可以用它来抵挡部分...
    99+
    2022-10-18
  • redis字符串类型的示例分析
    这篇文章主要介绍redis字符串类型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数...
    99+
    2022-10-18
  • Golang字符串转time类型实现
    目录前言时区使用前言 由于数据库的类型为Data 类型,所以插入数据库的时候我先把前端传入的string类型的时间转为Time 再插入。 Go 提供了两种插入的方式,即time.Pa...
    99+
    2023-03-08
    Golang 字符串转time
  • php如何实现字符串类型数字转数字类型
    这篇文章主要为大家展示了“php如何实现字符串类型数字转数字类型”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php如何实现字符串类型数字转数字类型”这篇文章吧...
    99+
    2022-10-19
  • python怎么判断字符串类型
    在Python中,可以使用type()函数来判断字符串的类型。例如:```pythonstring1 = "Hello, world...
    99+
    2023-09-16
    python
  • mysql怎么转换字符串类型
    mysql转换字符串类型的案例:例如:MySQL字符串的‘123’转换为数字的123,方法如下:SELECT CAST('123' AS SIGNED);SELECT CONVERT(...
    99+
    2022-10-10
  • Golang字符串怎么转time类型
    这篇文章主要讲解了“Golang字符串怎么转time类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang字符串怎么转time类型”吧!前言由于数据库的类型为Data 类型,所以插入...
    99+
    2023-07-05
  • MySQL数据类型--------字符串类型实战
    1. 背景  * MySQL支持的字符串类型有CHAR、VARCHAR、二进制、var二进制、BLOB、文本等等。2. 字符串类型所需的存储和值范围类型说明N的含义是否有字符集最大长度C...
    99+
    2022-10-18
  • 怎么在javascript中转换字符串类型
    今天就跟大家聊聊有关怎么在javascript中转换字符串类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript的特点1.JavaScript主要用来向HTML页面添...
    99+
    2023-06-14
  • Redis字符串类型的常用命令小结
    Redis字符串类型 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串...
    99+
    2022-06-04
    小结 字符串 类型
  • php中怎么将数字字符串转化数字类型
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php中将数字字符串转化数字类型方法一:使用intval()函数转为整数类型intval():用于获取变量的整数值;<php header("Conte...
    99+
    2019-09-12
    php 字符串转数字
  • php怎么把数字转为字符串类型
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php把数字转为字符串类型方法1:在要转换的数字变量之前加上用括号括起来的目标类型“(string)”使用在变量之前加上用括号括起来的目标类型,可以将指定变量强制转换为...
    99+
    2014-11-15
    php 数字 字符串 数据类型转换
  • redis怎么去重字符串
    redis去重字符串的示例:基于Redis实现Bloomfilter去重,代码如下:# encoding=utf-8importredisfromhashlibimportmd5classSimpleHash(object):def__in...
    99+
    2022-10-20
  • Redis 字符串实现:简单动态字符串-SDS与C字符串的区别
    2.1 SDS的定义 struct { //buf中已使用的字节数,等于SDS所保存字符串的长度 int len; //buf中未使用的字节长度 int free; //字节数组,用于保存...
    99+
    2020-09-07
    Redis 字符串实现:简单动态字符串-SDS与C字符串的区别
  • C#怎么实现字符串包含字符串
    本文小编为大家详细介绍“C#怎么实现字符串包含字符串”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么实现字符串包含字符串”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实例using System...
    99+
    2023-06-17
  • php怎么将数据类型转换为字符串类型
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php将数据类型转换为字符串类型方法1:使用strval()函数strval() 函数用于获取变量的字符串值。<php $num=3.21; var_dump($...
    99+
    2021-11-24
    php 数据类型转换 字符串类型
  • php怎么将字符串转为integer类型
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php将字符串转为integer类型方法1:使用intval()函数intval():用于获取变量的整数值;示例:<php header("Conten...
    99+
    2020-12-28
    php 字符串 integer类型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作