centos7 安装 Redis(资源)

本文详细介绍了Redis的安装、主要功能、与其他key-value存储的区别、优势,以及高可用的Sentinel集群搭建。Redis作为内存数据库,提供丰富的数据结构,如字符串、哈希、列表等,并支持持久化、复制、事务和发布订阅等特性。文章强调了避免使用高耗时命令以防止阻塞主线程,并提到了Redis在万亿级日访问量下的中断优化。此外,文中还列举了Redis的常见应用场景和面试题,以及多种Redis的监控和管理工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis简介

       Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统。可以把它作为数据库,缓存和消息中间件来使用,支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。内建了复制,lua脚本,LRU,事务等功能,通过redis sentinel实现高可用,通过redis cluster实现了自动分片。以及事务,发布/订阅,自动故障转移。

        Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存服务和消息中间件。

         Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。目前由VMware主持开发工作。

         Redis采用Key-Value型的基本数据结构,任何二进制序列都可以作为Redis的Key使用

         Redis只有一个线程,所以Redis线程很安全;使用非阻塞式IO,使Redis的速度非常快 , Redis运行在内存中但是可以持久化到磁盘

         Redis运行容量只能受限于内存的大小rds和aof持久化与内存有关,只和磁盘空间有关

         Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与储存需求。同时Redis的诸多高层级功能使其可以胜任消息队列、任务队列等不同的角色。

       缓存中常见的问题:二八定律热数据和冷数据缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

       一般常用的缓存服务器有Redis、Memcached等,

       Redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比较高效的。项目中需要用集中式可横向扩展的缓存框架,做了一点调研,即便redis、memcached存在效率上的差异(具体比较参考http://timyang.net/data/mcdb-tt-redis/),但其实都能满足目前项目的需求;但是redis还是比较风骚的,支持链表和集合操作,支持正则表达式查找key,目前项目缓存的结果大多是链表,如果链表新增或者修改数据的话,redis就体现出了极大的优势(memcached只能重新加载链表,redis可以对链表新增或者修改)

     Redis是使用C/C++语言开发的,Redi数据库中的所有的数据都存放在内存中。由于内存的读写速度远快于硬盘。在普通笔记本电脑上可以一秒读写超过10万个键值。

       Redis 具备 LRU 淘汰、事务实现、以及不同级别的硬盘持久化等能力,并且支持副本集和通过 Redis Sentinel 实现的高可用方案,同时还支持通过 Redis Cluster 实现的数据自动分片能力。

注意  : Redis提供数据定期自动持久化有两个方案  : RDB、AOF

Redis Java客户端Jedis、Redisson和lettuce

       Redis 的主要功能都基于单线程模型实现,也就是说 Redis 使用一个线程来服务所有的客户端请求,同时 Redis 采用了非阻塞式 IO,并精细地优化各种命令的算法时间复杂度,这些信息意味着:

  • Redis 是线程安全的(因为只有一个线程),其所有操作都是原子的,不会因并发产生数据异常

  • Redis 的速度非常快(因为使用非阻塞式 IO,且大部分命令的算法时间复杂度都是 O(1))

  • 使用高耗时的 Redis 命令是很危险的,会占用唯一的一个线程的大量处理时间,导致所有的请求都被拖慢。(例如时间复杂度为 O(N) 的 KEYS 命令,严格禁止在生产环境中使用)

    Redis可以为每个键设置生存时间(Time To Live,  TTL),生存时间到期后键会自动被删除。 Redis可以作为缓存系统来使用,  Redis服务器默认是会使用6379端口。

   Redis 的 5 种(存储节构)对象类型(字符串、哈希、列表、集合、有序集合)string、hash、lists(链表)、sets(集合)、sorted sets或者是ZSet(有序集合)

    其中常见的数据结构类型有:String、List、Set、Hash、ZSet这5种。

  • 有硬盘存储支持的内存数据库;

  • 但自2.0版本以后可以将数据交换到硬盘(注意, 2.4以后版本不支持该特性!)

  • 支持 sets(同时也支持 union/diff/inter)

  • 支持将数据设置成过期数据(类似快速缓冲区设计)

  • Pub/Sub允许用户实现消息机制

    Redis 内置了复制(Replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(Transactions) 和不同级别的磁盘持久化(Persistence),并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)。

      Redis 非常适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。
例如:股票价格、数据分析、实时数据搜集、实时通讯。

    Redis 是单线程结构模型

   Redis不使用表,他的数据库不会预定义或者强制去要求用户对Redis存储的不同数据进行关联。

        Redis提供持久化的选项,这些选项可以让用户将自己的数据保存到磁盘上面进行存储。根据实际情况,可以每隔一定时间将数据集导出到磁盘(快照),或者追加到命令日志中(AOF只追加文件),他会在执行写命令时,将被执行的写命令复制到硬盘里面。您

 redis-stat、RedisLive、redmon都是现成的redis监控工具,只能可视化指标不能监控,而基于redis_exporter以及grafana可以做到指标可视化以及监控报警,可以考虑集成到生产应用上。

    数据库的工作模式按存储方式可分为:硬盘数据库和内存数据库。Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快。

 

Redis常见命令  :

1、Flushdb命令     :用于清空当前数据库中的所有key

2、Flushall命令     :用于清空整个Redis服务器的数据(删除所有的key)

3、CONFIG   :客户端连接后可配置服务器

4、flush all  : 清空Redis里面 所有的缓存  

 

Redis 缺点

1) Redis3.0后才出来官方的集群方案,但仍存在一些架构上的问题;

