Redis专题(持续更新)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis是一个高性能的键值存储系统,其核心数据结构和高性能原理是其快速处理大量并发连接的关键。Redis是单线程的,这意味着网络IO和键值对的读写都由一个线程完成。Redis之所以能够如此快速,主要有以下原因:内存操作、单线程避免切换开销和IO多路复用。除此之外,Redis还提供了一些其他高级命令,如keys、scan和Info命令,这些命令可以帮助我们更好地管理和查询Redis的数据。通过合理地利用Redis的核心原理和高级命令,我们可以提升系统的性能和效率。

01-VIP-Redis核心数据结构与高性能原理


文章目录


正文

Redis安装

1 下载地址:http://redis.io/download
2 安装步骤:
3 # 安装gcc
4 yum install gcc
5
6 # 把下载好的redis‐5.0.3.tar.gz放在/usr/local文件夹下,并解压
7 wget http://download.redis.io/releases/redis‐5.0.3.tar.gz
8 tar xzf redis‐5.0.3.tar.gz
9 cd redis‐5.0.3
10
11 # 进入到解压好的redis‐5.0.3目录下,进行编译与安装
12 make
13
14 # 修改配置
15 daemonize yes #后台启动
16 protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis
17 # 需要注释掉bind
18 #bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户
端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
19
20 # 启动服务
21 src/redis‐server redis.conf
22
23 # 验证启动是否成功
24 ps ‐ef | grep redis
25
26 # 进入redis客户端
27 src/redis‐cli
28
29 # 退出客户端
30 quit
31
32 # 退出redis服务:
33 (1)pkill redis‐server
34 (2)kill 进程号
35 (3)src/redis‐cli shutdown

Redis的单线程和高性能

Redis是单线程吗?

Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外

提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其

实是由额外的线程执行的。

Redis 单线程为什么还能这么快?

因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性

