当前位置: 首页 > news >正文

四川省建设厅招投标网站郑州做网站经开区

四川省建设厅招投标网站,郑州做网站经开区,百度推广和网站建设,设计展板排版样式SDS与C字符串的区别 二进制安全 C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外#xff0c;字符串里面不能包含空字符#xff0c;否则最先被程序读入的空字符将被误认为是字符串结尾#xff0c;这些限制使得C字符串只能保存文本数据#xff0c;而…SDS与C字符串的区别 二进制安全 C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外字符串里面不能包含空字符否则最先被程序读入的空字符将被误认为是字符串结尾这些限制使得C字符串只能保存文本数据而不能保存像图片、音频、视频、压缩文件这样的二进制数据。 虽然数据库一般用于保存文本数据但使用数据库来保存二进制数据的场景也不少见因此,为了确保Redis可以适用于各种不同的场景SDS的API都是二进制安全的(binary-safe),所有SDS API都会以处理二进制的方式来处理SDS存放在buf数组里的数据程序不会对其中的数据做任何限制、过滤、或者假设数据在写入时是什么样的它被读取时就是 什么样的。这也是将SDS的buf属性称为字节数组的原因——Redis不是用这个数组来保存字符而是用它来保存一系列二进制数据. 通过使用二进制安全的SDS而不是C字符串使得Redis不仅可以保存文本数据还可以保存任意格式的二进制数据 例子 举个例子如果有一种使用空字符来分割多个单词的特殊数据格式 如图所示那么这种格式就不能使用C字符串来保存因为C字符串所用 的函数只会识别出其中的Redis而忽略之后的Cluster 例如使用SDS来保存之前提到的特殊数据格式就没有任何问题因为 SDS使用len属性的值而不是空字符来判断字符串是否结束如图所示 兼容部分C字符串函数 虽然SDS的API都是二进制安全的但它们一样遵循C字符串以空字符结尾的惯例:这些API总会将SDS保存的数据的末尾设置为空字符并且总会在为buf数组分配空间时多分配一个字节来容纳这个空字符这是为了让那些保存文本数据的SDS可以重用一部分string.h库定义的函数 例子 举个例子,如图所示如果有一个保存文本数据的SDS值sds,那么我们就可以重用string.h/strcasecmp函数使用它来对比SDS保存的字符串和另一个C字符串: strcasecmp(sds-buf, hello world);这样Redis就不用自己专门去写一个函数来对比SDS值和C字符串值了。 与此类似还可以将一个保存文本数据的SDS作为strcat函数的第二个参数将SDS保存的字符串追加到一个C字符串的后面: strcat(c_string, sds-buf);这样Redis就不用专门编写一个将SDS字符串追加到C字符串之后的函数了。通过遵循C字符串以空字符结尾的惯例SDS可以在有需要时重用string.h函数库从而避免了不必要的代码重复 总结比较 链表 概述 链表提供了高效的节点重拍能力以及顺序性的节点访问方式并且可以通过增删节点来灵活地调整链表的长度。作为一种常用的数据结构链表内置在很多高级的变成语言里面因为Redis使用的C语言并没有内置这种数据结构所以Redis构建了自己的链表实现。链表在Redis中的应用 非常广泛比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素又或者列表中包含的元素都是比较长的字符串时Redis就会使用链表作为列表键的底层实现。 除了链表键之外发布与订阅、慢查询、监视器等功能也用到了链表Redis服务器本身还使用链表来保存多个客户端的状态信息以及使用链表来构建客户端输出缓冲区(output buffer) 例子 举个例子以下展示的integers列表键包含了从1到1024共1024个整数: integers列表键的底层实现就是一个链表链表中的每个节点都保存了一个整数值。 redis LLEN integers (integer) 1024 redis LRANGE integers 0 101) 112) 103) 74) 65) 56) 47) 38) 29) 1 10) 0链表和链表节点的实现 每个链表节点使用一个adlist.h/listNode结构来表示: typedef struct listNode {// 前置节点struct listNode *prev;// 后置节点struct listNode *next;// 节点的值void *value; }listNode;多个listNode可以通过prev和next指针组成双端链表如图 虽然仅仅使用多个listNode结构就可以组成链表但使用adlist.h/list来持有链表的话操纵起来会更方便。list结构为链表提供了表头指针head、表尾指针tail以及链表长度计数器len,而dup、free和match成员则是用于实现多态链表所需的类型特定函数: 1.dup函数用于复制链表节点所保存的值2.free函数用于释放链表节点所保存的值3.match函数则用于对比链表节点所保存的值和另一个输入值是否相等 typedef struct list {//表头节点listNode *head;// 表尾节点listNode *tail;// 链表所包含的节点数量unsigned long len;// 节点值赋值函数void *(*dup)(void *ptr);// 节点值释放函数void *(*free)(void *ptr);// 节点值对比函数int (*match)(void *ptr, void *key); }list;如图是由一个list结构和三个listNode结构组成的链表 特点总结 Redis的链表实现的特性可以总结如下: 1.双端:链表节点带有prev和next指针获取某个节点的前置节点和后置节点的复杂度都是O(1)2.无环:表头节点的prev指针和表尾节点next指针都指向NULL,对链表的访问以NULL为终点3.带有表头指针和表尾指针:通过list结构的head指针和tail指针程序获取链表的表头节点和表尾节点的复杂度为O(1)4.带链表长度计数器:程序使用list结构的len属性来对list持有的链表节点进行计数程序获取链表中节点数量的复杂度为O(1)5.多态:链表节点使用void*指针来保存节点值并且可以通过list结构的dup、free、match三个属性为节点值设置类型特定函数所以链表可以用于保存各种不同类型的值
http://www.pierceye.com/news/772699/

相关文章:

  • 旅游网站国内外研究现状微信模板素材
  • 查一下红之易道学做的什么网站全国大型网站建设
  • 网站页面可以用什么框架做wordpress 自动 图片大小
  • 百度小程序可以根据网站的要求做吗网站建设评分细则
  • 团购模板网站廉洁长沙网站
  • 湖州建设网站制作多多进宝cms网站建设
  • 自己做网站有哪些方法呢深圳网站设计张兵
  • 网站开发技术的选择wordpress 标签 中文
  • 建设速干裤移动网站公司logo注册
  • 中山网站建设找阿江欢迎页网页设计作品欣赏
  • seo是东莞企业网站排seo网站制作与管理技术...
  • 哪里有建设好的网站做网站用哪个预装系统
  • h5技术建设网站的知识wordpress+主题+欣赏
  • 如何优化网站排名淘宝客 备案 网站名称
  • 网站后台管理系统源代码沧州市宇通网站建设公司
  • 郴州网站设计公司阜新网站设计
  • 成都网站制作中国互联个人做电影网站赚钱吗
  • 如何做自己的影视网站惠州惠城网站建设
  • 温州网站推广外包推推蛙网站建设
  • 北京百度网站排名优化四川公共资源交易网招标网
  • 上海网站制作商多用户网上商城
  • 四川建设网电子招投标网站莱芜金点子电话
  • 深圳科技网站建设网站怎么做跳站
  • 做网站需要多少人全国物流货运平台
  • 温州建网站用自己的电脑做网站
  • 综合性门户网站有哪些高端网站建设 房产
  • 百度做的网站能优化吗如何在jsp上做网站页面代码
  • 广州市品牌网站建设公司营销型网站开发推广
  • 甜品网站首页设计用php做的网站模版
  • 怎样做企业的网站百度下载安装免费版