沈天真
作者沈天真·2020-12-20 22:00
售前支持·IPS

需要更大的 L3 cache?需要降低 cache miss ? Redis 运行的最佳平台---- K1 Power

字数 3033阅读 4547评论 0赞 1

Redis

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis的作者,叫Salvatore Sanfilippo,来自意大利的西西里岛,居住在卡塔尼亚。

Redis的特点

ü 内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

ü Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

ü Redis支持数据的备份,即master-slave模式的数据备份。

ü 支持事务。

Redis的优势

ü 性能极高 – Redis读的速度是110000次/s, 写的速度是81000次/s 。

ü 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

ü 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。(事务)

ü 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

ü Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

ü Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

缓存穿透

如果在请求数据时,在缓存层和数据库层都没有找到符合条件的数据,也就是说,在缓存层和数据库层都没有命中数据,那么,这种情况就叫作缓存穿透。

造成缓存穿透的主要原因就是:查询某个Key对应的数据,Redis缓存中没有相应的数据,则直接到数据库中查询。数据库中也不存在要查询的数据,则数据库会返回空,而Redis也不会缓存这个空结果。这就造成每次通过这样的Key去查询数据都会直接到数据库中查询,Redis不会缓存空结果。这就造成了缓存穿透的问题。

缓存击穿

如果缓存中的数据在某个时刻批量过期,导致大部分用户的请求都会直接落在数据库上,这种现象就叫作缓存击穿。

缓存雪崩

如果在某一时刻缓存集中失效,或者缓存系统出现故障,所有的并发流量就会直接到达数据库。数据存储层的调用量就会暴增,用不了多长时间,数据库就会被大流量压垮,这种级联式的服务故障,就叫作缓存雪崩。

Redis Cluster

Redis有三种集群方式:主从复制,哨兵模式和集群。

主从复制

优点:

ü 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离

ü 为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成

ü Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。

ü Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。

ü Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据

缺点:

ü Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。

ü 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。

ü Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

哨兵模式

优点:

ü 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。

ü 主从可以自动切换,系统更健壮,可用性更高。

缺点:

ü Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

Redis-Cluster

Redis的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台Redis服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了cluster模式,实现的Redis的分布式存储,也就是说每台Redis节点上存储不同的内容。

ü 所有的Redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

ü 节点的fail是通过集群中超过半数的节点检测失效时才生效。

ü 客户端与Redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

Redis on K1 Power 安装

以K1 Power+Centos 7.8举例,直接从源码编译安装即可。

$ wget https://download.redis.io/releases/redis-6.0.9.tar.gz

$ tar xzf redis-6.0.9.tar.gz

$ cd redis-6.0.9

$ make

直接启动即可;复杂的如 Redis-Cluster 的部署,这里不再赘述,网上相关文章很多。

ps -ef|grep redis

root 98586 96204 0 21:13 pts/0 00:00:00 grep --color=auto redis

root 104611 1 0 Dec11 ? 00:21:27 redis-server /etc/redis/redis.conf

Redis on K1 Power 优势

SMT (Simultaneous Multi Thread 并发多线程)

Redis 是高并发,低延迟,线程安全的key-value数据库,K1 Power独有的SMT(并发多线程)技术,能够在2路服务器上最高提供 2socket22core/socket4threads/core=176threads 即176个线程,可以支撑更多的连接数,降低响应延迟。

超大L3缓存

K1 Power每物理核的L3 cache大小为5MB,一个socket的L3 cache 大小为110MB ,相比较x86 通常是30MB的L3 cache 大小, 使用K1 Power,很显然可以将3倍容量的数据缓存在 L3 cache 中,从而提高cache 命中率,降低延迟。

内存带宽

Redis 是内存数据库,K1 Power相比较x86 近2倍的内存带宽优势,可以大幅提高Redis的性能。

如果有兴趣实际体验,可以私信。

参考链接:

https://xie.infoq.cn/article/39495c2d568aca1d6db5c9c50

https://zhuanlan.zhihu.com/p/145186839

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广