能损耗问题。正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些耗时的指令(比如

keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。

Redis 单线程如何处理那么多的并发客户端连接?

Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到

文件事件分派器,事件分派器将事件分发给事件处理器。

1 # 查看redis支持的最大连接数,在redis.conf文件中可修改,# maxclients 10000
2 127.0.0.1:6379> CONFIG GET maxclients
3 ##1) "maxclients"
4 ##2) "10000"

其他高级命令

keys:全量遍历键, 用来列出所有满足特定正则字符串规则的key,当redis数据量比较大时,性能比较差,要避免使用

scan:渐进式遍历键

SCAN cursor [MATCH pattern] [COUNT count]

scan 参数提供了三个参数,第一个是 cursor 整数值(hash桶的索引值),第二个是 key 的正则模式,

第三个是一次遍历的key的数量(参考值,底层遍历的数量不一定),并不是符合条件的结果数量。第

一次遍历时,cursor 值为 0,然后将返回结果中第一个整数值作为下一次遍历的 cursor。一直遍历

到返回的 cursor 值为 0 时结束。

注意:但是scan并非完美无瑕, 如果在scan的过程中如果有键的变化(增加、 删除、 修改) ,那

么遍历效果可能会碰到如下问题: 新增的键可能没有遍历到, 遍历出了重复的键等情况, 也就是说

scan并不能保证完整的遍历出来所有的键, 这些是我们在开发时需要考虑的。

Info:查看redis服务运行信息,分为 9 大块,每个块都有非常多的参数,这 9 个块分别是:

Server 服务器运行的环境参数

Clients 客户端相关信息

Memory 服务器运行内存统计数据

Persistence 持久化信息

Stats 通用统计数据

Replication 主从复制相关信息

CPU CPU 使用情况

Cluster 集群信息

KeySpace 键值对统计数量信息

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
存储 缓存 NoSQL
Redis专题(持续更新) 04-VIP-Redis缓存设计与性能优化
对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过滤,对于不存在的数据布隆过滤器一般都能够过滤掉,不让请求再往后端发送。缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。向布隆过滤器询问 key 是否存在时,跟 add 一样,也会把 hash 的几个位置都算出来,看看位数组中这几个位。发过来,缓存层支撑不住,或者由于缓存设计不好,类似大量请求访问bigkey,导致缓存能支撑的并发急剧下。
179 3
|
6月前
|
缓存 NoSQL Java
Redis专题(持续更新)
文章主要介绍了Redis的主从架构,包括了搭建和配置从节点的步骤、主从复制的工作原理以及全量复制和部分复制的流程。同时还介绍了Jedis连接代码示例、Redis管道和调用Lua脚本的方法。文章详细描述了如何搭建Redis主从架构,以及主从复制的工作原理和流程,对于想要深入了解Redis主从相关知识的读者有很好的参考价值。
|
6月前
|
缓存 NoSQL 算法
Redis专题(持续更新) 04-VIP-Redis缓存设计与性能优化
maxIdle实际上才是业务需要的最大连接数,maxTotal是为了给出余量,所以maxIdle不要设置。些redis连接,执行简单命令,类似ping(),快速的将连接池里的空闲连接提升到minIdle的数。redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还。如果系统启动完马上就会有很多的请求过来,那么可以给redis连接池做预热,比如快速的创建一。数",在使用连接的过程中,如果连接数超过了minIdle,那么继续建立连接,如果超过了。
116 0
|
6月前
|
存储 缓存 运维
Redis专题(持续更新) 03-VIP-Redis高可用集群之水平扩展
本文介绍了如何通过水平扩展来提升Redis高可用集群的性能和可用性。文章首先展示了如何启动整个集群,并使用客户端连接至特定端口的Redis实例以及查看集群状态。接着详细介绍了增加Redis实例的步骤,包括配置新的主节点和从节点,并使用命令进行节点的添加和删除操作。其中还包括了重新分片操作以及将从节点指定给主节点的过程。最后,文章以删除主节点为结束,展示了如何将数据迁移至其他节点后进行节点的删除操作。整篇文章详细介绍了Redis高可用集群的水平扩展操作,对于需要扩展Redis集群的运维人员具有一定的指导意义。
159 0
|
6月前
|
缓存 NoSQL Java
Redis专题(持续更新) 03-VIP-Redis缓存高可用集群
这篇文章主要介绍了Redis缓存高可用集群的搭建和原理分析,包括Redis集群方案比较、高可用集群搭建步骤、Java操作Redis集群以及Redis集群的工作原理等内容。文章详细介绍了如何搭建Redis集群、Java操作Redis集群的代码示例以及Redis集群的选举原理、数据丢失问题以及对批量操作命令的支持等内容。此外,还介绍了哨兵leader选举流程。整体来说,本文对Redis缓存高可用集群的构建和使用进行了系统性的阐述,是一篇关于Redis集群实践经验的指南。
154 0
|
6月前
|
NoSQL Java Redis
Redis专题(持续更新)
本文主要介绍了Redis高可用架构中的哨兵架构,包括哨兵的搭建步骤、元数据信息的维护和节点变动时的处理。同时,还详细介绍了Spring Boot中使用StringRedisTemplate和RedisTemplate对Redis进行操作的方法列表,以及Redis客户端命令对应的RedisTemplate中的方法列表。明天的文章将会讲述Redis高可用集群之水平扩展。
|
6月前
|
NoSQL 调度 Redis
Redis专题(持续更新)
本文详细介绍了Redis持久化机制,包括RDB快照和AOF持久化,以及它们各自的优缺点和配置方法。对比了save和bgsave两种生成RDB快照的方式,以及AOF重写的机制和配置。在介绍Redis 4.0的混合持久化时,提出了解决重启效率低的问题,并给出了相应的配置方法。最后,给出了Redis数据备份的具体策略,包括定时调度脚本、保留备份的时间和跨机器备份等内容。文章内容详实,适合对Redis持久化感兴趣的读者阅读。
|
消息中间件 NoSQL 关系型数据库
【Docker安装软件,一篇就够了】Docker安装,Docker安装Mysql8.0、Redis、RabbitMQ及常用命令(持续更新)
【Docker安装软件,一篇就够了】Docker安装,Docker安装Mysql8.0、Redis、RabbitMQ及常用命令(持续更新)
733 0
|
消息中间件 存储 缓存
redis面试题(持续更新)
redis面试题(持续更新)
166 0
redis面试题(持续更新)