
redis
ypp91zr
善于分享,提升自我!
展开
-
redis过期事件无法收到通知
首先在本地是可以,到了预发布环境启动后一段时间是可以。但是在过段时间后发现一直收不到通知了,于是去看了一遍redis.conf发现了一个设置:tcp-keepalive 默认值是0读了注释后,理解是此配置是检查健康的连接的时间。可以理解为心跳机制。3.x版本默认值是0,官方推荐是60。4.x/5.x版本默认是300...原创 2020-11-12 10:38:17 · 808 阅读 · 0 评论 -
redis发布/订阅
今天一个同事搞了大半天都没弄出来,然后老大叫我接手。记录分享出来主要是让新同学少走弯路目前采用Jedis实现,后续推出Spring data redis版本首先订阅是阻塞的,所以单独开一个线程订阅通道,应用启动RunnerRunner执行的时间是spring容器启动完成之后,就会紧接着执行这个接口实现类的run方法这个实现类,要注入到spring容器中,这里使用了@Component注解; 在同一个项目中,可以定义多个ApplicationRunner的实现类,他们的执行顺序通过注解@Or原创 2020-09-15 13:13:39 · 223 阅读 · 0 评论 -
redis分布式锁(redisson)的简单封装
项目用到了redisson分布式锁,但是每个地方的代码除了业务代码,其他都差不多一样的,如果要修改的话,就要修改很多,不只修改一个项目,其他项目也得该,地方多了容易出错,并且数据也对不上。起始的想法是封装起来,然后自定义一个spring boot starter。其他项目依赖即可,这样一来如果要修改只改这个starter模块就可以了。于是将项目分布式锁进行了简单封装,以前是下面代码这样的@Autowiredprivate RedissonClient redissonClient;public原创 2020-09-03 15:34:23 · 1604 阅读 · 0 评论 -
Spring Boot Starter自动装配原理
先看看SpringBoot自动装配的原理,看了源码原理后就明白为什么可以自定义Starter了@SpringBootApplication是必须的,在Application启动类上的一个注解,大家都知道,就从@SpringBootApplication入手,点击进去是很多注解的组合,每个注解就不多做解释了重点看@EnableAutoConfiguration,它是自动装配的整个逻辑,再点击去,关键信息@Import(AutoConfigurationImportSelector.class)原创 2020-07-07 17:52:26 · 1750 阅读 · 1 评论 -
SpringBoot+Redis+Lua分布式限流
Redis支持LUA脚本的主要优势LUA脚本的融合将使Redis数据库产生更多的使用场景,迸发更多新的优势:高效性:减少网络开销及时延,多次redis服务器网络请求的操作,使用LUA脚本可以用一个请求完成 数据可靠性:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。 复用性:LUA脚本执行后会永久存储在Redis服务器端,其他客户端可以直接复用 可嵌入性:可嵌入JAV...原创 2020-05-07 17:24:34 · 1073 阅读 · 2 评论 -
redis监听key过期事件,详细步骤
1、配置redis.conf文件配置文件默认是#注释了的,改为notify-keyspace-events Ex 重启redis,记住指定redis.conf配置文件启动2、配置一个key过期事件的监听器package com.shinedata.config.redis;import org.apache.commons.lang3.StringUtils;impor...原创 2020-04-20 15:21:29 · 18915 阅读 · 10 评论 -
redisson无法连接redis jar包冲突
限贴下代码package com.shinedata.util.redis;import org.redisson.Redisson;import org.redisson.api.RedissonClient;import org.redisson.config.Config;import org.slf4j.Logger;import org.slf4j.LoggerFact...原创 2019-10-21 14:35:32 · 11383 阅读 · 2 评论 -
Jedis [B cannot be cast to java.lang.Long 并发异常
今天在日志发现了很多异常信息B cannot be cast to java.lang.Long,第一次遇见,以前用的RedisTemplate(对Jedis的封装)主要原因是在于并发多线程环境下,如果一直使用单实例Jedis,单请求/线程没问题,多线程会争抢资源,就会出现B cannot be cast to java.lang.Long等错误,还有可能产生jedis.get("xxx...原创 2019-10-10 18:16:45 · 10413 阅读 · 4 评论 -
高并发缓存穿透设计的一些思路
在目前的开发应用中,基本上缓存是标配,而使用的比较多的是redis、memercache等,也有一些本地缓存,比如hashmap、google guava包、spring cache等,或者更好一点的本地作为一级缓存,redis等作为二级缓存,本地缓存数据量较少@Override public OrderEntity selectById(Long id) { Object objec...原创 2019-06-12 21:58:36 · 559 阅读 · 0 评论 -
基于Redis的分布式锁实现
线程锁:大家都不陌生,主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,其余线程是可以访问该对象中的非加锁代码块的。 进程锁:也是为了控制同一操作系统中多个进程访问一个共享资源,只是因为程...原创 2019-05-04 20:08:59 · 771 阅读 · 0 评论 -
redis远程连接异常:Cannot get Jedis connection/Could not get a resource from the pool
如果是远程连接redis,多数情况下是没有禁用127.0.0.1redis默认是只允许本机访问的,需要在redis.conf配置文件将127.0.0.1给禁用掉,注释掉即可。允许外部访问redis还有个保护模式,默认为yes 改为no, protected-mode no建议设置个密码,不然任何知道地址端口的情况下都可以连接了。 ...原创 2018-11-20 13:50:59 · 5201 阅读 · 0 评论 -
Spring boot 整合redis
spring boot 1.4.3 我的版本,没有用spring自动配置redis那样,自己新建的redis.properties配置文件。spring自动配置的redisTemplate<Object,Object>,并不适用.我想要的是redisTemplate<String,Object>pom.xml:<dependency> <g...原创 2018-11-20 11:48:45 · 333 阅读 · 0 评论 -
-bash: redis-server: 未找到命令
今早发现redis命令不管用,安装是安装好的。差一个全局命令ln -s /home/prod/redis/redis-4.0.8/src/redis-server /usr/bin/redis-server前面是redis安装的路径,后面是将redis-server放在/usr/bin下相当于创建一个快捷方式问题解决:...原创 2018-11-20 10:15:06 · 10164 阅读 · 0 评论 -
深入理解 Spring 事务原理
一、事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:获取连接 Connection con = DriverManager.getConnection()开启事务con.setAutoCommit(true/false);执行CRUD提交事务/回滚事务 con.com转载 2017-10-09 10:52:12 · 372 阅读 · 0 评论 -
Redis存储Session方案
所有支持Servlet规范的容器都自带session管理,于是大多数人都使用HttpSession接口存放状态信息。事实上, servlet的session会使得应用服务器水平扩展变的非常困难。使用Servlet Session时的妥协方案Session Replication这无疑是一种浪费内存的方法,对于5台左右的集群还可以忍受,如果你需要几十甚至上百台集群,这就完全不可行。Session S转载 2017-09-19 11:43:18 · 8341 阅读 · 1 评论 -
Redis jedis对数据类型的操作
一、常用数据类型简介: Redis常用五种数据类型:string,hash,list,set,zset(sorted set).1.String类型String是最简单的类型,一个key对应一个valueString类型的数据最大1G。String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby、decr、decrby),这种情况下转载 2017-06-01 11:49:42 · 332 阅读 · 0 评论 -
redis key的操作
牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼redis命令参考:http://redisdoc.com/ 返回1表示成功DEL 删除key删除单个key 127.0.0.1:6379[5]> keys *1) "k4"2) "1k"3) "k2"4) "k3"5) "k1"127.0.0.1:6379[5]> del k原创 2017-03-27 23:54:00 · 385 阅读 · 0 评论 -
redis 事务(MULTI 、 EXEC 、 DISCARD 和 WATCH )
官方介绍MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令,事务可以一次执行多个命令,但是必须满足2个条件:事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。执行和是否成功是2个概念,并原创 2017-04-06 22:40:02 · 3016 阅读 · 0 评论 -
redis RDB配置和原理
RDB是Redis将内存数据存储到磁盘文件的其中一种方式(另一种是AOF)。我们可以在redis.conf文件中,做一些针对RDB的设置。参考“redis 配置文件 snapshotting RDB数据库快照部分”,有中英文的对照翻译。[plain] view plain copy ################################转载 2017-04-07 10:31:34 · 550 阅读 · 0 评论 -
redis string数据类型
牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼redis string数据类型是redis最简单的类型,相当于可以持久化的memcache服务器,和memcache相比,redis很大的特点在于比memcache拥有更多的数据类型,言归正传,简单进行string数据类型的操作http://redisdoc.com/ 文档地址原创 2017-03-28 22:28:42 · 280 阅读 · 0 评论 -
redis中的Hash数据类型
牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼HSET key field value将哈希表 key 中的域 field 的值设为 value 。如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。如果域 field 已经存在于哈希表中,旧值将被覆盖。127.0.0.1:6379[1]> hset hh k1原创 2017-03-28 23:36:05 · 383 阅读 · 0 评论 -
redis 五大数据类型简单介绍
牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼String类型是redis最基本的类型,一个key对应一个value,value最多支持512M(谁那么变态,一个string的value存512M以上?),可以包含任何数据或者序列化的对象或者图片Hash(哈希):键值对集合,一个string的field和value的映射表,比较适合存储对象!Lis原创 2017-03-27 23:52:12 · 257 阅读 · 0 评论 -
redis数据淘汰机制
在redis中,redis允许用户更改设置最大内存maxmemory,在每次写入或更新等操作时候,redis会检查使用的内存,当内存达到最大值得时候,就会进行数据淘汰策略,从而换取内存出来redis数据淘汰策略有6种:volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰volatile-ttl:从已设置过期时间的原创 2017-03-30 23:04:08 · 639 阅读 · 0 评论 -
redis 配置文件redis.conf介绍
redis默认不是以守护进程的方式运行,我们可以更改配置文件 daemonize为yes启动守护进行,默认为no 启动守护进程后,redis默认会将pid写入/var/run/redis.pid文件,我这里是/var/run/redis_6379.pid自动生成的。redis绑定的主机地址(一般默认是自己本地的ip地址)localhostprotected-mo原创 2017-03-30 21:49:46 · 693 阅读 · 0 评论 -
redis 持久化RDB
redis的RDB持久化在redis算是比较重的分量了,面试中会问,笔试中会考,实际工作中会用RDB:将一个时间段的内存数据集快照转存到磁盘,缺点是最后一次的数据可能会丢失(比如在最后那个时间段断电或者其他情况最后一次的数据就丢失了),保存在磁盘的是dump.rdb文件并将数据恢复到内存中相应的配置在redis.conf里面,我把时间段设置为120秒10次变动进行保存一原创 2017-03-30 23:31:46 · 334 阅读 · 0 评论 -
redis 持久化AOF
AOF 工作原理: 是将数据也是先存在内存,按照日志记录形式进行存储,在存储的时候会使用调用fsync来完成对本次写操作的日志记录,这个日志揭露文件其实是一个基于Redis网络交互协议的文本文件。AOF调用fsync也不是说全部都是无阻塞的,在某些系统上可能出现fsync阻塞进程的情况,对于这种情况可以通过配置修改,但默认情况不要修改。AOF最关键的配置就是关于调用fsync追加日志文件的平率原创 2017-03-31 22:15:42 · 372 阅读 · 0 评论 -
redis初识
牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼众所周知redis为NoSQL非关系型数据库NoSQL VS RDBMS即关系数据库管理系统(Relational Database Management System)RDBMS-高度组织化结构化数据-结构化查询语言(SQL)-数据操纵语言,数据定义语言-严格的一致性原创 2017-03-22 22:02:48 · 329 阅读 · 0 评论 -
redis的安装
牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼官网下载一个解压包进入redis目录[root@localhost Desktop]# cd /usr/local/redis-3.2.8/查看目录[root@localhost redis-3.2.8]# ls00-RELEASENOTES COPYING Makefile原创 2017-03-26 22:54:08 · 227 阅读 · 0 评论 -
redis之redis.conf
redis下的 redis.conf是原始配置,一般在开发的时候会将此文件留下。拷贝一份出来,保留原始配置原创 2017-03-26 23:34:12 · 355 阅读 · 0 评论 -
redis 第一个hello world
牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼在开发之前,一般会将redis.conf原始配置进行备份,拷贝一份出来,保留原始配置拷贝一份到myredis创建myredis[root@localhost local]# mkdir myredis进入redis目录拷贝[root@localhost redis-3.2.8]# cp原创 2017-03-26 23:26:56 · 313 阅读 · 0 评论 -
Redis Sentinel机制与用法(二)
概述Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换。它的主要功能有以下几点转载 2017-04-12 16:09:51 · 291 阅读 · 0 评论 -
Redis Sentinel机制与用法(一)
概述Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换。它的主要功能有以下几点转载 2017-04-12 15:41:18 · 210 阅读 · 0 评论 -
redis 主从复制
redis主从复制官网介绍是一个Master可以有多个Slave,Slaves能过接口其他slave的链接,除了可以接受同一个master下面slaves的链接以外,还可以接受同一个结构图中的其他slaves的链接。Master是非阻塞的,在同步到其他slave的同时还可以进行查询等。可以进行命令设置master和slave,但是当丛机断开连接以后,redis会从新连接,这时断开连接的slave就原创 2017-04-15 22:03:25 · 447 阅读 · 0 评论 -
redis 启动后基础知识
牛逼的人在干牛逼的事之前总有一段苦逼的岁月,只要像傻逼一样坚持,终究也会牛逼redis默认16个库 以0下标开始到15可以选择库,select 选择库的下标127.0.0.1:6379> SELECT 0OK127.0.0.1:6379> set k1 helloOK127.0.0.1:6379> get k1"hello"127.0.0.1:原创 2017-03-27 23:13:11 · 492 阅读 · 0 评论