jedis

Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

旧街凉风 提交于 2020-01-07 04:26:32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 转自: http://www.cnblogs.com/edwinchen/p/3816938.html redis源码 https://github.com/antirez/redis redis中文注释版本源码 https://github.com/huangz1990/annotated_redis_source 一、概念简介: Redis:   Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis,走了不少弯路,所以总结一条我认为不错的学习路径给大家:   1.《The Little Redis Book》 是一本开源PDF,只有29页的英文文档,看完后对Redis的基本概念应该差不多熟悉了,剩下的可以去Redis官网熟悉相关的命令。   2.《Redis设计与实现》 如果想继续深入,推荐这本书,现在已经出到第二版了,有纸质版书籍可以购买。上面详细介绍了Redis的一些设计理念,并且给出了一些内部实现方式,和数据结构的C语言定义,有一些基本C语言基础,就能看明白。   3.Redis 2.6源代码: 《Redis设计与实现》的作者发布在Github上的一个开源项目,有作者详细的注释。

Redis 下 list 的操作

只谈情不闲聊 提交于 2020-01-07 03:25:52
1. 在Redis里 , list是有序(按添加顺序) , set是无序   RPUSH key value . 这是放右边 , 谁先到 , 谁排名越靠前 , 可以用来模拟高并发抢票   如果100个人抢80张票 , 同时插入 , 取 (票 , 0 , 79) 如果人在里面 , 那么就是抢票成功 . 如果不是 ,那就没有成功. Jedis jedis = new Jedis("localhost"); List<String> ss=jedis.lrange( "apache", 0, -1 ); if ( ss.contains("mosk") ){ System.out.println("包含有!mosk"); }else { System.out.println("不包含有mosk!"); } 此代码可以连接Redis 获取key为"apache"的 list的 所有元素 , 如果只想获取 10个 , 把 -1 改成9就行. --此方法可以用来判断 来源: https://www.cnblogs.com/alpha-cat/p/12151276.html

JedisPoolConfig参数

核能气质少年 提交于 2020-01-06 22:23:05
maxActive:控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted。 maxIdle:控制一个pool最多有多少个状态为idle(空闲)的jedis实例; whenExhaustedAction:表示当pool中的jedis实例都被allocated完时,pool要采取的操作;默认有三种。 WHEN_EXHAUSTED_FAIL --> 表示无jedis实例时,直接抛出NoSuchElementException; WHEN_EXHAUSTED_BLOCK --> 则表示阻塞住,或者达到maxWait时抛出JedisConnectionException; WHEN_EXHAUSTED_GROW --> 则表示新建一个jedis实例,也就说设置的maxActive无用; maxWait:表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException; testOnBorrow:在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的; testOnReturn

springboot + redis + 注解 + 拦截器 实现接口幂等性校验(转)

帅比萌擦擦* 提交于 2020-01-06 21:59:49
出处:   作者:wangzaiplus    www.jianshu.com/p/6189275403ed 一、概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等 二、常见解决方案 唯一索引 -- 防止新增脏数据 token机制 -- 防止页面重复提交 悲观锁 -- 获取数据的时候加锁(锁表或锁行) 乐观锁 -- 基于版本号version实现, 在更新数据那一刻校验数据 分布式锁 -- redis(jedis、redisson)或zookeeper实现 状态机 -- 状态变更, 更新数据时判断状态 三、本文实现   本文采用第2种方式实现, 即通过redis + token机制实现接口幂等性校验 四、实现思路 为需要保证幂等性的每一次请求创建一个唯一标识 token , 先获取 token , 并将此 token 存入 redis , 请求接口时, 将此 token 放到 header 或者作为请求参数请求接口, 后端接口判断 redis 中是否存在此 token : 如果存在, 正常处理业务逻辑, 并从 redis 中删除此 token

【每日3分钟技术干货 | 面试题+答案 | Redis篇(一)】

巧了我就是萌 提交于 2020-01-06 21:42:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> **1. Redis 是什么?** 都有哪些使用场景? 我们先来理解经典的CAP理论 : 一致性:是指从数据层面来看的一致性。 可用性:是指从系统层面的可用性。 容错性:是指从网络层面的的容错性。 数据库逐渐从关系数据库向不同领域不同层次分化。随着读多写少场景的出现,导致需要读取数据的时间变慢,为了提升性能,出现了数据库缓存技术,对数据库的读取进行分离。web2.0时代,网民的生产力大增,存储总量也在增加,目前还是读多写少模式,原有的缓存技术显然不能满足写的压力,所以,出现了分库分表,实现读写分离。其中比较常用的一种缓存技术是用Redis做缓存。 Redis是什么? Redis是一个基于内存且支持持久化的key-value的NoSQL数据库,其中每个key和value都是使用对象表示的,具有以以下特征:多样数据类型、持久化、主从同步。 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。 在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中

