自学内容网 自学内容网

Redis: 特点,优势,与其他产品的区别以及高并发原理

入门Redis概述


1 )选择Redis是因为其高性能

  • 因为 Redis 它数据存储的机制是存在内存中的,减少了传统关系数据库的磁盘IO
  • 它是单线程的保证了原子性,它还提供了事务,锁等相关的机制

2 )Redis 环境安装配置

  • linux 或 docker 环境

3 )Redis 的并发下的模式演进

  • 并发在十万以下的时候,Redis提供了单机单节点模式
  • 官方测试的数据: 读取每秒11万次,写入每秒8万1, 所以性能是非常高的
  • 当并发上来了,10万 到 20万左右的时候,使用 Redis 提供到读写分离, 主从模式
  • 在这种模式下,主节点肯定要保持高可用的,Redis 提供了哨兵监控机制
  • 为了降低各节点之间存储数据的压力,Redis 提供了集群模式

4 )了解微服项目的构建以及springboot应用的开发

  • 我们围绕着项目来打通Redis任督二脉的,以项目作为驱动
  • 在项目中实现 Redis 各种应用场景:实现缓存,保证缓存中的数据一致性等等

5 )理论准备

  • 理论作为基石,需要了解缓存相关中间件,(Redis, Memcache 和 Ehcache) 的比较
  • 对 Redis 的基本理解,Redis 它的定位是什么?解决了什么问题?
  • 微服务相关的概念,最终是以微服务项目作为驱动开发的

5 )实际操作

  • 在linux环境中安装 Redis,包括了解它的一些配置信息,每一个配置项都代表什么意思
    • 以及把 Redis 作为开机自启项加入到系统服务当中,它的启动, 停止该如何去操作
  • Redis 的基本命令
  • 数据库表结构的设计
    • Redis 作为一款 nosql 数据库, 肯定不能百分百替代关系数据库的
    • 在一般项目中都是 Redis 和 mysql 组合,而 Redis 都是作为缓存层而存在
    • 它最终缓存的是关系数据库中的数据
  • SpringBoot & SpringCloud项目搭建
    • 通过一个微服务的项目,也可以使用 go-micro 或 其他
    • 这里了解 SpringBoot & SpringCloud 类似的微服务项目环境如何搭建

Redis 如何支撑 10w+ QPS


1 ) Redis 特点

  • 内存数据库,速度快,也支持数据的持久化。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供Lists、Hashes、Sets、Sorted Sets 等多种数据结构的存储
  • Redis支持数据的备份(master-slave)与集群(分片存储),以及拥有哨兵监控机制
  • 支持事务

2 ) 优势

  • 性能极高-Redis能读的速度是110000次/s,写的速度是81000次/s
  • 丰富的数据类型-Redis支持 Strings、Lists、Hashes、Sets、Sorted Sets 等数据类型操作
  • 原子操作-Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行(事务)
  • 丰富的特性-Redis还支持 publish/subscribe,通知,key 过期等特性

3 ) Redis、Memcached、Ehcache 的区别

EhcacheMemcachedRedis
最新版本2017年2月
3.3.0
2018年7月
1.5.9
2018年7月
5.0 Beta
许可证开源免费开源免费开源免费
实现语言JavaCC
服务器系统JavaFreeBSD、Linux、OSX、Unix、WindowsFreeBSD、Linux、OSX、Unix、Windows
数据类型支持不支持支持多种:string、hash、list、set、sorted set等
客户端语言Java.Net、C、C++、ColdFusion、Erlang、Java、Lisp、Lua、Ocaml、Perl、PHP、Python、RubyC、C#、C++、D、Erlang、Go、Haxe、Java、Node.js、Lisp、Lua、MatLab、Objective-C、Pascal、Perl、PHP、R、Ruby、Scala、Swift、Visual Basic 等 30十多种
  • 在分布式的情况下, 用 Ehcache,就不能很好的去实现分布式项目之间缓存的同步共享的问题
  • Memcached 对于数据类型比较单一,存在一些瓶颈
  • 最终通过比较,还是选择 Redis
  • 这三个中间件都可以应用于缓存,但目前市面上使用Redis的场景会更多,更广泛,其原因是:Redis性能高、原子操作、支持多种数据类型,主从复制与哨兵监控,持久化操作等

4 ) Redis的高并发

  • 官方的bench-mark数据:测试完成了50个并发执行100000个请求, 设置和获取的值是一个256字节字符串
  • 结果:读的速度是110000次/s,写的速度是81000次/s。redis尽量少写多读,符合缓存的适用要求
  • 单机redis支撑万级,如果10万+可以采用主从复制的模式

4.1.原理

  • Redis是纯内存数据库,所以读取速度快。
  • Redis使用的是非阻塞10,10多路复用,减少了线程切换时上下文的切换和竞争。
  • Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
  • Redis存储结构多样化,不同的数据结构对数据存储进行了优化加快读取的速度。
  • Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

4.2. Redis的单线程

选择单线程原因

  • 不需要各种锁的性能消耗
  • 单线程多进程集群方案
  • CPU消耗

优劣对比

单进程单线程优势

  • 代码更清晰,处理逻辑更简单
  • 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
  • 不存在多进程或者多线程导致的切换而消耗CPU

单进程单线程弊端

  • 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善

4.3 IO多路复用技术

redis 采用网络10多路复用技术来保证在多连接的时候,系统的高吞吐量

  • 举个现实生活的例子,从左边水龙头流向右边,传统的模式下,需要建立5个管子,如下
  • 而在 IO 多路复用模式下,只需要建立一根管子让左侧水龙头分别与这根管子相连即可,如下
  • 最终目的,都是要提高系统的吞吐量,而提高吞吐量就是为了快速的写入和读取
  • 它拥有这些特性才能保证 Redis 在高并发的场景下,仍然是拥有非常高的性能的

原文地址:https://blog.csdn.net/Tyro_java/article/details/142496528

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!