分类归档

服务器教程

服务器知识、操作系统教程、服务器常用软件等

FWQ
服务器教程
如何搭建Redis高可用架构?
如何搭建Redis高可用架构? 0浏览 收藏 从现在开始,我们要努力学习啦!今天我给大家带来《如何搭建Redis高可用架构?》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习! 持久化机制 在理解集群架构前,先要介绍一下redis的持久化机制,因为在后面的集群中会涉及到持久化。redis持久化是将缓存在内存中的数据根据一些规则进行落盘,以防止在redis服务宕机时可以进行数据恢复或者是集群架构中进行主从节点数据同步。redis持久化的方式有RDB和AOF两种,在4.0版本后新出了混合持久化模式。 RDB RDB是redis默认开启的持久化机制,其持久化方式是按照用户配置的规则"X秒内至少发生过Y次改动",生成快照并落盘到dump.rdb二进制文件中。默认情况下,redis配置了三种,分别为900秒内至少发生过1次缓存key的改动,300秒内至少发生过10次缓存key的改动以及60秒内至少发生过10000次改动。 除了redis自动快照持久化数据外,还有两个命令可以帮助我们手动进行内存数据快照,这两个命令分别为save和bgsave。 save:以同步的方式进行数据快照,当缓存数据量大,会阻塞其他命令的执行,效率不高。 bgsave:以异步的方式进行数据快照,有redis主线程fork出一个子进程来进行数据快照,不会阻塞其他命令的执行,效率较高。由于是采用异步快照的方式,那么就有可能发生在快照的过程中,有其他命令对数据进行了修改。为了避免这个问题reids采用了写时复制(Cpoy-On-Write)的方式,因为此时进行快照的进程是由主线程fork出来的,所以享有主线程的资源,当快照过程中发生数据改动时,那么该数据会被复制一份并生成副本数据,子进程会将改副本数据写入到dump.rdb文件中。 RDB快照是以二进制的方式进行存储的,所以在数据恢复时,速度会比较快,但是它存在数据丢失的风险。假如设置的快照规则为60秒内至少发生100次数据改动,那么在50秒时,redis服务由于某种原因突然宕机了,那在这50秒内的所有数据将会丢失。 AOF AOF是Redis的另一种持久化方式,与RDB不同时是,AOF记录着每一条更改数据的命令并保存到磁盘下的appendonly.aof文件中,当redis服务重启时,会加载该文将并再次执行文件中保存的命令,从而达到数据恢复的效果。默认情况下,AOF是关闭的,可以通过修改conf配置文件来进行开启。  # appendonly no  关闭AOF持久化  appendonly yes   # 开启AOF持久化  # The name of the append only file (default: "appendonly.aof")  appendfilename "appendonly.aof" # 持久化文件名 AOF提供了三种方式,可以让命令保存到磁盘。默认情况下,AOF采用appendfsync everysec的方式进行命令持久化。 appendfsync always #每次有新的改写命令时,都会追加到磁盘的aof文件中。数据安全性最高,但效率最慢。 appendfsync everysec # 每一秒,都会将改写命令追加到磁盘中的aof文件中。如果发生宕机,也只会丢失1秒的数据。 appendfsync no #不会主动进行命令落盘,而是由操作系统决定什么时候写入到磁盘。数据安全性不高。 开启AOF后需要重新启动redis服务,当再次执行相关改写命令时,aof文件中会记录操作的命令。 相对于RDB,虽然AOF的数据安全性更高,但是随着服务的持续运行,aof的文件也会越来越大,等到下次恢复数据时,速度会越来越慢。如果RDB和AOF都开启,在恢复数据时,redis会优先选择AOF,毕竟AOF丢失的数据更少啊。 RDB AOF 恢复效率…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redisson如何解决redis分布式锁过期时间到了业务没执行完问题
Redisson如何解决redis分布式锁过期时间到了业务没执行完问题 0浏览 收藏 一分耕耘,一分收获!既然打开了这篇文章《Redisson如何解决redis分布式锁过期时间到了业务没执行完问题》,就坚持看下去吧!文中内容包含分布式锁、过期、Redissonredis、业务执行等等知识点…希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢! 面试问题 Redis锁的过期时间小于业务的执行时间该如何续期? 问题分析 首先如果你之前用Redis的分布式锁的姿势正确,并且看过相应的官方文档的话,这个问题So easy.我们来看 很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了,其实Redis分布式锁比较正确的姿势是采用redisson这个客户端工具 如何回答 默认情况下,加锁的时间是30秒.如果加锁的业务没有执行完,那么到 30-10 = 20秒的时候,就会进行一次续期,把锁重置成30秒.那这个时候可能又有同学问了,那业务的机器万一宕机了呢?宕机了定时任务跑不了,就续不了期,那自然30秒之后锁就解开了呗. 一、写在前面 现在面试,一般都会聊聊分布式系统这块的东西。通常面试官都会从服务框架(Spring Cloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识。 所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。 说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用。 大家如果有兴趣,可以去看看Redisson的官网,看看如何在项目中引入Redisson的依赖,然后基于Redis实现分布式锁的加锁与释放锁。 下面给大家看一段简单的使用代码片段,先直观的感受一下: 怎么样,上面那段代码,是不是感觉简单的不行! 此外,人家还支持redis单实例、redis哨兵、redis cluster、redis master-slave等各种部署架构,都可以给你完美实现。 二、Redisson实现Redis分布式锁的底层原理 好的,接下来就通过一张手绘图,给大家说说Redisson这个开源框架对Redis分布式锁的实现原理。…
2024-12-01 阅读全文 →
FWQ
服务器教程
如何使用Redis和Lua开发分布式数据结构功能
如何使用Redis和Lua开发分布式数据结构功能 收藏 数据库小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《如何使用Redis和Lua开发分布式数据结构功能》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发! 如何使用Redis和Lua开发分布式数据结构功能 在现代分布式系统中,数据结构的管理是一个重要的方面。Redis作为一款高性能的缓存数据库,通过支持多种数据结构,为我们提供了强大的功能。而Lua作为一种轻量级脚本语言,与Redis的高可扩展性和性能完美结合,使得我们可以通过编写Lua脚本来实现更复杂的分布式数据结构功能。 Redis提供的分布式数据结构有String、List、Hash、Set和Sorted Set等。而Lua通过Redis的EVAL命令,允许我们在Redis服务器端执行Lua脚本,从而实现复杂的业务逻辑。 本文将以实际代码示例的形式,介绍如何使用Redis和Lua开发分布式数据结构功能。 String数据结构 String数据结构是Redis最简单的数据结构,可以用来存储任意类型的value,例如字符串、数字、JSON等。下面是一个使用Lua脚本实现原子加减操作的示例: -- 脚本代码 local key = KEYS[1] -- 键名 local value = ARGV[1] -- 值 local current = redis.call('GET',…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis锁完美解决高并发秒杀问题
Redis锁完美解决高并发秒杀问题 0浏览 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《Redis锁完美解决高并发秒杀问题》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下高并发、秒杀、Redis锁,希望所有认真读完的童鞋们,都有实质性的提高。 场景:一家网上商城做商品限量秒杀。 1 单机环境下的锁 将商品的数量存到Redis中。每个用户抢购前都需要到Redis中查询商品数量(代替mysql数据库。不考虑事务),如果商品数量大于0,则证明商品有库存。然后我们在进行库存扣减和接下来的操作。因为多线程并发问题,我们不得不在get()方法内部使用同步代码块。这样可以保证查询库存和减库存操作的原子性。 package springbootdemo.demo.controller; /* * @auther 顶风少年 * @mail dfsn19970313@foxmail.com * @date 2020-01-13 11:19 * @notify * @version 1.0 */ import…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis对象与redisObject超详细分析源码层
Redis对象与redisObject超详细分析源码层 0浏览 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Redis对象与redisObject超详细分析源码层》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 以下内容是基于Redis 6.2.6 版本整理总结 一、对象 前面几篇文章,我们介绍了Redis用到的主要的数据结构,如:sds、list、dict、ziplist、skiplist、inset等。 但是,Redis并没有直接使用这些数据结构来实现key-value数据库,而是基于这些数据结构构建了一个对象系统。包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象五种类型的对象。每种对象都使用了至少一种前面提到的数据结构。 通过对对象的区分,Redis可以在执行命令前判断该对象是否能够执行该条命令。为对象设置不同的数据结构实现,只要是为了提高效率。 二、对象的类型及编码 Redis使用对象来表示数据中的key和value,每当我们在Redis数据库中创建一个新的键值对时,至少会创建两个对象,一个作用域key,另一个作用于value。 举个栗子:set msg “hello world” 表示分别创建了一个字符串对象保存“msg”,另一个字符串对象保存“hello world”: redisObject 结构体 Redis中的每个对象由 redisObject 结构体来描述,对象的类型、编码、内存回收、共享对象都需要redisObject的支持,redisObject 结构体定义如下: #define LRU_BITS 24…
2024-12-01 阅读全文 →
FWQ
服务器教程
如何使用Redis和Ruby实现分布式会话管理功能
如何使用Redis和Ruby实现分布式会话管理功能 收藏 最近发现不少小伙伴都对数据库很感兴趣,所以今天继续给大家介绍数据库相关的知识,本文《如何使用Redis和Ruby实现分布式会话管理功能》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~ 如何使用Redis和Ruby实现分布式会话管理功能 概述随着网站访问量和用户规模的增加,单一服务器的会话管理机制往往无法满足需求。为了解决这个问题,分布式会话管理应运而生。在本文中,我们将介绍如何使用Redis和Ruby实现分布式会话管理功能。 RedisRedis是一个开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希表、列表、集合等。作为一个高性能的键值数据库,Redis常被用于缓存、消息队列和会话管理等场景。在本文中,我们将使用Redis作为分布式会话存储介质。 RubyRuby是一种优雅的、面向对象的动态编程语言,它简单易学、代码简洁。Ruby是一种非常适合构建Web应用程序的编程语言,凭借其丰富的第三方库以及轻松连接各种数据库的能力,Ruby在Web开发领域得到了广泛的应用。在本文中,我们将使用Ruby来实现分布式会话管理功能。 分布式会话管理的要求在实现分布式会话管理之前,我们需要确定我们的需求和目标。以下是一些常见的要求: 无状态性:任何服务器都可以处理用户请求,无需考虑用户的历史会话。 容错性:当一台服务器宕机时,会话信息不会丢失,并且能够在其他服务器上继续处理。 多服务器共享会话信息:当用户在不同服务器上进行切换时,会话信息能够被正确恢复。 高性能和可扩展性:能够处理大量的并发请求,并支持随时扩展服务器集群。 基于以上要求,我们可以设计一个简单高效的分布式会话管理方案。 实现分布式会话管理 安装Redis和Ruby首先,我们需要安装Redis和Ruby。Redis的安装非常简单,可以根据官方文档进行操作。Ruby的安装可以使用rbenv或者RVM等工具。 创建一个Ruby项目请进入一个空的目录,并执行以下命令: $ mkdir distributed_session $ cd distributed_session $ touch Gemfile 在Gemfile文件中,加入以下内容: source 'https://rubygems.org'…
2024-12-01 阅读全文 →
FWQ
服务器教程
使用Redis和C++构建高性能的图像处理应用
使用Redis和C++构建高性能的图像处理应用 收藏 学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《使用Redis和C++构建高性能的图像处理应用》,以下内容主要包含等知识点,如果你正在学习或准备学习数据库,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了! 使用Redis和C++构建高性能的图像处理应用 图像处理是现代计算机应用中的重要环节之一。由于图像处理的复杂性和计算量大,如何在保证高性能的同时提供稳定的服务是一个挑战。本文将介绍如何使用Redis和C++构建高性能的图像处理应用,并提供一些代码示例。 Redis是一个开源的内存数据库,具有高性能和高可用性的特点。它支持各种数据结构,如字符串、哈希表、列表等,同时可以持久化数据到磁盘。在图像处理应用中,我们可以将图像数据存储在Redis中,通过C++编写的应用程序对图像进行处理。 首先,我们需要安装Redis,并启动Redis服务。在Ubuntu系统中,可以使用以下命令安装Redis: $ sudo apt-get update $ sudo apt-get install redis-server 安装完成后,可以使用以下命令启动Redis服务: $ redis-server 接下来,我们需要使用C++编写一个图像处理的应用程序。下面是一个简单的示例,该程序使用OpenCV库读取图像文件,并将图像数据存储在Redis中: #include <iostream> #include <opencv2/opencv.hpp> #include <redisclient/redissyncclient.h> int main()…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis哨兵模式实现一主二从三哨兵
Redis哨兵模式实现一主二从三哨兵 0浏览 收藏 怎么入门数据库编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Redis哨兵模式实现一主二从三哨兵》,涉及到Redis哨兵、一主二从三哨兵,有需要的可以收藏一下 一、redis环境: 环境:redis6.2.6linux虚拟机一台,contos7; 二、哨兵介绍: 1.一主二从三哨兵理论图: 一主两从三哨兵集群,当master节点宕机时,通过哨兵(sentinel)重新推选出新的master节点,保证集群的可用性。 2.哨兵的主要功能:1.集群监控:负责监控 Redis master 和 slave 进程是否正常工作。2.消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。3.故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。4.配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。 PS:根据推举机制,集群中哨兵数量最好为奇数(3、5…)…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis 对比 Memcached 并在 CentOS 下进行安装配置详解
Redis 对比 Memcached 并在 CentOS 下进行安装配置详解 0浏览 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Redis 对比 Memcached 并在 CentOS 下进行安装配置详解》,介绍一下Redis、memcachedcentos,希望对大家的知识积累有所帮助,助力实战开发! Redis 是一个开源、支持网络、基于内存、键值对的 Key-Value 数据库,本篇文章主要介绍了Redis 对比 Memcached 并在 CentOS 下进行安装配置详解,有兴趣的可以了解一下。 了解一下 Redis Redis 是一个开源、支持网络、基于内存、键值对的 Key-Value…
2024-12-01 阅读全文 →
FWQ
服务器教程
phpredis提高消息队列的实时性方法(推荐)
phpredis提高消息队列的实时性方法(推荐) 0浏览 收藏 怎么入门数据库编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《phpredis提高消息队列的实时性方法(推荐)》,涉及到redis消息队列,有需要的可以收藏一下 数据库存贮都用list形式 要存2个队列 1个用作消息队列保存到数据 还有个 就是用来实时读取数据在redis $redis->lpush($queenkey, json_encode($array)); $redis->lpush($listkey, json_encode($array)); /*消息队列实例*/ public function insertinfo() { $infos = array('info1' => mt_rand(10,100), 'info2' => mt_rand(10,100)); $this->insertinfos($infos, 'tutorial-list','tutoriallist');…
2024-12-01 阅读全文 →