iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis 使用的 10 个小技巧
  • 791
分享到

Redis 使用的 10 个小技巧

Redis使用的10个小技巧 2014-08-05 01:08:33 791人浏览 绘本
摘要

Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路。 随之而来的一系列最佳实践,使得大多数人可以正确地使用 Redis。 下面我们将

Redis 使用的 10 个小技巧

Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路。

随之而来的一系列最佳实践,使得大多数人可以正确地使用 Redis。

下面我们将探索正确使用 Redis 的10个技巧。

停止使用 KEYS *

Okay,以挑战这个命令开始这篇文章,或许并不是一个好的方式,但其确实可能是最重要的一点。

很多时候当我们关注一个redis实例的统计数据,我们会快速地输入”KEYS *”命令,这样key的信息会很明显地展示出来。平心而论,从程序化的角度出发往往倾向于写出下面这样的伪代码:

for key in "keys *":  
 doAllTheThings()

但是当你有1300万个key时,执行速度将会变慢。因为KEYS命令的时间复杂度是O(n),其中n是要返回的keys的个数,这样这个命令的复杂度就取决于数据库的大小了。并且在这个操作执行期间,其它任何命令在你的实例中都无法执行。

作为一个替代命令,看一下 SCAN 吧,其允许你以一种更友好的方式来执行… SCAN 通过增量迭代的方式来扫描数据库。这一操作基于游标的迭代器来完成的,因此只要你觉得合适,你可以随时停止或继续。

2、找出拖慢 Redis 的罪魁祸首

由于 Redis 没有非常详细的日志,要想知道在 Redis 实例内部都做了些什么是非常困难的。幸运的是 Redis 提供了一个下面这样的命令统计工具

127.0.0.1:6379> INFO commandstats  
# Commandstats  
cmdstat_get:calls=78,usec=608,usec_per_call=7.79   
cmdstat_setex:calls=5,usec=71,usec_per_call=14.20   
cmdstat_keys:calls=2,usec=42,usec_per_call=21.00   
cmdstat_info:calls=10,usec=1931,usec_per_call=193.10

通过这个工具可以查看所有命令统计的快照,比如命令执行了多少次,执行命令所耗费的毫秒数(每个命令的总时间和平均时间)

只需要简单地执行 CONFIG RESETSTAT 命令就可以重置,这样你就可以得到一个全新的统计结果。

3、 将 Redis-Benchmark 结果作为参考,而不要一概而论

Redis 之父 Salvatore 就说过:“通过执行GET/SET命令来测试Redis就像在雨天检测法拉利的雨刷清洁镜子的效果”。很多时候人们跑到我这里,他们想知道为什么自己的Redis-Benchmark统计的结果低于最优结果 。但我们必须要把各种不同的真实情况考虑进来,例如:

  • 可能受到哪些客户端运行环境的限制?
  • 是同一个版本号吗?
  • 测试环境中的表现与应用将要运行的环境是否一致?

Redis-Benchmark的测试结果提供了一个保证你的 Redis-Server 不会运行在非正常状态下的基准点,但是你永远不要把它作为一个真实的“压力测试”。压力测试需要反应出应用的运行方式,并且需要一个尽可能的和生产相似的环境。

4、Hashes 是你的最佳选择

以一种优雅的方式引入 hashes 吧。hashes 将会带给你一种前所未有的体验。之前我曾看到过许多类似于下面这样的key结构:

foo:first_name  
foo:last_name  
foo:address

上面的例子中,foo 可能是一个用户的用户名,其中的每一项都是一个单独的 key。这就增加了 犯错的空间,和一些不必要的 key。使用 hash 代替吧,你会惊奇地发现竟然只需要一个 key :

127.0.0.1:6379> HSET foo first_name "Joe"   
(integer) 127.0.0.1:6379> HSET foo last_name "Engel"   
(integer) 127.0.0.1:6379> HSET foo address "1 Fanatical Pl"   
(integer) 127.0.0.1:6379> HGETALL foo  
1"first_name"   
2"Joe"   
3"last_name"   
4"Engel"   
5"address"   
6"1 Fanatical Pl"   
127.0.0.1:6379> HGET foo first_name  
"Joe"

5、设置 key 值的存活时间

无论什么时候,只要有可能就利用key超时的优势。一个很好的例子就是储存一些诸如临时认证key之类的东西。

当你去查找一个授权key时——以OAUTH为例——通常会得到一个超时时间。这样在设置key的时候,设成同样的超时时间,Redis就会自动为你清除!而不再需要使用KEYS *来遍历所有的key了,怎么样很方便吧?

