对比 Redis 的字符串和散列

更新日期: 2019-07-19 阅读: 2.4k 标签: 字符串

本章从开头到现在, 陆续介绍了 HSET 、 HSETNX 、 HGET 、 HINCRBY 和 HINCRBYFLOAT 等多个散列命令, 如果读者对上一章介绍过的字符串命令还有印象的话, 那么应该会记得, 字符串也有类似的 SET 、 SETNX 、 GET 、 INCRBY 和 INCRBYFLOAT 命令。 这种相似并不是巧合, 正如表 3-1 所示, 散列的确拥有很多与字符串命令功能相似的命令。

表 3-1 字符串命令与类似的散列命令

字符串

散列

SET —— 为一个字符串键设置值。

HSET —— 为散列的给定字段设置值。

SETNX —— 仅在字符串键不存在的情况下为它设置值。

HSETNX —— 仅在散列不包含指定字段的情况下,为它设置值。

GET —— 获取字符串键的值。

HGET —— 从散列里面获取给定字段的值。

STRLEN —— 获取字符串值的字节长度。

HSTRLEN —— 获取给定字段值的字节长度。

INCRBY —— 对字符串键储存的数字值执行整数加法操作。

HINCRBY —— 对字段储存的数字值执行整数加法操作。

INCRBYFLOAT —— 对字符串键储存的数字值执行浮点数加法操作。

HINCRBYFLOAT —— 对字段储存的数字值执行浮点数加法操作。

MSET —— 一次为多个字符串键设置值。

HMSET —— 一次为散列的多个字段设置值。

MGET —— 一次获取多个字符串键的值。

HMGET —— 一次获取散列中多个字段的值。

EXISTS —— 检查给定的键是否存在于数据库当中, 这个命令可以用于包括字符串键在内的所有数据库键, 本书稍后将在《数据库》一章对这个命令进行详细的介绍。

HEXISTS —— 检查给定字段是否存在于散列当中。

DEL —— 从数据库里面删除指定的键, 这个命令可以用于包括字符串键在内的所有数据库键, 本书稍后将在《数据库》一章对这个命令进行详细的介绍。

HDEL —— 从散列中删除给定字段,以及它的值。

对于表中列出的字符串命令和散列命令来说, 它们之间的最大区别就是前者处理的是字符串键, 而后者处理的则是散列键, 除此之外, 这些命令要做的事情几乎都是相同的。

Redis 之所以会选择同时提供字符串键和散列键这两种数据结构, 原因在于它们虽然在操作上非常相似, 但是各自却又拥有不同的优点, 这使得它们在某些场合无法被对方替代。

表 3-2 从资源占用、支持的操作以及过期时间三个方面对比了字符串键和散列键的优缺点。

表 3-2 对比字符串键和散列键

比较的范畴

结果

资源占用

字符串键在数量较多的情况下,将占用大量的内存和 CPU 时间。 与此相反,将多个数据项储存到同一个散列里面可以有效地减少内存和 CPU 消耗。

支持的操作

散列键支持的所有命令,几乎都有相应的字符串键版本,但字符串键支持的 SETRANGE 、 GETRANGE 等操作散列键并不具备。

过期时间

字符串键可以为每个键单独设置过期时间,独立删除某个数据项;而散列一旦到期,它包含的所有字段和值都会被删除。

既然字符串键和散列键各有优点, 那么我们在构建应用程序的时候, 什么时候应该使用字符串键, 而什么时候又应该使用散列键呢? 对于这个问题, 以下总结了一些选择的条件和方法:

  1. 如果程序需要为每个数据项单独设置过期时间, 那么使用字符串键。

  2. 如果程序需要对数据项执行诸如 SETRANGE 、 GETRANGE 或者 APPEND 等操作, 那么优先考虑使用字符串键。 当然, 用户也可以选择把数据储存在散列里面, 然后将类似 SETRANGE 、 GETRANGE 这样的操作交给客户端执行。

  3. 如果程序需要储存的数据项比较多, 并且你希望尽可能地减少储存数据所需的内存, 那么就应该优先考虑使用散列键。

  4. 如果多个数据项在逻辑上属于同一组或者同一类, 那么应该优先考虑使用散列键。

本文摘录自即将出版的《Redis使用手册》, 详情请见: RedisGuide.com 。 

 

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/4811

相关推荐

js中字符串截取的几种方式

众所周知,js提供了很多字符串截取的方式。下面主要介绍js中slice(),splice(),split(),substring(),substr()的使用和区别,主要介绍了JavaScript截取、切割字符串的技巧,需要的朋友可以参考

JavaScript:生成重复的字符串(字符串乘法)

看到一个题目要求写一个函数times,输出str重复num次的字符串。除了利用循环还有几种方法:递归,结合三元表达式更简洁。数组的 join() 方法。ES6的 repeat() 方法。ES6目前没有全部兼容。

js 字符串比较大小

数值是合乎常理的操作,其实字符串也可以比较大小;两个字符串比较大小,比较的是组成它们字符的ASCII码的大小,比较原则如下:比较的是字符的ASCII码的大小。

原生js去掉字符串2端空格Trim()方法总汇

在我们使用JavaScript编写脚本的时候,经常会遇到把字符串两边的空格进行清除,它不想其它语言会有内置方法函数处理,js需要我们自己代码来实现。如果用过jquery库的话,它提供了trim方法,我们可以直接使用。

JS判断字符串小括号是否成对合法

要判断()是否成对;运用栈的后进先出 的特点,定义一个空数组,作为栈;for循环遍历字符串,当遇到(的时候就把(添加到空数组最顶端,push方法,记录发现一个左括号;

js中String.prototype实现string过滤空格_字符串空格过滤

我们都知道prototype可以向对象上添加属性和方法,语法如下:object.prototype.name=value。这篇文章就是利用prototype,为字符串扩展过滤空格的方法

js提取字符串中的数值

1.像生于1999年这样字符串中只含有一个整型数值的字符串,直接使用正则表达式将数字的字符删除掉就行:2.对于字符串中含有多数值,使用字符串的match方法,通过正则表达式提取字符串的所有数字(包含整数和小数):

es6中新增的字符串方法

es6中新增的字符串方法:字符串模板用法${变量名}、字符串查找方法string.includes(要找得字符串)、检查字符串是否已xxx开头、字符串重复方法string.repeat(次数)、字符串填充string.padStart

ES6 字符串之模板字符串、标签模板、实用方法集

模板字符串:1.可写多行字符串 2.使用${}添加变量,模板字符串之中还能调用函数。标签模板的一个重要应用,就是过滤 HTML 字符串,防止用户输入恶意内容。

Js实现字符串压缩

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!