news 2025/12/26 13:31:29

Redis远程字典服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis远程字典服务

Redis

Redis(全称:Remote Dictionary Server 远程字典服务)

开源的非关系数据库(NoSQL),使用Key-Value键值对来存储数据;

主要功能:作为缓存,替MySQL抗高并发;

Redis为什么快?

  • 基于内存的数据库,IO性能高;
  • 基于非阻塞架构IO;IO多路复用;
    • 阻塞:需要等待当前操作完成才能进行下一步;
    • 非阻塞:当前操作正在处理时,可以处理其他操作;
    • IO多路复用就是“一个人盯多个活儿,活儿来了再动手,没活儿就歇着”,是解决高并发IO问题的“利器”。

redis是开源的非关系型数据库;

基于内存,key-value;

关系型数据库:使用表结构存储数据,适合存储结构化数据,表与表之间可以进行关联查询,使用SQL操作语言;

  • MySQL
  • Oracle
  • SQL Server
  • DB2
  • SQLite

非关系型数据库(NoSQL):存储的数据的格式更加多样,适合半结构化数据与非结构化数据的存储;

  • Redis
  • MongoDB
  • HBase

Redis:作为缓存,为了抗高并发,节省成本;

Redis是内存型数据库,断电后数据会丢失;不安全,并不能替代传统的关系型数据库;

一、下载安装Redis

1.安装依赖

sudo apt install build-essential gcc g++ make tcl -y

2.下载源码

cd /usr/local/src/ wget http://download.redis.io/releases/redis-6.2.14.tar.gz

3.编译安装

tar -xvf redis-6.2.14.tar.gz cd /usr/local/src/redis-6.2.14 make && make PREFIX=/usr/local/redis install mkdir -p /usr/local/redis/{etc,logs,data} egrep -v "^$|^#" redis.conf > /usr/local/redis/etc/redis.conf

4.修改配置文件

cd /usr/local/redis/etc vim redis.conf daemonize yes #运行后台运行 [root@server-131 redis]./bin/redis-server ./etc/redis.conf #后台启动

修改环境变量

vim /etc/profile export PATH=$PATH:/usr/local/redis/bin source /etc/profile

5.重启服务

redis-cli shutdown #关闭redis redis-server ./etc/redis.conf #指定配置文件,后台运行

6.设置远程访问

#修改/usr/local/redis/etc/redis.conf文件 #bind 127.0.0.1 #注释掉允许本地连接 protected-mode no #允许远程访问 redis-cli -h 192.168.8.131 -p 6379

7.systemctl管理redis

添加systemctl管理 vim /etc/systemd/system/redis.service [Unit] Description=Redis After=network.target [Service] Type=forking ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf ExecReload=/usr/local/redis/bin/redis-server -s reload ExecStop=/usr/local/redis/bin/redis-server -s stop PrivateTmp=true [Install] WantedBy=multi-user.target
systemctl daemon-reload systemctl start redis

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

Redis 与其他 key-value 存储系统的主要区别在于其提供了丰富的数据类型、高性能的读写能力、原子性操作、持久化机制、以及丰富的特性集。

以下是 Redis 的一些独特之处:

  • **丰富的数据类型:**Redis 不仅仅支持简单的 key-value 类型的数据,还提供了 list、set、zset(有序集合)、hash 等数据结构的存储。这些数据类型可以更好地满足特定的业务需求,使得 Redis 可以用于更广泛的应用场景。
  • **高性能的读写能力:**Redis 能读的速度是 110000次/s,写的速度是 81000次/s。这种高性能主要得益于 Redis 将数据存储在内存中,从而显著提高了数据的访问速度。
  • **原子性操作:**Redis 的所有操作都是原子性的,这意味着操作要么完全执行,要么完全不执行。这种特性对于确保数据的一致性和完整性非常重要。
  • **持久化机制:**Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,以便在系统重启后能够再次加载使用。这为 Redis 提供了数据安全性,确保数据不会因为系统故障而丢失。
  • **丰富的特性集:**Redis 还支持 publish/subscribe(发布/订阅)模式、通知、key 过期等高级特性。这些特性使得 Redis 可以用于消息队列、实时数据分析等复杂的应用场景。
  • **主从复制和高可用性:**Redis 支持 master-slave 模式的数据备份,提供了数据的备份和主从复制功能,增强了数据的可用性和容错性。
  • **支持 Lua 脚本:**Redis 支持使用 Lua 脚本来编写复杂的操作,这些脚本可以在服务器端执行,提供了更多的灵活性和强大的功能。
  • **单线程模型:**尽管 Redis 是单线程的,但它通过高效的事件驱动模型来处理并发请求,确保了高性能和低延迟。