6、 选择合适的回收策略

既然谈到了清除key这个话题,那我们就来聊聊回收策略。当 Redis 的实例空间被填满了之后,将会尝试回收一部分key。根据你的使用方式,我强烈建议使用 volatile-lru 策略——前提是你对key已经设置了超时。

但如果你运行的是一些类似于 cache 的东西,并且没有对 key 设置超时机制,可以考虑使用 allkeys-lru 回收机制。我的建议是先在这里查看一下可行的方案。

7、如果你的数据很重要,请使用 Try/Except

如果必须确保关键性的数据可以被放入到 Redis 的实例中,我强烈建议将其放入 try/except 块中。几乎所有的Redis客户端采用的都是“发送即忘”策略,因此经常需要考虑一个 key 是否真正被放到 Redis 数据库中了。至于将 try/expect 放到 Redis 命令中的复杂性并不是本文要讲的,你只需要知道这样做可以确保重要的数据放到该放的地方就可以了。

8、不要耗尽一个实例

无论什么时候,只要有可能就分散多redis实例的工作量。从3.0.0版本开始,Redis就支持集群了。Redis集群允许你基于key范围分离出部分包含主/从模式的key。完整的集群背后的“魔法”可以在这里找到。

但如果你是在找教程,那这里是一个再适合不过的地方了。如果不能选择集群,考虑一下命名空间吧,然后将你的key分散到多个实例之中。关于怎样分配数据,在redis.io网站上有这篇精彩的评论。

9、内核越多越好吗?!

当然是错的。Redis 是一个单线程进程,即使启用了持久化最多也只会消耗两个内核。除非你计划在一台主机上运行多个实例——希望只会是在开发测试的环境下!——否则的话对于一个 Redis 实例是不需要2个以上内核的。

10、高可用

到目前为止 Redis Sentinel 已经经过了很全面的测试,很多用户已经将其应用到了生产环境中(包括 ObjectRocket )。如果你的应用重度依赖于 Redis ,那就需要想出一个高可用方案来保证其不会掉线。

来源:Http://objectrocket.com/blog/...
您可能感兴趣的文档:

--结束END--

本文标题: Redis 使用的 10 个小技巧

