我曾经使用SQL,如MySQL,Postgres或MSSQL。
现在我想玩Redis。我正在开展一个小型家庭项目,我认为这是开始使用Redis的最佳选择。
我有一台可以读取温度(室内和室外)和湿度的机器。我需要将读数存储到Redis中。你能帮助我理解这样做的最佳数据结构吗?
除了这些数据外,我还需要存储温度读数的时间(例如unix时间戳),以便绘制图形。
我安装Redis阅读文档,所以我理解命令和数据类型。
答案 0 :(得分:2)
因为这是你的第一个Redis项目而且它是一个家庭项目,所以我要小心谨慎。这里有几种方法可以考虑设计它(注意:上周末我只深入研究了REDIS,所以其他人一定会考虑到这一点。)
IDEA 1:
IDEA 2:
您可能希望实施一些初始设计,然后立即处理数据 - 绘制图表,执行统计信息等。无论您打算如何处理它。这将暴露缺陷,如果它们是主要的,请刷新数据库并再试一次。这些设计实际上只需要大约1个小时来实现,因为您真正改变的唯一事情是使用一些Redis命令和一些字符串操作来将数据转换为键。
答案 1 :(得分:1)
我喜欢托尼的建议,但我也会抛出另一种可能性。
使用LPUSH将项目推送到列表的前面。使用LRANGE获取一组读数。列表将始终按阅读时间排序。显然将价值拆分为" _"得到你的时间和阅读...
老实说,这将提供与Tony的第一个示例相同的属性,查找性能略差,但better memory usage。我猜这个项目你既不是内存也不是CPU限制,所以选择可能不是问题。也就是说,如果您希望节省数百或者更多的读数,我会建议列表,除非您想要占用系统内存的大部分内容。
此外,最好在您的参赛作品上使用一些合理的TTL调用EXPIRE,该TTL包含您想要保存读数的时间长度。如果您的计划是让它们永久存在,那么您可能希望随着时间的推移将它们备份到磁盘DB,并且只需使用Redis作为最近读数的快速查找缓存。
答案 2 :(得分:0)
感谢所有回答,我选择了这个结构:
根据wallacer的建议,我想从Redis备份旧条目。 对于主要前端,我只需要持续两天的样本。
例如,我可以创建Redis RDB文件快照和" trim"现场名单。如果将来要恢复旧值,此解决方案不方便。
您是否有任何关于采用何种程序存储数据的提示?也许使用SQLIte DB?