Spring 极速集成注解 redis 实践

笑着哭i 提交于 2020-01-06 05:50:37
Redis 做为基于内存的 Key-Value 数据库,用来做缓存服务器性价比相当高。 官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以让 Java 操作使用 Redis。 Spring 团队对 Jedis 进行了封装,独立为 spring-data-redis 项目,配合 spring 特性并集成 Jedis 的一些命令和方法。 本文重点描述集成过程,能让你迅速的通过 spring-data-redis 将 redis 集成到 spring 项目中,毕竟大家都忙的。 1. 添加项目依赖 <!--redis 缓存--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.4.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 2. 添加 spring-redis-context 配置 <?xml version="1.0"

Redis 下 list 的操作

杀马特。学长 韩版系。学妹 提交于 2020-01-05 03:03:39
1. 在Redis里 , list是有序(按添加顺序) , set是无序   RPUSH key value . 这是放右边 , 谁先到 , 谁排名越靠前 , 可以用来模拟高并发抢票   如果100个人抢80张票 , 同时插入 , 取 (票 , 0 , 79) 如果人在里面 , 那么就是抢票成功 . 如果不是 ,那就没有成功. Jedis jedis = new Jedis("localhost"); List<String> ss=jedis.lrange( "apache", 0, -1 ); if ( ss.contains("mosk") ){ System.out.println("包含有!mosk"); }else { System.out.println("不包含有mosk!"); } 此代码可以连接Redis 获取key为"apache"的 list的 所有元素 , 如果只想获取 10个 , 把 -1 改成9就行. --此方法可以用来判断 来源: https://www.cnblogs.com/alpha-cat/p/12151276.html

springboot 中单机 redis 实现分布式锁

不打扰是莪最后的温柔 提交于 2020-01-03 11:38:24
在微服务中经常需要使用分布式锁,来执行一些任务。例如定期删除过期数据,在多个服务中只需要一个去执行即可。 以下说明非严格意义的分布式锁,因为 redis 实现严格意义的分布式锁还是比较复杂的,对于日常简单使用使用如下简单方法即可。即偶尔不执行任务不影响业务。 实现要点 1)获得锁、释放锁需要是原子操作。要么获取成功,要么失败。释放要么成功,要么失败 2)任务完成需要自己释放自己的锁,不能释放别人的锁。 3)锁要有过期时间限制,防止任务崩溃没有释放锁,导致其他节点无法获得锁。 4)执行节点超时长时间不释放锁,到下次任务开始执行并行存在的情况 要考虑的风险点 1)获取锁失败,偶尔不执行任务要不影响业务或告警人工干预 2)redis 宕机,导致无法获取锁 方案一:低版本使用 jedis 实现 1 添加依赖,高版本或低版本有些方法可能没有 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>compile</scope></dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.10.2</version><

redis----java操作redis

依然范特西╮ 提交于 2020-01-02 05:11:42
添加jar包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.1</version> </dependency>   简单操作 public class Myredis { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.set("v5","k5"); //事务 Transaction multi = jedis.multi(); multi.set("k1","k2"); multi.exec(); } } 首先不使用watch public class Myredis { public static Boolean transfer(int transfernum){ Jedis jedis = new Jedis("127.0.0.1", 6379); Transaction multi = jedis.multi(); multi.decrBy("num",transfernum); multi.exec(); return true; } public static void main(String[]

java操作redis学习笔记

天大地大妈咪最大 提交于 2020-01-02 05:11:15
一、 jedis 操作: 1、POM依赖: 1 <dependency> 2 <groupId>redis.clients</groupId> 3 <artifactId>jedis</artifactId> 4 <version>2.5.0</version> 5 </dependency> 2、 建一个连接 redis 数据库的工具类: 1 public class RedisUtil { 2 3   //服务器IP地址 4 private static String ADDR = "x.x.x.x"; 5    6   //端口 7 private static int PORT = 6379; 8   //密码 9 private static String AUTH = "123456"; 10   //连接实例的最大连接数 11 private static int MAX_ACTIVE = 1024; 12    13   //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。 14 private static int MAX_IDLE = 200; 15    16 //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException 17 private