本文向您介绍了使用Redis之前必须了解的五件事。内容非常详细。感兴趣的朋友可以参考一下,希望对你有所帮助。
使用Redis开发应用程序是一个非常愉快的过程,但是就像其他技术一样,在基于Redis的应用程序设计中,您也需要记住几个要点。之前,您可能已经了解了关系数据库开发的整个套路,基于Redis的应用程序开发也有很多相似之处,但是您必须记住以下两点:——Redis是内存数据库,并且是单线程的。因此,在使用Redis时要注意以下几点:
1. 掌控储存在Redis中的所有键
数据库的主要功能是存储数据,但对于开发人员来说,由于应用需求或数据使用方式的变化,忽略数据库中存储的一些数据是正常的,Redis中也是如此。当一些密钥过期时,您可能会忽略它们,或者您可能会因为应用程序的某个模块被放弃而忘记数据。
无论如何,Redis会存储一些不再使用的数据,这样会无故占用一些空间。Redis的弱结构数据模型很难理解集中存储的内容,除非您使用非常成熟的键命名规则。使用正确的命名方法将简化您的数据库管理。当您使用您的应用程序或服务作为键的命名空间时(通常使用冒号来分隔键名),您可以很容易地识别数据何时被迁移、转换或删除。
Redis的另一个常见用例是将第二个数据存储为热数据项。大多数数据存储在其他数据库中,如PostgreSQL或MongoDB。在这些用例中,当数据从主存储中移除时,开发人员经常忘记在Redis中删除相应的数据。在这种跨数据存储的情况下,通常需要级联删除。在这种情况下,可以通过在Redis配置中保存特定数据项的所有标识符来实现,以确保在主数据库中删除数据后,系统会调用一个清理器来删除所有相关的副本和信息。
2. 控制所有键名的长度
我们上面说要用合适的命名规则,加上前缀来识别数据趋势,所以这个好像是背道而驰的。但是,请不要忘记Redis是一个内存数据库。钥匙越短,你需要的空间就越少。当然,当数据库中有数百万或数十亿个键时,键名的长度会产生重大影响。
例如,在32位Redis服务器上,如果存储一百万个密钥,并且每个值的长度为32个字符,则使用6个字符的密钥名称时将消耗大约96MB的空间,但使用12个字符的密钥名称时,空间消耗将增加到大约111MB。随着密钥的增加,15%的开销将产生重大影响。
3. 使用合适的数据结构
无论是内存使用还是性能,有时候数据结构都会有很大的影响。以下是一些可供参考的最佳实践:
不要将数据存储在数千(或数百万)个独立的字符串中,而是考虑使用哈希数据结构将相关数据分组。哈希表非常高效,可以减少您的内存使用;同时,hash更有利于细节抽象和代码可读性。
在适当的时候使用列表而不是集合。如果不需要使用set功能,List可以提供比内存更少的set更快的速度。
排序集是最昂贵的数据结构,无论内存消耗或基本操作的复杂性如何。如果只是需要一种查询记录的方式,而不关心这类属性的排序,建议使用哈希表。
位图或位集(V2.2之后)是Redis中经常被忽略的功能。Bitsets允许您对Redis值执行多个位级操作,例如一些轻量级分析。
4. 使用SCAN时别使用键
自Redis v2.8以来,SCAN命令已经可用,它允许光标从键空间检索键。与KEYS命令相比,虽然SCAN不能一次返回所有匹配结果,但它避免了阻塞系统的高风险,从而允许在主节点上执行一些操作。
请注意,SCAN命令是一个基于光标的迭代器。每次调用SCAN命令时,都会向用户返回一个新的光标。用户需要在下一次迭代中使用这个新的光标作为SCAN命令的光标参数,以便继续上一次迭代过程。同时,通过SCAN,用户可以使用keyname模式和count选项来调整命令。
与SCAN相关的命令还包括SSCAN命令、HSCAN命令和ZSCAN命令,分别用于采集、哈希密钥、续传等。
5. 使用服务器端Lua脚本
在Redis的使用过程中,Lua脚本的支持无疑为开发者提供了一个非常友好的开发环境,从而极大地解放了用户的创造力。如果使用得当,Lua脚本可以大大提高性能和资源消耗。脚本不是将数据传输到CPU,而是允许您在最接近数据的地方执行逻辑,从而减少网络延迟和数据的冗余传输。
在Redis中,Lua的一个非常经典的用例是将数据过滤或聚合到应用程序中。通过将处理工作流封装到一个脚本中,您只需要调用它就可以在更短的时间内用更少的资源得到更小的答案。
我将在这里分享我在使用Redis之前需要知道的五件事。我希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/79840.html