2.)持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;而aof方法只追踪变化的数据,类似于mysql的binlog方法,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢;

3)由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。

 

Redis 主要功能包括

  • 交易

  • 发布/订阅

  • Lua脚本

  • 钥匙的生存时间有限

  • LRU驱逐钥匙

  • 自动故障转移

 

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

1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

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

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

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

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

      首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常的情况下,依然可以正常提供服务。或者宽松一些,出现异常的情况下,只经过很短暂的时间即可恢复正常服务。所谓异常,应该至少包含了以下几种可能性:

【异常1】某个节点服务器的某个进程突然down掉(例如某开发手残,把一台服务器的redis-server进程kill了)

【异常2】某台节点服务器down掉,相当于这个节点上所有进程都停了(例如某运维手残,把一个服务器的电源拔了;例如一些老旧机器出现硬件故障)

【异常3】任意两个节点服务器之间的通信中断了(例如某临时工手残,把用于两个机房通信的光缆挖断了)

其实以上任意一种异常都是小概率事件,而做到高可用性的基本指导思想就是:多个小概率事件同时发生的概率可以忽略不计。只要我们设计的系统可以容忍短时间内的单点故障,即可实现高可用性。

搭建高可用Redis服务方案 :Keepalived,Codis,Twemproxy,Redis Sentinel。

其中Codis和Twemproxy主要是用于大规模的Redis集群中,也是在Redis官方发布Redis Sentinel之前twitter和豌豆荚提供的开源解决方案。我的业务中数据量并不大,所以搞集群服务反而是浪费机器了。最终在Keepalived和Redis Sentinel之间做了个选择,选择了官方的解决方案Redis Sentinel。

Redis Sentinel可以理解为一个监控Redis Server服务是否正常的进程,并且一旦检测到不正常,可以自动地将备份(slave)Redis Server启用,使得外部用户对Redis服务内部出现的异常无感知。我们按照由简至繁的步骤,搭建一个最小型的高可用的Redis服务。

 

Redis的优势

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

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

3)原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

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

5)因为使用非阻塞式IO,所以Redis的速度非常快

 

Redis 与其他 key - value 缓存产品的特点

1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

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

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

 

      基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。

       不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。

 

       对于搭建高可用Redis服务,网上已有了很多方案,例如Keepalived,Codis,Twemproxy,Redis Sentinel。其中Codis和Twemproxy主要是用于大规模的Redis集群中,也是在Redis官方发布Redis Sentinel之前twitter和豌豆荚提供的开源解决方案。我的业务中数据量并不大,所以搞集群服务反而是浪费机器了。最终在Keepalived和Redis Sentinel之间做了个选择,选择了官方的解决方案Redis Sentinel。

