- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 Redis 中,我将对象存储在一个有序集合中。在我的解决方案中,能够按日期运行范围查询非常重要,因此我将分数存储为每个项目的时间戳的项目,例如:
# Score Value
0 1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
1 1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}
但是,在其他情况下,我需要根据它的 ID 在集合中找到单个项目。我知道我不能像查询一个 nosql 数据库那样查询这个数据结构,但我尝试使用 ZSCAN
,但没有用。
ZSCAN MySet 0 MATCH Id:92 count 1
它返回; “空列表或集合”
也许我需要不同的序列化?我已经使用 Json.Net 进行了序列化。
如果可能的话,我怎样才能做到这一点;使用日期作为分数并且仍然能够通过它的 ID 查找项目?
非常感谢,
拉斯
编辑:
假设这是不可能的,但欢迎任何想法或意见:
引用:http://openmymind.net/2011/11/8/Redis-Zero-To-Master-In-30-Minutes-Part-1/
In Redis, data can only be queried by its key. Even if we use a hash, we can't say get me the keys wherever the field race is equal to sayan.
编辑 2:
我尝试过:
ZSCAN MySet 0 MATCH *87*
127.0.0.1:6379> ZSCAN MySet 0 MATCH *87*
1) "192"
2) 1) "{\"Id\":\"64\",\"Ref\":\"XQH4\",\"DTime\":1443837798,\"ATime\":1444187707,\"ExTime\":0,\"SPName\":\"XQH4BPGW47FM\",\"StPName\":\"XQH4BPGW47FM\"}"
2) "1443837798"
3) "{\"Id\":\"87\",\"Ref\":\"5CY6\",\"DTime\":1443519199,\"ATime\":1444172326,\"ExTime\":0,\"SPName\":\"5CY6DHP23RXB\",\"StPName\":\"5CY6DHP23RXB\"}"
4) "1443519199"
它找到了所需的项目,但它还在属性 ATime 中找到了另一个出现次数为 87 的项目。拥有更独特、更长的 ID 可能会以这种方式工作,我将不得不过滤代码中的结果以找到其属性中具有确切值的那个。
仍然欢迎建议。
最佳答案
我觉得很简单
您的 ZSCAN MySet 0 MATCH Id:92 count 1
方法没有成功,因为存储的字符串是 "{\"Id\":\"92\".. .
不是 "{\"Id:92\"...
。该字符串已更改为另一种格式。所以尝试使用MATCH Id\":\"64
之类的东西来匹配redis中的json序列化数据。我不熟悉 json.net,所以实际的字符串留给您去发现。
顺便问一下,ZSCAN MySet 0 MATCH Id:92 count 1
是否返回了游标?我怀疑您以错误的方式使用了 ZSCAN
。
ZSCAN
在您的排序集不大并且您知道如何通过 Redis 的 Lua 事务节省网络往返时间时非常有用。这仍然使“按 ID 查找”操作成为 O(n)。因此,更好的解决方案是按以下方式更改您的数据模型:
改变排序集来自
# Score Value
0 1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
1 1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}
到
# Score Value
0 1443476076 Id:92
1 1443482969 Id:11
将其余详细数据移动到另一组哈希类型键中:
# Key field-value field-value ...
0 Id:92 Ref-7ADT DTime-1443476076 ...
1 Id:11 Ref-7ADT DTime-1443476076 ...
然后,您通过执行 hgetall id:92
按 id 定位。至于按日期的范围查询,你需要做 ZRANGEBYSCORE sortedset mindate maxdate
然后 hgetall
每个 id 一个一个。您最好使用 lua 将这些命令包装在一个中,它仍然会非常快!
NoSql 数据库中的数据需要像上面那样以冗余方式组织。这可能会使一些常用操作涉及多个命令和往返,但可以通过 redis 的 lua 功能解决。我强烈推荐 redis 的 lua 功能,因为它将命令包装到一个网络往返中,这些都是在 redis-server 端执行的,并且是原子的并且非常快!
有什么不懂的可以回复
关于Redis - 排序集,按属性值查找项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854616/
我有一个加载有默认值的元素。后来,我通过 jQuery 的 input.val("different value") 更改了该值。 . 当我 console.log() 元素时,我在 firebug
我们在 DropDownListFor(ASP.NET MVC3 版本)中发现了奇怪的行为。它在下拉列表中选择 ViewBag 属性值而不是 Model 属性值。 模型: public class C
寻找一种方法将描述字段添加到 Magento 中的单个属性值。请注意,我指的是属性值选项,而不是实际的属性本身。 举个例子: 属性=颜色 属性值:红、绿、蓝 我想为 3 种颜色中的每一种添加一个描述字
我知道如果我们知道注释类,我们可以轻松获取特定的注释并访问其属性。例如: field.getAnnotation(Class annotationClass) 它将返回特定注释接口(interface
我正在尝试报告我创建的椭圆形 div 的边框半径值,但我得到了一个未定义的返回值。谁能解释为什么?我是犯了一个简单的错误还是我的代码有问题?谢谢你! CSS3
我有两个表: Bike__________________________ Kiosk 带列: BikeID, Location_________________ KioskID,
我在 Java .properties 文件中有一个值需要以反冲结束。属性值应该是“\\server\folder\”,我这样输入值: name=\\\\server\\folder\\ 结尾的反斜杠
我创建了一个 DeformableShape 对象并通过 for 循环创建它的实例。我正在调用对象的 setPosition 方法并更改其枢轴属性,但所有实例的值都会更新...假设我有对象 A 并且我
是否可以在类名中为 CSS 传递参数?例如: .mrg-t-X { margin-top: Xpx; } Test 在此示例中,X 应为 10。 最佳答案 不,不是。我们最接近的是 attr()
是否可以在类名中为 CSS 传递参数?例如: .mrg-t-X { margin-top: Xpx; } Test 在此示例中,X 应为 10。 最佳答案 不,不是。我们最接近的是 attr()
是否可以在类名中为 CSS 传递参数?例如: .mrg-t-X { margin-top: Xpx; } Test 在此示例中,X 应为 10。 最佳答案 不,不是。我们最接近的是 attr()
我在使用 C# 中的数据注释时遇到了问题。我正在使用自定义必需属性和范围属性,我想将一个对象设置为错误消息。 [MyOwnRequired(ErrorCode=GlobalMessages.Messa
是否可以在类名中为 CSS 传递参数?例如: .mrg-t-X { margin-top: Xpx; } Test 在此示例中,X 应为 10。 最佳答案 不,不是。我们最接近的是 attr()
我知道如果我们知道注解类,我们可以很容易地得到具体的注解并访问它的属性。例如: field.getAnnotation(Class annotationClass) 这将返回特定注解接口(interf
我正在使用 sinon v4.1.2。根据文档( http://sinonjs.org/releases/v4.1.2/sandbox/ ),我应该能够使用以下内容设置属性: sandbox.stub
我想在我的应用程序中将一些 valraibles 的值外部化,它使用 spring 到类似属性文件的东西。 我怎样才能做到这一点? 最佳答案 Spring 提供了一个 BeanFactoryPostP
我有这个界面 public interface IMyInterface { IEnumerable Params { get; } } 在哪里 MyParamInfo 是 public c
我有一个 xml 字符串,其中包含我想要屏蔽的某些值。我还有一个黑名单列表,其中包含我要屏蔽的元素或属性的名称。我如何使用 Linq 执行此操作? var BlackList=new List{"ss
以下是读入XmlDocument的XML文件 我需要的是存储在一些 TextBox 中的 'id' 属性值(“2015”) 这就是 XmlDocument 的加载方式 XmlDocume
IDE 对象检查器通过下拉 ColorBox 显示 TColor 属性,并且可以按图形单元中定义的名称 - clBlack 等选择颜色。问题是图形单元中定义的 clWeb 颜色不存在,并且我定义的任何
我是一名优秀的程序员,十分优秀!