作者文章

fwq

FWQ
服务器教程
redis集合类型_动力节点Java学院整理
redis集合类型_动力节点Java学院整理 收藏 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《redis集合类型_动力节点Java学院整理》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 我们来看看Redis五大类型中的第四大类型:“集合类型”,集合类型还是蛮有意思的,先看redis手册,如下: 上面就是redis中的set类型使用到的所有方法,还是老话,常用的方法也就那么四个(CURD)。。。 一: 常用方法 1. SAdd   这个方法毫无疑问,就是向集合里面添加数据,比如下面这样,我往fruits集合里面添加喜爱的水果。 127.0.0.1:6379> sadd fruits apple (integer) 1 127.0.0.1:6379> sadd fruits banana (integer) 1 127.0.0.1:6379> smembers fruits 1) "banana" 2)…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis主从配置和底层实现原理解析(实战记录)
Redis主从配置和底层实现原理解析(实战记录) 收藏 本篇文章给大家分享《Redis主从配置和底层实现原理解析(实战记录)》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 我们使用Redis的时候往往都是主从模式或者集群架构,不会使用单台Redis服务。 一、Redis主从配置实战 我们使用master节点写输入,然后将数据同步到slave节点,从节点可以提供读取或者备份的功能,分担master节点压力。 redis主从架构搭建,配置从节点步骤 1、 复制一份redis.conf文件为redis-6380.conf cp ./redis.conf ./conf/redis-6380.conf 2、打开redis-6380.conf配置文件,将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir /usr/local/redis‐5.0.3/data/6380 # 指定数据存放目录 # 需要注释掉bind…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis去重的3种不同方法汇总
Redis去重的3种不同方法汇总 收藏 知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《Redis去重的3种不同方法汇总》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟! 唯一计数是网站系统中十分常见的一个功能特性,例如网站需要统计每天访问的人数 unique visitor (也就是 UV)。计数问题很常见,但解决起来可能十分复杂:一是需要计数的量可能很大,比如大型的站点每天有数百万的人访问,数据量相当大;二是通常还希望扩展计数的维度,比如除了需要每天的 UV,还想知道每周或每月的 UV,这样导致计算十分复杂。 在关系数据库存储的系统里,实现唯一计数的方法就是 select count(distinct ),它十分简单,但是如果数据量很大,这个语句执行是很慢的。用关系数据库另外一个问题是插入数据性能也不高。 Redis 解决这类计数问题得心应手,相比关系数据库速度更快,消耗资源更少,甚至提供了 3 种不同的方法。 1.基于 set Redis 的 set 用于保存唯一的数据集合,通过它可以快速判断某一个元素是否存在于集合中,也可以快速计算某一个集合的元素个数,另外和可以合并集合到一个新的集合中。涉及的命令如下: 复制代码 代码如下: SISMEMBER key…
2025-05-10 阅读全文 →
FWQ
服务器教程
一文聊聊 Redis 的缓存场景
一文聊聊 Redis 的缓存场景 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《一文聊聊 Redis 的缓存场景》,介绍一下缓存、数据、架构,希望对大家的知识积累有所帮助,助力实战开发!   序言 夏日炎炎,无风。从空调房间出来,再到接近四十度的高温,这个过程,缓存预热了解一下…… 为什么要用缓存?因为追求性能,因为要追求极致的用户体验。 缓存理论 1、缓存适合的场景 缓存,就是将一些需要读取数据放在磁盘或者内存中,由于是追求速度,从而一般放在内存中。 在读取数据的时候,一般是从关系型数据库中读取数据,在数据库层面也可以进行各种优化,例如读性能不足,那么可以添加几个从库,从而数据库的一主多从;例如写性能不足,那么可以分库分表。 在有些场景中,要使用缓存,是因为无法解决读的速度,例如count(*)的操作,无论从数据库的层面如何优化,都不可能提高;还有一种就是sql的执行本身就必须消耗很多资源和时间,例如各种关联查询子查询,这些时候,都可以将这些数据放在缓存当中,从而大大的减轻数据库的压力。 2、缓存穿透问题 在使用缓存的时候,第一个问题就是缓存穿透的问题,就是使用了缓存和没使用缓存是一样的,应用程序到缓存中查询数据,发现数据么有,那么就去数据库查询,在这里,穿透了缓存,缓存没起到保护数据库的作用。 在爬虫爬取网页的时候,每个分页都会爬取,而对于缓存的分页数据,一般只缓存了热点数据,也就是前几页的数据在缓存当中,如果全部爬取,那么就会造成缓存不命中,导致查询数据库;还有一种就是故意搜索一些不存在的关键字,而这些搜索的结果都没有数据,在数据库中也不存在数据,从而造成缓存穿透。 此种解决方法就是:当用户进行第一次查询的时候发现结果为空,那么可以将结果放在缓存中,设置一个短暂的过期时间,从而可以缓解穿透的问题;而对于爬虫的爬取数据,只能进行监控,然后进行访问的IP,依旧只能缓解,不能完全解决。 3、缓存雪崩的问题 缓存雪崩指的是当缓存失效之后,从而引起系统性能的急剧下降,导致数据库不可用从而系统挂掉。 缓存最关键的地方就是内存,当内存满了之后,会有各种策略将缓存进行失效,在分布式环境下,如果有一个缓存失效,而恰好这个缓存是一个热点数据,前端有10个应用都需要访问这个缓存,并且TPS很高的话,那么全部的线程都会去访问数据库,从而能直接将数据库拖垮。 应对缓存雪崩,有很多策略,例如可以设置两个缓存的key,而具有不同的失效时间,当key1失效之后,访问key2,然后更新key1和key2;可以使用分布式锁,从而当应用发现缓存失效之后,拿到锁的线程才去更新缓存;可以使用消息通知机制,当应用发现缓存失效之后,发送消息,然后后台线程进行更新缓存,后台线程会检测缓存中是否存在缓存,如果存在就不更新;专门用一个后台线程来更新缓存,快速的检测缓存是否存在,然后更新缓存,此种也可以解决缓存不一致的问题。 4、缓存命名和失效时间 在使用缓存的时候,都需要一个key,那么这个key怎么命名呢?key太长,占用内存,会使得缓存中能存储的数据减少;key一般的命名规则可以为SQL:1782,表示为这是缓存一个sql的结果,然后用冒号分割,然后表示为缓存的编号,可以为各种sql条件的hash后的结果,这种命名规则的好处就是,在每次在缓存里查询的时候,可以使用通配符,从而可以查询到有多少个缓存在系统中。 缓存的失效时间,这个和业务强相关,对于一些时效性比较高的数据,就不能放在缓存当中,而对于一些不经常变化的数据,可以放在缓存当中,例如一天,缓存主要是应对读多写上的应用,从而大部分的数据例如在搜索的结果的分页数据,这种实时性无须太高,可以放在缓存当中。。。主要看业务的容忍程度,也影响到一部分的用户体验,可能我放入了缓存,更新了,刷新下,还没有更新。 5、缓存预热和缓存热点问题…
2025-05-10 阅读全文 →
FWQ
服务器教程
关于Redis单线程的正确理解
关于Redis单线程的正确理解 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《关于Redis单线程的正确理解》,聊聊Redis单线程,希望可以帮助到正在努力赚钱的你。 很多同学对Redis的单线程和I/O多路复用技术并不是很了解,所以我用简单易懂的语言让大家了解下Redis单线程和I/O多路复用技术的原理,对学好和运用好Redis打下基础。 一、Redis的单线程理解 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有到达服务端的命令都不会立刻执行,所有的命令都会进入一个队列中,然后逐个执行,并且多个客户端发送的命令的执行顺序是不确定的,但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。 Redis服务器通过socket(套接字)与客户端或其他Redis服务器进行连接,而文件事件就是服务器对socket操作的抽象。服务器与客户端或其他服务器的通信会产生相应的文件事件,而服务器通过监听并处理这些事件来完成一系列网络通信操作。 Redis基于Reactor模式开发了自己的网络事件处理器——文件事件处理器,文件事件处理器使用I/O多路复用程序来同时监听多个socket(I/O多路复用技术下面有介绍),并根据socket目前执行的任务来为socket关联不同的事件处理器。当被监听的socket准备好执行连接应答、读取、写入、关闭等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用socket之前已关联好的事件处理器来处理这些事件。 文件事件处理器的构成:                                      …
2025-05-10 阅读全文 →
FWQ
服务器教程
如何使用Redis和PHP实现分布式锁机制
如何使用Redis和PHP实现分布式锁机制 “纵有疾风来,人生不言弃”,这句话送给正在学习数据库的朋友们,也希望在阅读本文《如何使用Redis和PHP实现分布式锁机制》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新数据库相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢! 如何使用Redis和PHP实现分布式锁机制 在分布式系统中,常常需要使用锁来保证资源的一致性和并发控制。Redis是一个常用的内存数据库,它支持高性能、分布式部署,并且具备原子操作的特点,因此被广泛应用于分布式锁的实现。 本文将介绍如何使用Redis和PHP实现分布式锁机制,并提供代码示例。 安装Redis扩展首先,需要在PHP环境中安装Redis扩展。可以通过以下命令在Linux环境下安装Redis扩展: $ pecl install redis 在Windows环境下,可以从PECL网站(https://pecl.php.net/package/redis)下载预编译的Redis扩展,并按照网站提供的安装步骤进行安装。 连接Redis服务器使用Redis实现分布式锁,首先需要连接到Redis服务器。可以通过以下代码创建Redis连接对象: $redis = new Redis(); $redis->connect('127.0.0.1', 6379); 加锁和释放锁在分布式锁的实现中,通常使用Redis的SETNX命令(SET if Not eXists)来实现加锁操作。当某个资源需要锁定时,尝试使用SETNX命令往Redis中写入一个带有过期时间的键,如果写入成功,表示加锁成功;否则,表示锁已经存在。 以下是PHP代码示例: $lockKey = 'resource_lock'; $expireTime =…
2025-05-10 阅读全文 →
FWQ
服务器教程
windows 64位下redis安装教程
windows 64位下redis安装教程 收藏 IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《windows 64位下redis安装教程》,聊聊WindowsRedis,我们一起来看看吧! 一、下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址: github下载地址: 二、安装Redis 1.这里下载的是Redis-x64-3.2.100版本,我的电脑是win7 64位,所以下载64位版本的,在运行中输入cmd,然后把目录指向解压的Redis目录。 2、启动命令 redis-server redis.windows.conf,出现下图显示表示启动成功了。 三、设置Redis服务 1、由于上面虽然启动了redis,但是只要一关闭cmd窗口,redis就会消失。所以要把redis设置成windows下的服务。 也就是设置到这里,首先发现是没用这个Redis服务的。 2、设置服务命令 redis-server –service-install redis.windows-service.conf –loglevel verbose 输入命令之后没有报错,表示成功了,刷新服务,会看到多了一个redis服务。 3、常用的redis服务命令。 卸载服务:redis-server –service-uninstall…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis实现分布式锁的几种方案
Redis实现分布式锁的几种方案 收藏 欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《Redis实现分布式锁的几种方案》,这篇文章主要讲到分布式、Redis、锁等等知识,如果你对数据库相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习! 1.前言 对于Redis实现分布式锁的几种方案这个话题,展开之前我想先简单聊聊什么是分布式锁,分布式锁的使用场景,除了Redis外还有什么技术实现分布式锁等一系列内容。 1.1分布式锁 说大一点,就是在现在发展越来越迅速的大背景下,去中心化分布式系统越来越普及,在我们实际的生产开发当中,有一种不可避免的场景就是多个进程互斥的对其资源的使用,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,且保证在多进程下的数据安全,分布式锁就十分重要了。 1.2分布式锁的几种方案 方式有很多种,根据技术角度的不同 有基于MySQL的方式,通过表的唯一索引,通过insert和delete就可以实现加锁和解锁的效果; 有基于zookeeper的方式,通过创建临时有序节点,判断创建的节点序号是否最小。若是,则表示获取到锁,不是,则watch /lock目录下序号比自身小的前一个节点,解锁只需要删除节点; 有基于Redis的方式。通过执行setnx,若成功再执行expire添加过期时间的方式加锁,解锁执行delete命令。 方式有很多,不一一列举了。 1.3Redis分布式锁需要满足的条件 互斥性。在任意时刻,只有一个客户端能持有锁。 不发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁也能保证后续其他客户端能加锁。 同一性。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了,即不能误解锁。 容错性。只要大多数Redis节点正常运行,客户端就能够获取和释放锁。 2.Redis实现分布式锁的几种方案 可以通过以下方式实现(包括但不限于): SETNX + EXPIRE SETNX + value(系统时间+过期时间) 通过开源框架-Redisson…
2025-05-10 阅读全文 →
FWQ
服务器教程
华为云分布式缓存Redis服务助力企业数据处理加速
华为云分布式缓存Redis服务助力企业数据处理加速 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《华为云分布式缓存Redis服务助力企业数据处理加速》,介绍一下华为云,希望对大家的知识积累有所帮助,助力实战开发!  华为云分布式缓存Redis服务是兼容Redis的内存数据库服务,基于双机热备的高可用架构,提供单机、主从、集群等丰富类型的缓存类型,为用户提供高性能、高可用、可伸缩的数据缓存服务。与自建开源的Redis相比,华为云分布式缓存Redis服务更简单易用,安全可靠,解决了自建开源Redis在容量、部署、运维、安全性等方面的不足之处。 在云计算环境下,日益增长的海量数据与用户请求为缓存服务带来新的挑战,当前云缓存存在的局限也逐渐显现出来: 弹性方面: ·云缓存受限于ECS的规格单位,2N固定规格; ·实例启动时间5分钟。 性能方面: ·受限于底层虚拟机配置,无法充分利用Redis性能; ·不可避免的Hypervisor开销; ·目前常见的Proxy集群架构受制于Proxy的性能。 资源利用率方面: ·基于成本和客户场景的规格; ·非必要功能的使用影响整体资源利用率。 为了突破当前云缓存在弹性、性能、资源利用率等方面的局限,华为云DCS2.0应运而生。DCS2.0是一个在华为云上提供的新一代分布式缓存,主要聚焦以下几点: 1、灵活弹性:低至128M微实例,以G为单位伸缩 垂直伸缩:每个缓存节点的存储容量可以平滑伸缩 水平伸缩:基于原生Cluster集群的sharding 功能做到真正的水平伸缩 2、***性能:物理机部署+容器化,消除虚拟层开销;原生集群突破proxy限制 物理机部署+容器化消除虚拟层开销 打破Proxy的性能瓶颈 3、更优化性价比:单实例内存利用率100%,大数据场景下冷数据offload到Flash 通过容器隔离,将OS开销、主备复制开销等消耗均摊,每个单实例的内存利用率100%。 大数据场景下通过将冷数据offload到Flash,提供更高的性价比选择 华为云新一代分布式缓存Redis服务提供标准的、可持久化的内存数据库服务,满足用户高读写性能及快速数据访问的业务诉求,助力企业应用数据处理加速!目前用户可在华为云官网上免费领取Redis实例,一键开通,方便灵活!并且,现在体验Redis就有机会获得星巴克咖啡双人券。用星说出你的爱,Redis等你来表白!欢迎大家参与Redis表白活动:
2025-05-10 阅读全文 →
FWQ
服务器教程
Springboot集成Redis实例分析
Springboot集成Redis实例分析 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《Springboot集成Redis实例分析》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发! 依赖包         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-data-redis</artifactId>         </dependency> 配置文件(application.properties) # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=x.x.x.x # Redis服务器连接端口 spring.redis.port=6738 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接超时时间(毫秒) spring.redis.timeout=10000 # 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool.max-wait=-1ms # 连接池中的最大空闲连接 spring.redis.jedis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.jedis.pool.min-idle=0 配置文件(RedisConfig.java)…
2025-05-10 阅读全文 →