- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我可以想到两种使用redis检查存在的方法:
SET
一个键并通过GET
检查它是否存在(或使用EXISTS
正如@Sergio Tulentsev 在评论中提到的那样)SADD
将所有成员添加到 key 并通过 SISMEMBER
检查是否存在哪个更好?如果我选择第一种方法并且数据库中的键数变大,与单个集合中相同数量的键相比,会不会有问题?
最佳答案
其实除了这两种方法,你还可以使用HASH
数据结构配合HEXISTS
命令(我把这种方法称为第三种方案)。
所有这些解决方案都足够快,如果您有一个大的 SET
、HASH
或键空间,这不是问题。
那么,我们应该使用哪一个呢? 这取决于很多事情......
Does the key has value?
第一个和第三个方案的键都可以有值,而第二个方案不能。
因此,如果每个键都没有值,我更喜欢第二种解决方案,即 SET
解决方案。否则,您必须使用第一种或第三种解决方案。
Does the value has structure?
如果值不是原始字符串,而是数据结构,例如列表
,设置
。您必须使用第一个解决方案,因为 HASH
的值只能是原始字符串。
Do you need to do set operations?
如果需要对多个数据集进行交集、并集或差异运算,则应使用第二种方案。 Redis 具有用于这些操作的内置命令,尽管它们可能是缓慢的命令。
Memory efficiency consideration
Redis 对小的SET
和HASH
采用更节省内存的编码。所以当你有很多小数据集时,采用第二种和第三种解决方案可以节省大量内存。参见 this了解详情。
更新
Do you need to set TTL for these keys?
正如@dizzyf 在评论中指出的那样,如果您需要为这些键设置TTL
,则必须使用第一种解决方案。因为 HASH
和 SET
的项目没有过期属性。您只能为整个 HASH
或 SET
设置 TTL
,而不是它们的元素。
关于redis - 使用 set 或只是在 redis 中创建键来检查是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46143574/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!