编程语言应用

首页 » 常识 » 诊断 » Redis,真的不完美CSDN
TUhjnbcbe - 2023/8/1 21:38:00

01

前言

显而易见,如今的Redis已经进入了成熟期,但依旧存在很多疑难杂症。数以千计的开发者都在开发和使用这个数据库,它拥有非常完善的文档。

我记得第一次使用Redis,是为了在保存有数百万用户的关系数据库里对某个条件进行查询。在不断优化后每次操作可以控制在1秒钟甚至更短,带给我相当大的震撼。

02

关于Redis特性

在Redis之前,很多互联网公司会使用MySQL+Memcached架构,这个架构虽然适合于海量数据存储,但随着业务的增加,会出现很多问题。

Redis就在这种时代背景中产生,你会发现Memcached遇到的问题都被Redis给解决了。

那么Redis有哪些具体特性呢?大致可分为如下八大特性。

速度极快。官方给出的数据是10万次ops的读写,这主要归功于这些数据都存在于内存中。由于Redis是开源的,当你打开源代码,就会发现Redis都是用C语言写的,C语言是最接近计算机语言的代码,而且只有区区5万行,保证了Redis的速度。同时一个Redis只是一个单线程,其真正的原因还是因为单线程在内存中是效率最高的。持久化。Redis的持久化可以保证将内存中的数据每隔一段时间就保存于磁盘中,重启的时候会再次加载到内存。持久化方式是RDB和AOF。支持多种数据结构。分别支持哈希、集合、BitMaps,还有位图(多用于活跃用户数等统计)、HyperLogLog(超小内存唯一值计数,由于只有12K,是有一定误差范围的)、GEO(地理信息定位)。支持多种编程语言。支持Java、PHP、Python、Ruby、Lua、Node.js。功能丰富。如发布订阅、Lua脚本、事务、Pipeline(管道,即当指令到达一定数量后,客户端才会执行)。简单。不依赖外部库、单线程、只有行Code。主从复制。主节点的数据做副本,这是做高可用的基石。高可用和分布式。Redis-Sentinel(v2.8)支持高可用,Redis-Cluster(v3.0)支持分布式。上面是一些Redis介绍性的内容,如果你还没有接触过Redis,但又对此有兴趣的话,这里有适合工作实战的教程。

扫码订阅Redis

如果已经开始用到Redis,那么你在应用过程中是否也遇到过下面的这些问题?

03

关于Redis疑难问题

在各种场景中,无论是什么架构,你都可以将Redis融入项目中来,这可以解决很多关系数据库无法解决的问题。

比如,现有数据库处理缓慢的任务,或者在原有的基础上开发新的功能,都可以使用Redis。但大家在实践中总会遇到难题,下面我们盘点一下:

Redis持久化问题?Redis实际应用场景里怎么使用?个线程压测时RedisIncr出现错误,就是Timeout,怎么排查?有什么好的经验分享?批量查寻是用MGET好还是Hash更好,Hash的性能瓶颈是多少,达到多少个Key或者多大容量后性能急剧下降?如果需要大批量的查例如个Key,用什么方案更好?MGET在集群模式下的实现方式是什么,怎么知道某个Key在哪个集群分片上?Redis最大并发大约支持5~10万并发,假设现在有20万或者50万并发该怎么办?Redis分布式集群的几种解决方案,哨兵等方案结合生产环境经验的区别、优劣是什么?jedispool链接对象无法释放,这个怎么办?代码写了在finally里面也执行了,然后看客户端连接数越来越多,最后项目挂了怎么办?Redis和数据库同步、缓冲穿透、雪崩问题、hyperloglogslowqery实现原理?无论是Win或Linux都有此现象,服务器Redis3.x,客户端Hiredis,在客户机与服务器间网络不稳定的情况下,客户机可能收不到服务器推送来的消息,以及客户机发布消息时会塞死。是否能提供相关解决经验?Redis的连接数用什么命令监测?Redis的配置要主要哪些参数调优?登录Redis出现提示,要求密码NOAUTHAuthenticationrequired有什么办法可以免密登录?有没有在生产环境下用Redis做持久化存储的例子?一般怎么配置AOF和RDB?在高并发并且尽量少数据丢失的情况下有哪些优化手段?哨兵模式下Client是随机挑选其中一个哨兵发送Request吗?那么如果这个哨兵Process挂了会怎样?Redis集群很多个Redis的话,是把多个IP全部写到代码里面,那会不会导致压力不均衡?要开始使用Redis的时候,如何预估生产环境需要多少计算资源(Cluster机器数量、内存、CPU、硬盘空间、Slave数量等)?有没有一些通用的经验?AOF和RDB配合着用,恢复数据哪个为主?假如内存8G的话,Redis既然是运行在内存中,那Redis最大能存多大数据?熟练使用和运维Redis已经成为开发人员的一个必备技能。

国外使用Redis的公司包括Twitter、Instagram等互联网巨头,而国内对Redis的使用更有后来者居上之势,除BAT外,新浪微博已成为Redis全球最大的使用者。

1
查看完整版本: Redis,真的不完美CSDN