Redis Sentinel可以理解为一个监控Redis Server服务是否正常的进程,并且一旦检测到不正常,可以自动地将备份(slave)Redis Server启用,使得外部用户对Redis服务内部出现的异常无感知。我们按照由简至繁的步骤,搭建一个最小型的高可用的Redis服务。

 

搭建一个最小型的高可用的Redis服务方案

方案1:单机版Redis Server,无Sentinel

3d6150bb84304769a2fcf632dda807409cc.jpg

方案2:主从同步Redis Server,单实例Sentinel

4d20d703937c5f4f75c21a96f6958cdb557.jpg

方案3:主从同步Redis Server,双实例Sentinel

60c3d559f25c9f08b38f5b05a7e5c44dd89.jpg

方案4:主从同步Redis Server,三实例Sentinel

73e69558df4e335d9973b07a786ee8c310b.jpg

更多介绍  :https://mp.weixin.qq.com/s/1UcZYc_yUJmA4exdMYB3uQ

 

Redis 应用场景:

最佳应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

例如:微博、数据分析、实时数据搜集、实时通讯等。

 

1、硬盘数据库的工作模式: 

cc11a9bbb998365d9b5452c18d53ae01c46.jpg

2、内存数据库的工作模式:

ea0e325943ecf3436602e4757611a7f4a5c.jpg

 

注意:Redis面试题 :什么是Redis、Redis常见的数据结构类型有哪些、Redis是如何进行持久化的等。 

                                           Redis内存统计

在客户端通过 redis-cli 连接服务器后(后面如无特殊说明,客户端一律使用redis-cli),通过 info 命令可以查看内存使用情况:info memory。

3e473149e2c0758302fcd544df2f383cbeb.jpg

info 命令可以显示 Redis 服务器的许多信息,包括服务器基本信息、CPU、内存、持久化、客户端连接信息等等;

### 在 CentOS 7安装 Redis #### 启用 Remi 仓库并安装 Redis 7 对于希望快速安装较新版本的用户,可以利用已配置好的第三方软件库来简化过程。通过启用 Remi 软件库能够方便地获取更高版本的 Redis: ```bash sudo yum-config-manager --enable remi sudo yum install redis -y ``` 上述命令会自动处理依赖关系,并完成 Redis安装工作[^1]。 #### 编译安装特定版本的 Redis 如果需要指定某个具体版本或者偏好手动控制整个流程,则可以选择编译方式来进行安装。这首先涉及到开发工具链以及必要的构建工具准备: ```bash [root@localhost /]# yum -y install gcc ``` 接着从官方网站下载目标版本对应的压缩文件至服务器本地存储位置,例如 `/usr/local/src` 文件夹内;也可以直接在线拉取资源: ```bash [root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget https://download.redis.io/releases/redis-3.2.9.tar.gz ``` 解压之后进入源码所在路径继续操作,按照官方文档指示依次运行 `make`, `make test` 和 `make install` 命令以完成最终部署[^2]。 #### 配置与启动 Redis 服务 无论采用哪种方式进行安装,在一切就绪后都需要对默认参数做出适当调整,确保满足实际应用场景需求。编辑位于 `/etc/redis.conf` 中的相关选项(如果是通过包管理器安装),或者是自定义创建一份新的配置文件用于后续步骤中的引用。最后一步便是激活后台进程监听端口等待连接请求到来: ```bash ./redis-server /path/to/custom_redis.conf ``` 这里假设读者已经根据实际情况修改好了适合自己的设置项[^3]。 #### 获取更高级别的支持 考虑到不同场景下的特殊要求,有时可能还需要关注更多细节方面的考量因素。比如性能优化建议、安全加固措施等都可以作为进一步探索的方向。另外值得注意的是,随着技术的发展进步,官方也会持续推出更新迭代的产品线供广大开发者选用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值