本文链接: https://www.lsjlt.com/news/5396.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Unity 3D 实用的10个小技巧
    Unity引擎,上手简单易懂,但是很少有人对Unity编辑器的功能做一个全面细致的了解,一些非常实用的小功能在日常使用中很难被发现,但它们对工作效率的提升是有不小的帮助的。1)锁定Inspector – 在inspector面板上方有一个小...
    99+
    2023-01-31
    小技巧 Unity
  • Python语言的10个小技巧分享
    这篇文章主要讲解了“Python语言的10个小技巧分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python语言的10个小技巧分享”吧!10个Python小技巧1. 用ZIP处理列表假设...
    99+
    2023-06-16
  • JavaScript的10个实用小技巧分别是哪些
    本篇文章给大家分享的是有关JavaScript的10个实用小技巧分别是哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我一直在寻找提高效率的...
    99+
    2024-04-02
  • 10个Python中Pip的使用技巧分享
    目录Python pip1.安装 pip2.升级 pip3.安装库4. 库的批量安装5.卸载和升级包6. 冻结 Python pip 依赖7.查看库信息8.查看需要升级的库9. 检查...
    99+
    2024-04-02
  • 优化HTML图像标签的10个小技巧
    ...
    99+
    2024-04-02
  • Tomcat配置必备的10个小技巧用法总结
    目录一、配置系统管理(Admin Web Application)二、配置应用管理(Manager Web Application)三、部署一个web应用四、配置虚拟主机(Virtu...
    99+
    2023-05-19
    Tomcat 配置技巧总结 Tomcat 配置技巧 Tomcat 配置
  • 10 个编写更简洁React代码的实用小技巧
    本篇文章给大家整理分享 10 个编写更简洁 React 代码的实用小技巧,希望对大家有所帮助!1. JSX 简写如何将 true 值传递给给定的 props?【相关推荐:Redis视频教程、编程视频】在下面的示例中,使用 prop show...
    99+
    2023-05-14
    前端 JavaScript React.js
  • 在短时间内轻松使用Win8操作系统的10个小技巧
    在过去的一段时间里=里,有不少网友已经亲身体验Win8系统,并且已经可以熟练的应用。但对于刚接触Win8或是还没有接触到Win8操作系统的朋友,可能还在处于一个迷茫的状态,今天我们就总结10个小技巧,让用户们在短时间内轻...
    99+
    2023-06-05
    Win8使用技巧 技巧 时间
  • 48个Shell脚本使用小技巧
    这篇文章主要讲解了“48个Shell脚本使用小技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“48个Shell脚本使用小技巧”吧!0. shell 调试代码如下:sh -x somefil...
    99+
    2023-06-09
  • 10个Elasticsearch查询的实用技巧分享
    目录前言示例1. 匹配多个词语2. 匹配某个字段中的任意一个词3. 匹配某个字段中的词语前缀4. 匹配某个字段中的词语通配符5. 匹配某个字段中的词语模糊匹配6. 匹配某个字段中的词...
    99+
    2023-05-16
    Elasticsearch查询技巧 Elasticsearch查询
  • PHP开发的10个调试技巧
    在PHP开发过程中,调试是不可避免的一个过程。但是有些开发者在遇到问题时,往往会采用非常低效的方法进行调试,比如打断点、输出调试信息等。这些方法并不一定能够有效地解决问题,同时还会损失很多时间和精力。为此,本文将介绍PHP开发中10个高效的...
    99+
    2023-05-24
    调试技巧 PHP调试 开发技巧
  • 阅读PHP文档的10个技巧
    PHP是一种非常流行的开源服务器端脚本语言,广泛应用于Web开发中。要成为一名优秀的PHP程序员,阅读官方文档是必不可少的。无论你是初学者还是资深开发者,下面这些技巧都将有助于你更有效地阅读PHP文档。了解文档结构PHP官方文档分为多个部分...
    99+
    2023-05-24
    PHP基础 文档阅读 技巧提示
  • 10个实用的Windows 7系统优化技巧
    1、加速磁盘碎片整理   Windows 7中的磁盘碎片整理工具比 Vista提供了更多的可控选项,它的命令行版本也提供一些有趣的新功能。下面是参数说明:   /r 并行处理多个驱动器   /h 让磁盘碎片整理工具使用更...
    99+
    2023-06-01
    42780 优化 技巧 Windows 7系统
  • PyCharm使用小技巧
    本文部分内容参考了明宇李前辈的博客,原文请阅读 Pycharm的配置(背景颜色,字体,解释器等); 鼠标滑轮控制字体大小 部分参考了墨颜前辈的博客,原文请阅读 用鼠标滑轮控制代码字体大小; 感谢各位前辈的分享。除此之外,其余均为自己平时使...
    99+
    2023-01-31
    小技巧 PyCharm
  • 掌握 Python Logging 模块的 10 个技巧
    1. 自定义日志级别 除了默认的 DEBUG、INFO、WARNING、ERROR 和 CRITICAL 级别,您可以创建自定义级别。这对于区分不同严重程度的事件非常有用。 import logging # 创建自定义日志级别 CUST...
    99+
    2024-02-20
    Python, Logging, 调试, 可维护性
  • 30个Python常用小技巧
    1、原地交换两个数字x, y =10, 20print(x, y)y, x = x, yprint(x, y)10 2020 102、链状比较操作符n = 10print(1 < n < 20)print(1 > n &...
    99+
    2023-01-31
    小技巧 常用 Python
  • 适用于 iOS 10 的 16 个 iPhone 提示和技巧
    希望充分利用 iPhone 或 iPad 设备的苹果 iPhone 和 iOS 用户可能会对这个简短的五分钟视频感兴趣,该视频提供了 10 个有用的 iPhone 提示和技巧,您可以每天使用。如果您希望增强您的 iPhone 体验,iOS ...
    99+
    2023-07-13
  • 最实用的20个python小技巧
    目录1.用itertools排列2.单行条件表达式3. 反转字符串4. 使用 Assert 处理异常 5. 对多个输入使用拆分6. 用 zip() 转置矩阵7. 资源上下文管理器8....
    99+
    2024-04-02
  • 10个提升web应用程序10倍性能的技巧有哪些
    这篇文章将为大家详细讲解有关10个提升web应用程序10倍性能的技巧有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。提高Web应用程序性能比以往任何时候都更加重要。在线经济活动的份额正在...
    99+
    2023-06-16
  • 10个超级实用的Javascript 技巧是怎么样的
    这期内容当中小编将会给大家带来有关10个超级实用的Javascript 技巧是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。众所周知,JavaScript 一直在...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作