三、Redis 主要支持以下几种数据类型:

  • string(字符串):基本的数据存储单元,可以存储字符串、整数或者浮点数。

    • 网页缓存、计数器
  • **hash(哈希)😗*一个键值对集合,可以存储多个字段。

    • 用户信息、商品信息
  • **list(列表)😗*一个简单的列表,可以存储一系列的字符串元素。

    • 消息列表、秒杀
  • **set(集合)😗*一个无序集合,可以存储不重复的字符串元素。

    • 数据去重、交集、并集
  • zset(sorted set:有序集合):类似于集合,但是每个元素都有一个分数(score)与之关联。

    • 排行榜、热点新闻

String(字符串)

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

常用命令

  • SET key value:设置键的值。
  • GET key:获取键的值。
  • INCR key:将键的值加 1。
  • DECR key:将键的值减 1。
  • APPEND key value:将值追加到键的值之后。

Hash(哈希)

Redis hash 是一个键值(key=>value)对集合,类似于一个小型的 NoSQL 数据库。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

每个哈希最多可以存储 2^32 - 1 个键值对。

常用命令

  • HSET key field value:设置哈希表中字段的值。
  • HGET key field:获取哈希表中字段的值。
  • HGETALL key:获取哈希表中所有字段和值。
  • HDEL key field:删除哈希表中的一个或多个字段。

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

列表最多可以存储 2^32 - 1 个元素。

常用命令

  • LPUSH key value:将值插入到列表头部。
  • RPUSH key value:将值插入到列表尾部。
  • LPOP key:移出并获取列表的第一个元素。
  • RPOP key:移出并获取列表的最后一个元素。
  • LRANGE key start stop:获取列表在指定范围内的元素。

Set(集合)

Redis 的 Set 是 string 类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

常用命令

  • SADD key value:向集合添加一个或多个成员。
  • SREM key value:移除集合中的一个或多个成员。
  • SMEMBERS key:返回集合中的所有成员。
  • SISMEMBER key value:判断值是否是集合的成员。

zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

常用命令

  • ZADD key score value:向有序集合添加一个或多个成员,或更新已存在成员的分数。
  • ZRANGE key start stop [WITHSCORES]:返回指定范围内的成员。
  • ZREM key value:移除有序集合中的一个或多个成员。
  • ZSCORE key value:返回有序集合中,成员的分数值。

四、Redis的数据持久化

持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

  • RDB:快照方式,直接将内存中的数据以二进制格式保存在硬盘上;
    • 恢复速度快,redis重启后会自动恢复数据;
    • 不能实时保存,一般在重启Redis前手动或自动生成RDB文件;
    • 手动保存save/bgsave
    • 自动保存:redis.conf中设置save m n,m秒内有n次修改则保存;
  • AOF:追加日志文件方式,当执行写入操作时(增、删、改),将执行的命令写入到aof日志中,当Redis重启时会将AOF日志中的所有命令重新执行一遍;
    • 数据不容易丢失,但是恢复速度较慢,文件较大;
    • 三种备份模式:实时备份、每秒备份、系统空闲备份;

五、Redis集群

  • 主从模式:第一次同步时,主服务器生成快照发送给所有从服务器,从服务器同步数据,之后主服务器在执行写操作时,将执行的命令同步转发给从服务器,实现数据的同步。
    • 主服务器可读可写
    • 从服务器只读
    • 主服务器一旦宕机,则无法写入数据,需要手动切换主从;
  • 哨兵模式:Redis自带的高可用模式,使用哨兵进程监控主服务器,每秒ping一次,心跳检测,如果主服务器宕机,则会根据规则选举一台从服务器成为新的主服务器,让其他从服务器自动关联该新主服务器;
    • 单哨兵
    • 多哨兵模式
  • 集群模式:分布式缓存模式,将海量数据拆分到多台服务器,根据算法进行数据的存储和读取;

主从模式

什么是主从复制?

Master可以拥有多个slave;多个slave可以连接同一个Master外,还可以连接到其他的slave;主从复制不会阻塞Master,在主从复制时,Master可以处理client请求。

主从复制的作用:

数据备份:将master的数据,备份到slave

读写分离:用master来写入数据,用slave完成备份后,来完成只读的功能。

注意:当master宕机后,不会去选择slave作为master。需要手动将一台slave使用slaveof on one 提升为master,要想自动实现提升,我们就需要使用哨兵。

“单机多实例”是指在一台物理服务器(或虚拟机)上同时运行同一个软件的多个独立副本(即 “实例”)的部署方式。这种方式在软件开发、测试、服务部署等场景中较为常见,其核心是通过隔离资源和配置,让多个实例在同一台机器上并行工作,同时避免相互干扰。

“单机多实例” 需要注意:服务端口号不能相同、配置文件、PID文件、数据文件路径(或名称)不同一样,否则服务无法正常启动。

多机主从:

  • 主服务器不用改配置

  • 从服务器修改配置:replicaof 192.168.8.131 6379 #主服务这句话注释,从服务配置的需要开启。配置主服务的ip的port。

  • 修改完配置之后重启服务

  • 登录客户端输入info replication进行查看

