查看原文
其他

银行如何使用 Redis 构建缓存数据库?

数据库在银行业务系统中占据了非常重要的地位,但关系型数据库在如今浪涌似的交易下极易出现瓶颈,Redis 是一种开源的内存非关系型数据库,给开发人员带来的体验是颠覆性的。在自始至终的设计过程中,都充分考虑高性能,这使得 Redis 成为当今速度最快的 NoSQL 数据库,也是互联网企业在缓存数据库选型时的第一选择。

社区特别组织了“基于支付标记化项目使用Redis构建缓存数据库在线答疑”活动,社区专家姜文浩撰写了《redis最佳实践--以支付标记化为例》(点击标题可回顾),以给同行业提供借鉴。并根据活动内容整理了《基于支付标记化项目使用Redis构建缓存数据库的6个难点问题》(点击标题可回顾),提供了以下问题的对策。

1.redis 如何快速查找big key?

2.在使用redis的时候如何避免和解决缓存穿透和缓存雪崩问题?

3.redis大key删除时会造成整库堵塞,该问题如何优化?

4.如何快速的增加redis的节点数?

5.reids和memcached如果只有string数据时的话二者的区别是什么,该如何选择?

6.redis有哪些安全特性和加固方法?


本文继续将活动中其他涉及到的交流问答汇总于此,希望连同以上最佳实践、难点解答一道,为广大同行提供更多参考,作为传统的银行业来说,如何使用Redis来构建我们的缓存数据库从而提高我们的系统处理性能。


1、为什么不建议redis作为队列来使用?它与常见的消息队列软件相比有什么缺点?

答:

redis在内存中实现队列,持久化不是强项,专门的MQ实现更可靠。redis的缓存功能是它的专长,没有好坏,只有更合适。

其实简单来说如果业务场景简单,对于队列并没有比较高的要求,使用redis还是kafka、rabbitmq、rocketmq这些来做队列都可以,但是要考虑到学习成本、使用成本以及后续的业务发展,所以要从长远看的话不如一开始就选择专业的消息队列软件,redis还是让它去做缓存吧


2、针对银行业的安全审计要求,基于redis的分布式数据库系统是否提供相关功能?如数据加密、连接加密、操作审计等

答:

redis有两种安全策略方式,一是限制访问ip,二是设置用户名、密码;

注:由于Redis的性能极高,并且输入错误密码后Redis并不会进行主动延迟(考虑到Redis的单线程模型),所以攻击者可以通过穷举法破解Redis的密码(1秒内能够尝试十几万个密码),因此在设置时一定要选择复杂的密码。

配置Redis复制的时候如果主数据库设置了密码,需要在从数据库的配置文件中通过masterauth参数设置主数据库的密码,以使从数据库连接主数据库时自动使用AUTH命令认证。

现在应该不具备数据加密、连接加密的功能,操作审计的话是不是可以借助日志来做呢,比较不确定


3、redis企业版较社区版多了什么特性?什么情况适合使用企业版?

答1:

redis企业版稳定性更好,功能更全面,服务与支持更细致。

答2:

因为我公司本身未使用redis企业版,所以具体redis企业版比社区版多了什么特性无法一一列举,但是从我自身与腾讯以及阿里等公司交流,主要集中在四点:架构灵活、数据安全、弹性扩展、智能运维

比如说数据安全,可以确保数据不丢失、一键恢复之类的

弹性伸缩比如当存储容量不足时,通过点击操作实现一键扩容,扩容过程自动进行无需人工参与,也不需要担心扩容过程中出现问题,扩容操作亦不会影响业务正常运行

智能运维比如提供可视化的监控等等

缺点:很多都依赖于iaas层,很难直接买来就使用


4、开源的redis是否适合商业银行使用?

答:

根据目前使用的情况开源的redis可以供商业银行来使用,如果可以的话可以买一些集成厂商的人天维保来辅助运维,目前在国内阿里云应该有商业化的redis提供,但据说要求比较高,不易开箱即用


5、redis在面对秒杀之类的业务场景时需要注意些什么?

答:

上层应用通过分布式架构来分散IO压力,当业务压力超负荷时,考虑应用层分离业务,可以进行延时处理的业务先停止剥离,延时处理,或者有的业务进行降级处理,比如前端限速等;

下层基础架构可以通过分布式存储利用闪存的高IOPS特性处理,整体数据交换可以通过万兆网络或者INFINIBAND网络来处理。


6、redis在做架构设计时是否要用zookeeper来进行管理?集群模式后是否哨兵模式就没有意义了?

答1:

redis的集群架构方案有很多种,选取最适合你们的哪一种就行了

答2:

zookeeper作为一种分布式的程序协调服务有着管理集群的功能,但并不是说redis做集群时一定需要zookeeper来进行管理,在redis3.0之后已经提供了redis cluster的功能,自身的集群功能已经非常强大了,而且相比哨兵模式优势很大,建议使用redis的时候使用最新的集群模式进行应用


7、为什么说redis适合在docker部署?

答1:

redis 是非常适合放Docker的,毕竟是内存数据库,不追求数据绝对持久化。

答2:

放到容器中是可以实现的。有利有弊,关键看你的需求来衡量了。

需要考虑数据持久化,以及数据持久化带来的IO性能的损耗。

还有默认网络模式中产生的网络延迟

答3:

在实际的业务生产环境中,像redis、mysql等库应用一般还是不建议放在docker里面


8、redis数据库日常运维人员需要关注的系统指标有哪些?

答:

其实我们使用info命令的时候输出的信息已经非常全了,大家可以去搜一下info命令输出的内容分别代表什么意思,其中包括连接数、内存使用信息、持久化信息、状态等等,都可以去关注一下并作为日常巡检的指标。

提供个链接给大家http://redisdoc.com/server/info.html

图形化管理工具的话除了redis manager我记得还有一个redis studio,但是我刚去github看了一下好久没更新了,建议使用的话还是命令比较好,毕竟可以更好地掌握。


(感谢姜文浩、聂奎甲、岳彩波、priest 等解答以上问题)


相关文章:

《redis最佳实践--以支付标记化为例》

《基于支付标记化项目使用Redis构建缓存数据库的6个难点问题》


以上内容均来自社区线上交流活动,了解最新线上答疑、探讨、技能培训,请点击阅读原文


长按二维码关注公众号

继续滑动看下一个

银行如何使用 Redis 构建缓存数据库?

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存