redis技术
文章平均质量分 66
入门的话个人比较推荐这本书:
Redis开发与运维(付磊)、Redis入门指南
想深入学习的话,就这本:
Redis深度历险:核心原理和应用实践
YHJ
你有找到为之奋不顾身的事吗?
展开
-
WRONGTYPE Operation against a key holding the wrong kind of value
今天改动代码,一运行就跑错了,错误原因:因为redis中已经存在了相同的key, 而且key对应的值类型并不是Set,而是SortSet(改动前);再调用smembers时,抛出此错误。解决方法:将原来的SortSet类型的key给Del掉,再从新执行代码,没有问题。看来以后改动缓存类型时,要长个心眼,先把之前的同名不同类型的Key给Del掉。百闻不如一见,百见不如一做,只有做了,才知道问题出现在哪儿,才能去解决问题。...转载 2021-06-13 22:13:17 · 446 阅读 · 0 评论 -
redis中stringRedisTemplate中opsForList中方法的简单应用
opsForList操作List集合push操作分为leftpush和rightpush,其中leftpush是在list的左侧添加,即列表的头部,right是在list的左侧添加,即在列表的尾部。可以根据业务酌情选择。pop操作也分为left和right,意思和push一样。pop是获取一个元素,并且删除这个元素。如果只想要查看某个元素。可以使用range,他有三个参数,第一个参数是key,后面是搜索范围,全集合搜索可以用(key,0,-1);有时候希望给添加的缓存设置生命时间..转载 2021-06-13 23:56:11 · 4002 阅读 · 0 评论 -
用redis对文件进行存取
用redis对文件进行存取 问题背景:项目中没有文件服务器,项目结构是集群模式,由于负载均衡,导致文件写入和文件下载不在同一台服务器,会导致下载时找不到文件 文件存入,用base64将文件进行编码,然后将文件存入redis,适合文件不长期存储,代码如下 文件提取, 从redis中取出base64编码,然后进行反编码,生成文件 问题背景:项目中没有文件服务器,项目结构是集群模式,由于负载均衡,导致文件写入和文件下载不在同一台服务器,会导致下载时找不到文件文件存入,用base64将文.转载 2021-06-13 23:56:41 · 2983 阅读 · 1 评论 -
分布式环境下解决redis过期监听事件重复监听的解决方案
最近项目中用到了redis数据过期监听的功能,当单机的时候,很完美的完成了业务要求,但是,一上集群,就产生了恶心的问题,它会产生广播效应,显然这不是我们想要的结果,我们只希望集群中某一个工程去监听这个过期事件然后进行下一步操作。下面介绍一下我们在解决这个问题时锁采取的方式:方案:利用redis的getset 命令方法进行解决;思路是:在过期回调事件中利用getset设置 [ key(当前监听到的过期key)+".lock"作为新的key ],字符串"1"作为value,当某一个工程...转载 2021-06-12 09:40:50 · 2057 阅读 · 3 评论 -
redis远程连接后,输入命令出现Error:Server closed the connection
需要将 远程redis服务器的 protected-mode 设置为no。protected-mode默认是开启状态,当处于开启状态并且bind没有设置一组特定的地址也没有设置权限密码,redis只接受来自本机的指令。在没有绑定特定地址和没有设置权限面膜的情况下,就需要设置protected-mode为no。如果不想设置protected-mode为no,可以设置requirepass,然后远程连接时带上这个密码即可,redis-cli -h HOST -p port -a 'requirepass'转载 2021-06-11 21:23:00 · 3669 阅读 · 0 评论 -
Redis在win7上的可视化应用
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或转载 2021-06-11 21:21:56 · 540 阅读 · 0 评论 -
【面试】redis缓存穿透、缓存击穿、缓存雪崩区别和解决方案
设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。缓存穿透描述: 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,...转载 2021-05-11 22:49:19 · 252 阅读 · 0 评论 -
redis系列--主从复制以及redis复制演进
一、前言 在之前的文章已经详细介绍了redis入门基础已经持久化相关内容包括redis4.0所提供的混合持久化。 通过持久化功能,Redis保证了即使在服务器宕机情况下数据的丢失非常少。但是如果这台服务器出现了硬盘故障、系统崩溃等等,不仅仅是数据丢失,很可能对业务造成灾难性打击。为了避免单点故障通常的做法是将数据复制多个副本保存在不同的服务器上,这样即使有其中一台服务器出现故障,其他服务器依然可以继续提供服务。当然Redis提供了多种高可用方案包括:主从复制、哨兵模式的主从复制、以及集群。转载 2021-05-11 22:43:27 · 88 阅读 · 0 评论 -
Java实现redis管道
第一个例子redis的管道就是可以在给redis服务端发送了一个命令后,不用等待该命令执行返回,而继续发送下一个命令。最终将结果一起返回给客户端,这样可以显著提供响应时间,测试例子如下@Test public void test() { Jedis jedis = new Jedis("localhost"); jedis.auth("123"); //不使用管道的测试 long start = System.curre.转载 2021-05-11 22:29:10 · 1452 阅读 · 0 评论 -
Redis 的Transaction事务处理相关代码java实现
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。一个事务从开始到执行会经历以下三个阶段:开始事务。命令入队。执行事务。单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打转载 2021-05-10 07:17:00 · 302 阅读 · 0 评论 -
Redis实现消息队列的4种方案
原文链接:Redis实现消息队列的方案Redis作为内存中的数据结构存储,常用作数据库、缓存和消息代理。它支持数据结构,如 字符串,散列,列表,集合,带有范围查询的排序集(sorted sets),位图(bitmaps),超级日志(hyperloglogs),具有半径查询和流的地理空间索引。Redis具有内置复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区。为了实现其出色的性能,Redis使用内存数据集(in-memor转载 2021-05-10 07:09:01 · 8898 阅读 · 0 评论 -
正确访问Redis中的海量数据
一、前言有时候我们需要知道线上的Redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?并且通常情况下Redis里的数据都是海量的,那么我们访问Redis中的海量数据?如何避免事故产生!今天就给大家分享一个小知识点,希望大家轻喷。二、事故产生因为我们的用户token缓存是采用了【user_token:userid】格式的key,保存用户的token的值。我们运维为了帮助开发小伙伴们查一下线上现在有多少登录用户。直接用了keys user_token*方式进行查询,事故就此发转载 2021-05-09 22:48:06 · 412 阅读 · 0 评论 -
Redis5种数据类型使用场景梳理
Redis在我们日常工作中使用的非常频繁,但是很多同学只会使用string类型,那么今天笔者梳理下redis中常用的5种数据类型,分别适用于哪些业务场景和基本操作,让大家以后能够在合适的缓存场景使用合适的数据类型。String字符串类型Redis支持的字符串类型不是定长分配的字符串,是动态变长字符串,修改字符串在没有增加特别多内容的情况下不需要重新分配内存空间,内部结构实现上有点类似于java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。常用使用场景字符串类型常用的场景转载 2021-05-09 22:47:13 · 4565 阅读 · 0 评论 -
redis性能优化——生产中实际遇到的问题排查总结
背景redis-K,V数据库,因其高性能的操作性和支持丰富的数据结构,目前大量被用于衔接应用层和关系数据库中间的缓存层。随着使用的场景越来越多,和数据量快速的递增,在生产环境中经常会遇到相关的性能瓶颈问题。这时候就需要借助一些外部的手段来分析瓶颈根源在哪,对症下药提升性能。常见性能问题及问题分析过程1、生产系统刚开始运行阶段,系统稳定。但是运行一段时间后,发现部分时间段系统接口响应变慢。查看客户端日志经常会出现这样的错误:redis.clients.jedis.exceptions.Jedi转载 2021-05-09 22:45:54 · 2046 阅读 · 0 评论 -
Redis性能优化方案总结
一、优化的一些建议1、尽量使用短的key当然在精简的同时,不要为了key的“见名知意”。对于value有些也可精简,比如性别使用0、1。2、避免使用keys * keys *, 这个命令是阻塞的,即操作执行期间,其它任何命令在你的实例中都无法执行。当redis中key数据量小时到无所谓,数据量大就很糟糕了。所以我们应该避免去使用这个命令。可以去使用SCAN,来代替。3、在存到Redis之前先把你的数据压缩下redis为每种数据类型都提供了两种内部编码方式,在不同的情况下redis会.转载 2021-05-09 22:44:16 · 7676 阅读 · 0 评论 -
Redis实现延迟任务(过期取消订单)
1. 生产需求:用户下订单后,15分钟未支付自动取消; 用户成功下单支付后确认收货, 15天默认好评2. 实现思路利用redis的排序列表,ZSet进行需求实现, 下面是我的流程图和思路导线3. 思路说明我们把Zset中的score当成时间戳, 这样我们就可以获得以时间戳排序的任务列表, 这我们通过score区间进行拉取任务,进行消费.4.代码封装实现首先是封装延时队列的工厂(完美契合Spring框架), 如果想要创建自己的特色延时队列则需要继承这个抽象工厂延时队列工.转载 2021-05-09 22:24:58 · 2132 阅读 · 0 评论 -
Linux(四) linux安装redis集群(三主三从)
用1台虚拟机模拟6个节点,创建出3 master、3 salve 环境。1. 下载解压: cd /root/software wget http://download.redis.io/releases/redis-3.2.4.tar.gz tar -zxvf redis-3.2.4.tar.gz 2. 进入redis3.2.4目录,安装redis cd redis-3.2.4 make && make install..转载 2021-05-09 22:19:07 · 530 阅读 · 0 评论 -
Redis(三) Redis的持久化 RDB与AOF
Redis 持久化之RDB和AOFRedis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。如果你想快速了解和使用RDB和AOF,可以直接跳到文章底部看总结。本章节通过配置文件,触发快照的方式,恢复数据的操作,命令操作演示,优缺点来学习 Redis 的重点知识持久化。RDB 详解RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件转载 2021-05-09 22:04:34 · 3907 阅读 · 0 评论 -
Redis工具类封装RedisUtils(两种)
RedisTemplate工具类1本文参考:https://blog.it-follower.com/posts/2563248908.htmlSpringBoot项目集成Redis相当简单,只需要pom中加入对应依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</a...转载 2021-05-09 19:55:18 · 9837 阅读 · 1 评论 -
监听Redis 缓存过期(Key 失效)事件
很多业务场景,例如订单过期自动删除,订单几天后自动好评,这些常用操作可以通过定时任务,数据库轮询做,但是订单量大的情况可能会对数据库产生大的压力。所以今天介绍的就是 redis 缓存过期通知。注: 楼主技术提升的同时, 这个博文失效吧, 这个只能适用于单机redis, 订单过期删除这些操作还是通过rocketMq, 或者时间轮, 或者Zset进行操作吧1.事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 故需要开启 redis 的事件监听与发布2.修改redis.c...转载 2021-05-09 19:43:53 · 8146 阅读 · 3 评论 -
利用Redis实现高并发计数器
业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一天限制调用次数为例:接口例子1、是否拒绝服务 /** * 是否拒绝服务 * @return */ private boolean denialOfService(String userId){ long count=JedisUtil.setIncr(DateUtil.getDa转载 2021-05-09 14:38:39 · 2407 阅读 · 0 评论 -
用Redis实现分布式锁以及redission使用
前言:分布式环境有很多问题,比如你前一个请求访问的是服务器A,第二个请求访问到了服务器B,就会发生并发重复插入问题,这个时候需要依赖单点来实现分布锁,而redis就是。先导入maven依赖 redission<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>2.2.13<...转载 2021-05-09 10:16:04 · 486 阅读 · 0 评论 -
芋道 Spring Boot Redis 入门
摘要: 原创出处http://www.iocoder.cn/Spring-Boot/Redis/「芋道源码」欢迎转载,保留摘要,谢谢!1. 概述 2. 快速入门 3. 序列化 4. 项目实践 5. 示例补充 6. 尝试 Redisson 666. 彩蛋本文在提供完整代码示例,可见https://github.com/YunaiV/SpringBoot-Labs的lab-11-spring-data-redis目录。原创不易,给点个Star嘿,一起冲鸭!1. 概述...转载 2021-05-07 07:26:21 · 5164 阅读 · 1 评论 -
SpringData Redis的使用
创建工程,引入坐标 <!-- 缓存 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.1</version> </dependency> ...转载 2021-05-06 22:58:40 · 762 阅读 · 0 评论 -
redis的扩展学习(远程连接,修改密码,修改端口,清空缓存)
远程连接默认连接方式初始化时,没有密码。可以切换到redis目录下,进行连接服务:redis-cli.exe -h 127.0.0.1 -p 6379小知识点:1、如果觉得每次要切换到redis目录下比较麻烦,可以通过系统变量Path下进行设置。如果觉得每次关闭cmd窗口,redis服务就会关闭的话比较麻烦。那么可以把redis设置成windows下的服务。在redis目录下,执行:redis-server --service-ins...转载 2021-05-06 22:24:40 · 290 阅读 · 0 评论 -
redis的安装教程(单机、win10)
redis在win10上安装有两种方式:下载win版本安装包进行安装和使用免安装版本(绿色版)需要安装的教程,如下:redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。(redis是一种数据库)redis官网上只有Linux环境的的安装包,这里提供一下Windows环境的安装包以及教程。一、下载1、github下载链接:github下载2、某度网盘下载链接:某度网盘下载提取码:sx8k二、安装...转载 2021-05-05 22:15:17 · 5190 阅读 · 0 评论 -
redis的安装教程(单机、linux)
1、在/usr/local/redis文件夹内下载安装包cd /usr/local/rediswget https://download.redis.io/releases/redis-6.0.10.tar.gz2、在当前目录下解压tar -zvxf redis-6.0.10.tar.gz3、把解压得到的redis-6.0.10文件夹移出到同级redis文件夹mv /usr/local/redis-6.0.10 /usr/local/redisrm -rf /usr/local/redis原创 2021-05-05 20:28:40 · 743 阅读 · 0 评论