手动设置主从:

  • 当主服务器宕机之后,找一个从服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
  • 其余服务器执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。host是现在主服务器的IP地址。

哨兵模式

为什么要启动哨兵模式

当我们的主服务器宕机后,要手动的去切换主从模式,这样的人工干预,费事费力,还会造成一段时间我们的服务不能使用。所有我们要使用哨兵模式来解决这一问题。

什么是哨兵模式

哨兵是对Redis的系统的运行情况的监控,它是一个独立进程,功能有两个:

一是监控主机Redis和从机Redis是否运行正常;二是主机Redis出现故障后自动将从机转化为主机;

哨兵功能

集群监控:负责监控主从集群中的Master和Slave进程是否正常工作。

故障转移(failover):如果Master宕机,会自动从Slave中选举出新的Master,进行主从自动切换。

配置中心:如果发生了故障转移,Sentinel负责通知客户端新的Master的地址。

消息通知:如果某个redis节点有故障,那么Sentsinel会发送报警消息给系统管理员。

单哨兵模式

修改配置文件:sentinel monitor mymaster 192.168.8.131 6379 1

启动哨兵:./bin/redis-sentinel ./etc/sentinel.conf

多哨兵模式

修改配置文件(所有哨兵):sentinel monitor mymaster 192.168.8.131 6379 2

启动哨兵(所有哨兵):./bin/redis-sentinel ./etc/sentinel.conf

集群模式

sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。

什么是集群模式

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

集群模式特点

  • 多个redis节点网络互联,数据共享

  • 所有的节点都是一主一从(也可以是一主多从),其中从节点不提供服务,仅作为备用

  • 不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上,并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为

  • 支持在线增加、删除节点

  • 客户端可以连接任何一个主节点进行读写

配置集群:

修改配置文件:

vim redis.conf appendonly yes cluster-enabled yes #(启动集群模式,开始玩耍) cluster-config-file nodes700*.conf#(这里700x最好和port对应上) cluster-node-timeout 5000 #redis节点宕机被发现的时间

启动redis服务

systemctl start redis.server 或 ./bin/redis-server ./etc/redis.conf

创建集群:

/usr/local/redis/bin/redis-cli --cluster create 192.168.8.131:6379 192.168.8.132:6379 192.168.8.133:6379 192.168.8.134:6379 192.168.8.135:6379 192.168.8.136:6379 --cluster-replicas 1 info cluster # Cluster cluster_enabled:1 #节点是否为cluster模式 。1是0否 cluster nodes #查看集群中的节点
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/16 11:01:39

终极指南:AI框架统一工具Ivy如何重塑机器学习开发

Ivy统一AI框架正在彻底改变机器学习开发者的工作方式,让代码在不同框架间实现无缝流转。这个革命性的工具解决了长期困扰AI开发者的框架碎片化问题,真正实现了"一次编码,处处运行"的开发理念。 【免费下载链接】ivy The Unified AI…

作者头像 李华
网站建设 2025/12/16 11:01:38

2026毕设ssm+vue基于兼职信息系统设计与实现论文+程序

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于动漫内容管理与展示系统的研究,现有研究主要以传统的内容管理系统(CMS)为主&#xff0…

作者头像 李华
网站建设 2025/12/16 11:01:19

5分钟精通Modbus调试:OpenModScan完整操作手册

5分钟精通Modbus调试:OpenModScan完整操作手册 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 还在为工业设备通讯问题困扰吗?OpenModScan开源M…

作者头像 李华
网站建设 2025/12/21 8:26:28

开源向量数据库驱动:本地AI应用加速实战指南

开源向量数据库驱动:本地AI应用加速实战指南 【免费下载链接】self-hosted-ai-starter-kit The Self-hosted AI Starter Kit is an open-source template that quickly sets up a local AI environment. Curated by n8n, it provides essential tools for creating …

作者头像 李华
网站建设 2025/12/16 10:59:00

Apache Mesos集群运维管理实战:高效运维策略与零停机升级指南

Apache Mesos集群运维管理实战:高效运维策略与零停机升级指南 【免费下载链接】mesos Apache Mesos 项目地址: https://gitcode.com/gh_mirrors/mesos2/mesos Apache Mesos作为业界领先的分布式系统内核,其集群运维管理能力直接影响整个基础设施的…

作者头像 李华
网站建设 2025/12/25 23:36:14

【CTF入门必看】分享8个适合练习CTF的平台,让你从菜鸟变大神!

【CTF入门必看】分享8个适合练习CTF的平台,让你从菜鸟变大神! 在网络安全领域,CTF(Capture The Flag)和渗透测试是每个技术爱好者梦寐以求的技能。但很多人会问:“我该怎么入门?去哪里练习&…

作者头像 李华