分类归档

服务器教程

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

FWQ
服务器教程
通过kubesphere部署redis的方法
通过kubesphere部署redis的方法 0浏览 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《通过kubesphere部署redis的方法》,介绍一下Redis、kubesphere部署,希望对大家的知识积累有所帮助,助力实战开发! docker部署redis命令 docker run --name redis -p 6379:6379 -d --restart=always a4d3716dbb72 redis-server --appendonly yes --requirepass "123456" 创建配置,点击配置中心->配置->创建配置 这里的配置信息就和上面redis-server后面的一样 创建存储卷 创建redis服务 选择无状态服务,因为有状态服务不能对外暴露端口,只有无状态服务才可以;当然如果上线部署的话还是要选择有状态服务,这里我们只是测试,选择无状态服务即可。 选择镜像后,这里需要配置启动命令,运行命令为redis-server,参数etc/redis/redis.conf 添加存储卷,目录为/data 挂在配置文件,这里我们选择上面配置的配置文件,路径和上面一致为/etc/redis/redis.conf,意思就是上面启动命令是启动/etc/redis/redis.conf配置文件,这里将redis-conf中的配置信息关联给/etc/redis/redis.conf 开启外网访问…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis:内存被我用完了!该怎么办?
Redis:内存被我用完了!该怎么办? 0浏览 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《Redis:内存被我用完了!该怎么办?》,聊聊内存、Redis、数据库,希望可以帮助到正在努力赚钱的你。 介绍 Redis是一个内存数据库,当Redis使用的内存超过物理内存的限制后,内存数据会和磁盘产生频繁的交换,交换会导致Redis性能急剧下降。所以在生产环境中我们通过配置参数maxmemoey来限制使用的内存大小。 当实际使用的内存超过maxmemoey后,Redis提供了如下几种可选策略。 noeviction:写请求返回错误 volatile-lru:使用lru算法删除设置了过期时间的键值对 volatile-lfu:使用lfu算法删除设置了过期时间的键值对 volatile-random:在设置了过期时间的键值对中随机进行删除 volatile-ttl:根据过期时间的先后进行删除,越早过期的越先被删除 allkeys-lru:在所有键值对中,使用lru算法进行删除 allkeys-lfu:在所有键值对中,使用lfu算法进行删除 allkeys-random:所有键值对中随机删除 我们来详细了解一下lru和lfu算法,这是2个常见的缓存淘汰算法。「因为计算机缓存的容量是有限的,所以我们要删除那些没用的数据,而这两种算法的区别就是判定没用的纬度不一样。」 LRU算法 「lru(Least recently used,最近最少使用)算法,即最近访问的数据,后续很大概率还会被访问到,即是有用的。而长时间未被访问的数据,应该被淘汰」 lru算法中数据会被放到一个链表中,链表的头节点为最近被访问的数据,链表的尾节点为长时间没有被访问的数据 「lru算法的核心实现就是哈希表加双向链表」。链表可以用来维护访问元素的顺序,而hash表可以帮我们在O(1)时间复杂度下访问到元素。 「至于为什么是双向链表呢」?主要是要删除元素,所以要获取前继节点。数据结构图示如下 使用双向链表+HashMap 双向链表节点定义如下 public class ListNode  {      K key; …
2024-12-01 阅读全文 →
FWQ
服务器教程
图解 | 深入理解跳表及其在Redis中的应用
图解 | 深入理解跳表及其在Redis中的应用 0浏览 收藏 本篇文章向大家介绍《图解 | 深入理解跳表及其在Redis中的应用》,主要包括Redis、应用、跳表,具有一定的参考价值,需要的朋友可以参考一下。 本文转载自微信公众号「后端技术指南针」,作者大白斯基。转载本文请联系后端技术指南针公众号。 跳跃链表及其应用是非常热门的问题,深入了解其中奥秘大有裨益,不吹了,快开始品尝这美味的知识吧! 跳跃链表的基本概念 初识跳表 跳跃列表是一种数据结构。它允许快速查询一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(log n),优于普通队列的O(n)。 跳跃列表由威廉·普发明,发明者对跳跃列表的评价:跳跃链表是在很多应用中有可能替代平衡树而作为实现方法的一种数据结构。 跳跃列表的算法有同平衡树一样的渐进的预期时间边界,并且更简单、更快速和使用更少的空间。 这种数据结构是由William Pugh(音译为威廉·普)发明的,最早出现于他在1990年发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》。 大白在谷歌上找到一篇作者关于跳表的论文,感兴趣强烈建议下载阅读: https://epaperpress.com/sortsearch/download/skiplist.pdf 看下这篇论文的摘要部分:…
2024-12-01 阅读全文 →
FWQ
服务器教程
redis的string类型及bitmap介绍
redis的string类型及bitmap介绍 0浏览 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《redis的string类型及bitmap介绍》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ redis运行原理 redis有很多的客户端连接进来,站在redis所在机器的角度来说,就是有很多socket的连接,并且是打在内核上面的,redis是一个进程,进程可以调用内核上的epoll,来遍历寻找哪一个客户端发送数据过来了(这里是单进程单线程来处理用户数据的)。 redis使用 redis默认有16个库 输入:进入基本分组 keys * 查询所有的keyFLUSHDB 清除所有的key 对于如上nx的命令是我当前的key如果没有被设置则把ooxx给设置成功,如果设置的key已经有value了,则返回nil (多用于分布式锁的获取,只能有一个获取成功) 对于xx命令,只有存在的时候才能进行操作。 mset命令(设置多个key和value) append命令以及getrange命令 redis正反向索引 前面是从0,1,2开始的,后面则是从-1开始递减的,所以也可以按照下面方式写 SETRANGE 在给定范围设置字符串: 获取字符串长度: 获取key所对应的value类型(主要是看set命令分组是在string上面的) 再来看一下object命令 它可以查看value的编码类型(面向 redis string类型,除了字符串操作还有计算的操作【计算的操作面向数值的】)…
2024-12-01 阅读全文 →
FWQ
服务器教程
Spring+Redis+RabbitMQ开发限流和秒杀项目功能
Spring+Redis+RabbitMQ开发限流和秒杀项目功能 0浏览 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Spring+Redis+RabbitMQ开发限流和秒杀项目功能》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 本文将围绕高并发场景中的限流和秒杀需求综合演示Spring Boot整合JPA、Redis缓存和RabbitMQ消息队列的做法。 本项目将通过整合Springboot和Redis以及Lua脚本来实现限流和秒杀的效果,将通过RabbitMQ消息队列来实现异步保存秒杀结果的效果。 一、项目概述 本项目将要实现的秒杀是指商家在某个时间段以非常低的价格销售商品的一种营销活动。 由于商品价格非常低,因此单位时间内发起购买商品的请求会非常多,从而会对系统造巨大的压力。对此,在一些秒杀系统中往往会整合限流的功能,同时会通过消息队列异步地保存秒杀结果。 本章将要实现的限流和秒杀功能归纳如下: (1)通过Spring Boot的控制器类对外接收秒杀请求。 (2)针对请求进行限流操作,比如秒杀商品的数量是10个,就限定在秒杀开始后的20秒内只有100个请求能参加秒杀,该操作是通过Redis来实现的。 (3)通过限流检验的这些请求将会同时竞争若干个秒杀商品。该操作将通过基于Redis的Lua脚本来实现。 (4)为了降低数据库的压力,秒杀成功的记录将通过RabbitMQ队列以异步的方式记录到数据库中。 (5)同时,将通过RestTemple对象以多线程的方式模拟发送秒杀请求,以此来观察本秒杀系统的运行效果。 也就是说,本系统会综合用到Spring Boot、JPA、Redis和RabbitMQ,相关组件之间的关系如图所示。 二、基于Redis的Lua脚本分析 Lua使用标准C语言开发而成的,它是一种轻量级的脚本语言,可嵌入基于Redis等的应用程序中。Lua脚本可以驻留在内存中,所以具有较高的性能,适用于处理高并发的场景。 Lua脚本的特性 Lua脚本语言是由巴西一所大学的Roberto lerusalimschy 、 Waldemar Celes和 LnHenrique…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis 安全问题详解:掌握这些措施保护您的数据
Redis 安全问题详解:掌握这些措施保护您的数据 0浏览 收藏 “纵有疾风来,人生不言弃”,这句话送给正在学习数据库的朋友们,也希望在阅读本文《Redis 安全问题详解:掌握这些措施保护您的数据》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新数据库相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢! Redis 是一种流行的 NoSQL 数据库,广泛用于许多 Web 应用程序和企业级应用程序中。然而,由于 Redis 提供了非常强大的功能和灵活性,因此它也存在着一些安全风险。在本文中,我们将概述 Redis 安全问题,并介绍一些应对策略。 Redis 安全问题概述 未授权访问 Redis 默认情况下不启用身份验证,这意味着任何人都可以连接到 Redis 服务器并执行操作。这可能会导致未授权的用户能够读取、修改或删除 Redis 数据库中的数据,进而泄露敏感信息或破坏应用程序。 网络安全 Redis 通常通过网络进行通信,这意味着它容易受到网络攻击。例如,黑客可以使用网络嗅探器拦截…
2024-12-01 阅读全文 →
FWQ
服务器教程
如何利用Redis和Node.js实现分布式数据同步功能
如何利用Redis和Node.js实现分布式数据同步功能 收藏 数据库不知道大家是否熟悉?今天我将给大家介绍《如何利用Redis和Node.js实现分布式数据同步功能》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步! 如何利用Redis和Node.js实现分布式数据同步功能 分布式系统是当今互联网应用中常见的架构之一。在分布式系统中,数据同步是一个重要的问题,特别是在面对大规模并发和高可靠性要求时。Redis是一个高性能的内存数据库,而Node.js是一个基于事件驱动的JavaScript运行环境。本文将介绍如何利用Redis和Node.js实现分布式数据同步功能,并给出相应的代码示例。 首先,我们需要在多个节点上安装和配置Redis。假设我们有三个节点,它们的IP地址分别为192.168.0.1、192.168.0.2和192.168.0.3。我们可以使用以下命令安装Redis: sudo apt-get update sudo apt-get install redis-server 接下来,我们需要在每个节点上配置Redis。打开redis.conf文件,找到bind和protected-mode这两个配置项,将它们的值分别修改为节点的IP地址和no。例如,对于节点192.168.0.1: bind 192.168.0.1 protected-mode no 然后重启Redis服务: sudo systemctl restart redis-server 现在,我们可以开始编写Node.js代码。首先,我们需要安装redis模块: npm install redis 然后,我们可以编写一个简单的Node.js脚本,实现数据同步的功能。以下是一个示例代码:…
2024-12-01 阅读全文 →
FWQ
服务器教程
SpringBoot怎么结合Aop+Redis防止接口重复提交
SpringBoot怎么结合Aop+Redis防止接口重复提交 0浏览 收藏 学习数据库要努力,但是不要急!今天的这篇文章《SpringBoot怎么结合Aop+Redis防止接口重复提交》将会介绍到等等知识点,如果你想深入学习数据库,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助! 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段: 1、数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据。 2、token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除token,下次请求再次判断token。 3、悲观锁或者乐观锁,悲观锁可以保证每次for update的时候其他sql无法update数据(在数据库引擎是innodb的时候,select的条件必须是唯一索引,防止锁全表) 4、先查询后判断,首先通过查询数据库是否存在数据,如果存在证明已经请求过了,直接拒绝该请求,如果没有存在,就证明是第一次进来,直接放行。 为什么要防止接口重复提交?对于有些敏感操作接口,比如新增数据接口、付款接口,要是用户操作不当多次点击提交按钮,这些接口就会被多次请求,最后可能导致系统异常。 前端可以如何控制?前端可以通过js进行控制,当用户点击提交按钮,1.按钮设置多少秒内不可点击状态2.按钮点击后弹出loading提示框,避免再次点击,直到接口请求返回后3.按钮点击后跳转到新的页面 但是,请记住,永远不要相信用户的行为,因为你不知道用户会做哪些奇葩的操作,所以,最重要的还是要在后端处理。 使用aop+redis进行拦截处理一.创建切面类RepeatSubmitAspect实现过程:接口请求后,token+请求路径作为key值去redis中读取数据,若能找到这个key,则证明是重复提交的,反之不是。若不是重复提交,则直接放行,并将这个key写入redis中,并设置一定时间过期(我这里是设置的5s过期) 在传统的web项目中,为了防止重复提交,通常做法是:后端生成唯一的提交令牌(uuid),存储在服务端,页面在发起请求时,携带次令牌,后端验证请求后删除令牌,保证请求的唯一性。但是,上诉的做法是需要前后端都需要进行改动,如果在项目初期,是可以实现的,但是,在项目的后期,很多功能都实现好了,不可能大范围的去改动。 思路1.自定义注解@NoRepeatSubmit 标记所有Controller中提交的请求2.通过AOP对所有标记了@NoRepeatSubmit 的方法进行拦截3.在业务方法执行前,获取当前用户的token或者JSessionId+当前请求地址,作为一个唯一的key,去获取redis分布式锁,如果此时并发获取,只有一个线程能获取到。4.业务执行后,释放锁 关于Redis分布式锁使用Redis是为了在负载均衡部署,如果是单机的项目可以使用一个本地线程安全的Cache替代Redis 代码自定义注解  import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /**  * @ClassName NoRepeatSubmit  * @Description 这里描述…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis如何实现分布式缓存功能
Redis如何实现分布式缓存功能 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Redis如何实现分布式缓存功能》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发! Redis如何实现分布式缓存功能,需要具体代码示例 摘要:Redis是一个高性能的数据缓存和存储系统,它具备分布式特性,可以支持分布式缓存的功能。本文将介绍Redis如何实现分布式缓存,并提供具体的代码示例来帮助读者理解。 概述分布式缓存是一种将数据分散存储在多个节点上的缓存系统,通过将数据存储在离应用程序更近的位置,加快了数据的访问速度和响应时间。Redis通过使用集群模式,实现了分布式缓存的功能。 Redis集群模式Redis集群是一个由多个节点组成的分布式系统,每个节点负责存储和处理一部分数据。集群中的节点通过Gossip协议进行通信,实现了数据的自动分片和节点的自动发现。 在Redis集群中,数据被自动划分为多个槽(slot),每个槽由一个节点负责管理。通过计算键的哈希值,可以确定它属于哪个槽,从而找到存储它的节点。当需要访问某个键时,应用程序会将请求发送到对应的节点上。 Redis分布式缓存的实现Redis通过使用集群模式来实现分布式缓存的功能。在集群中,每个节点都可以存储缓存数据。当需要将数据存储到缓存中时,应用程序会将数据发送到对应的节点。而当需要访问缓存数据时,应用程序会先计算键的哈希值,确定它所属的槽和节点,然后发送请求到对应的节点上。 具体的代码示例如下所示: // 引入Redis库 const Redis = require('ioredis'); // 创建Redis集群客户端 const cluster = new Redis.Cluster([{ host: 'node1.example.com', port: 6380 },…
2024-12-01 阅读全文 →
FWQ
服务器教程
Redis的分布式限流机制实现方法
Redis的分布式限流机制实现方法 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Redis的分布式限流机制实现方法》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 随着互联网应用的发展,高并发访问成为了互联网公司极为重要的问题。为了保证系统的稳定性,我们需要对访问进行限制,防止恶意攻击或者过度访问导致系统崩溃。限流机制被广泛应用于互联网应用中,其中Redis作为一个流行的缓存数据库,也提供了分布式限流的解决方案。 Redis的限流机制主要有以下两种实现方法: 1.基于令牌桶算法的限流 令牌桶算法是互联网常用的限流算法之一,Redis提供了基于令牌桶算法的限流方案。这种方案的实现主要基于Redis的有序集合(zset)和Lua脚本。 令牌桶算法的原理是一个固定容量的桶,按照一定的速率向其中放入令牌,每个请求需要先从桶中获取一个令牌才能被处理。如果桶中没有令牌,则这个请求被拒绝。 在Redis中,我们可以使用有序集合(zset)来构建令牌桶。有序集合中的每个元素表示一个令牌,它的score代表该令牌的到达时间,value可以是任意值。Lua脚本则用于实现获取令牌的操作。具体实现代码如下: -- 获取令牌 local function acquire_token(key, rate, capacity, now) local current_capacity = redis.call("zcount", key, "-inf", "+inf") local delta_time = 1000…
2024-12-01 阅读全文 →