聊聊 Redis 性能细节

栏目: 数据库 · 发布时间: 5年前

聊聊内存存储,redis作为分布式内存缓存,性能极高,但是在高并发读、高并发、大存储量写的场景下很多东西要注意,不然可能达不到预想性能效果。不能用透明方式去使用,而应该多去了解架构以及具体实现。不去了解细节,在高压力应用下,可能会对线上服务造成很大影响,达不到高可用。

聊聊  <a href='https://www.codercto.com/topics/18994.html'>Redis</a>  性能细节

关于数据结构,数据结构redis支持很多种,现在要探讨一件事不是这么多种数据结构,而是在高并发场景下,尽量避免用哪些数据结构,尽量多用哪些数据结构,尽量避免应用数据结构是hash,包含set以及map,因为hash结构复杂既需要更大存储空间,也需要更多计算才能将数据取出。

举个以前线上遇到过的问题,就是线上用了很多set,因为在一些场景下过滤等等逻辑,用set很方面,但是却对redis server不友好,对redis server压力大。

线上还遇到过,定时拉取过多会导致tp999上升影响接口正常使用,这时就需要降低对于redis过于多的批量读取,方式就是暂时减少redis server的压力,等待redis server恢复正常后,拉取是没有问题的,但后续还是要优化,尽量避免压力过大。

线上还发生过单个大key对线上,直接在一个时间点服务突然性能就变得很低,并且每5分钟一次,经定位是一个数据过大并且是通用数据,定时拉取每次定时拉取时整个redis集群堵住,导致集群吞吐下降tp99升高。

反推过去看是越小越好,批量夺取越小tp999会变得越小,他是一个动态服务,很难界定一个值多大为好。这就需要线上常年经验积累以及对于线上问题不断反思以及调整。

所有办法都想了,对于存储以及db架构,原理实现都有了解了就能避免问题吗?答案是不一定,通过我们对架构理解能解决一部分问题,但还是有一些问题没有了解到的,或是想不到的,这就需要我们有意外时备选方案,已做到我们能想到的万无一失。

备选方案具体思路就是减少或者避免对redis依赖,通过本地内存来提供业务需要数据,切断对redis依赖,避免因为redis性能波动导致线上业务性能波动,或者因为redis集群出现比较严重问题,主从断开、性能及其突然严重下跌,或者集群不稳定,这些是比较极端情况,虽然很少遇到,属于“黑天鹅”事件,但发生了会对线上业务有极大影响,一定要避免。

降级备选方案,在redis出现严重问题时启用,可以采取基于zookeeper配置中心方式实现,通过配置下发来达到秒级降级,避免对线上业务造成影响,备选方案极其重要不可轻视。从根本上应该是想办法让线上服务读的单个数据尽可能小,批量数据尽可能少,这样就能让tp999越来越高,离线计算、准实时以及其他存储应用是值得去不断探索的。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精通Java并发编程(第2版)

精通Java并发编程(第2版)

[西] 哈维尔·费尔南德斯·冈萨雷斯 / 唐富年 / 人民邮电出版社 / 2018-10 / 89.00元

Java 提供了一套非常强大的并发API,可以轻松实现任何类型的并发应用程序。本书讲述Java 并发API 最重要的元素,包括执行器框架、Phaser 类、Fork/Join 框架、流API、并发数据结构、同步机制,并展示如何在实际开发中使用它们。此外,本书还介绍了设计并发应用程序的方法论、设计模式、实现良好并发应用程序的提示和技巧、测试并发应用程序的工具和方法,以及如何使用面向Java 虚拟机的......一起来看看 《精通Java并发编程(第2版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换