当前位置: 首页 > 技术与资源 > 技术分享 > 正文

用Redis缓存来提升数据库查询性能

2015-05-05 10:19:46

对一个关系型数据库进行调优以获得高查询性能可能会比较困难。如果对数据模型优化和对查询调优不起作用,DBA就可以使用缓存系统,比如Redis,它是一个可以提供内存和永久数据存储的键值数据存储系统。

由于Redis能够将数据快速读写至数据存储系统,比起关系型数据库它更具性能优势。但是键值数据存储比较简单,它们没有类似SQL那样的查询语言或是结构化数据模型。取而代之的是,它们包含用键作为标识符并与值相关联的一个简单字典或是哈希模型。DBA可以通过这些键来存储和检索值。

键值存储简单而又快速,这使得它们可以很好地匹配关系型数据库丰富的数据模型和查询功能。有时使用键值和关系型数据库的组合是更好的选择。另外,还有大量支持商业化的键值数据库,包括Redis,Riak和Areospike。

要运行Redis缓存来优化常用查询的性能,首先要对你想要缓存的查询结果进行识别。将注意力集中在那些最频繁使用和耗时的查询上,然后从你要缓存的查询中识别数据。简言之,就是缓存一个查询返回的所有字段值。

为键值定义一个命名规范;键应该用记录的主键和字段名的组合来构造。例如,产品说明的主键ID为198278,就可以将它存储为键'198278:descr'。要使你的命名规范简单并且是规则驱动的,这样就能让编程键的创建产生最小的代码量。

接下来,决定是否要将Redis缓存以自管理服务加以运行或是运行Amazon ElastiCache。运行你自己的Redis实例可以让DBA完全控制缓存。而且这样的控制意味着具有灵活性,例如在有额外空间的地方可以使用已有的Reserved Instances(保留实例)。

另外,当你想要将应用程序在云提供商之间进行迁移时,拥有完全的管理控制权限是非常有用的。如果你选择运行自管理Redis实例,就要下载服务器。Redis客户端支持超过30种编程语言——包括Java、Python、Prolog和Smalltalk等等。

那些已经使用AWS环境的公司可能会更青睐ElastiCache。除了有诸如可管理补丁这样的优势,Amazon ElastiCache还支持经过缓存优化结点类型的一个列表,包括从中型到2x大型的m3结点,还有从大型到8x大型的r3结点,以及从微型到中型的t2结点。ElastiCache还支持某些以前的结点类型,例如m1,m2,t1以及c1结点。

ElastiCache还支持多重可用区域。如果一个结点出现故障,那么一个读副本结点就会取代故障结点。任何DNS的改变都需要让应用程序的执行自动完成并且还要创建一个新的读副本。ElastiCache允许基于每小时结点使用情况的按需定价模型,以及之前为期一年或三年的结点类型。在这里可以看到完整的定价列表。

如果你通过Amazon ElastiCache来使用Redis,你可以从AWS Management Console(AWS管理控制台)启动一个集群。除了要建立一个Redis服务,你还需要通过修改应用程序代码来使用缓存。常用的模式是检查缓存中是否存在键并且是否不用执行SQL查询来检索数据然后将其存储在缓存中。当缓存已满时,你可以对Redis进行配置来删除旧数据,因此你并不需要专门的代码来处理整个缓存。

上一篇:配置SQL Server数据库恢复模式的两种方法
下一篇:SQL Server实例虚拟化的四大技巧