jedis

spring-session-data-redis使用redis共享session

风格不统一 提交于 2021-02-15 13:07:11
1:添加jar包 < dependency > < groupId > org.springframework.data </ groupId > < artifactId > spring-data-redis </ artifactId > < version > 2.0.3.RELEASE </ version > </ dependency > < dependency > < groupId > redis.clients </ groupId > < artifactId > jedis </ artifactId > < version > 2.9.0 </ version > </ dependency > < dependency > < groupId > org.springframework.session </ groupId > < artifactId > spring-session-data-redis </ artifactId > < version > 2.0.1.RELEASE </ version > </ dependency > < dependency > < groupId > org.apache.commons </ groupId > < artifactId > commons-pool2 </ artifactId >

Spring整合Redis

◇◆丶佛笑我妖孽 提交于 2021-02-14 21:43:16
前言 Spring整合Redis的环境可以使用搭建好的ssm环境下进行构建,方(懒)便(人)快(专)捷(用),首推! @[toc] 1、准备依赖Jar包 <!-- ================ spring 整合 Redis================== --> <!-- 1、java连接Redis的jar包,也就是使用jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.4.2</version> </dependency> <!-- 2、spring整合Redis的jar包 --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.4.2.RELEASE</version> </dependency> 1.1、Jedis概述 是的,在上面使用到了Jedis的jar包,这里简单介绍一下Jedis。 Java客户端访问Redis有 Jedis 、 Redisson 、 Jredis 、 JDBC-Redis 等,其中官方推荐使用<font color=red>

Redis性能调优,影响Redis性能的因素

和自甴很熟 提交于 2021-02-07 02:46:29
序言 上一篇文章《Redis为什么这么快》介绍了Redis性能评估工具,以及Redis高性能的原因。详细请见: 这篇我们将从业务的视角,讲解下影响Redis性能的因素以及如何提升Redis使用的性能。 从用户到Redis请求过程分析 以最常用场景缓存为例,流量从用户到Redis Server的过程如下所示: image 用户访问后端服务器,调用对应的Controller Controller命中缓存记录,通过Jedis客户端调用Reids从缓存获取记录。 如果使用的Jedis连接池获取Jedis对象,从Jedis连接池获取一个Jedis连接实例。 Jedis使用Redis序列化协议(RESP)将命令编码,放到Redis Server输入缓冲区中。 Redis Server从输入缓冲区获取命令并执行。 执行结束后将执行结果放入到输出缓冲区。 Jedis客户端从输出缓冲区获取执行结果并返回给Controller。 Controller执行完业务逻辑相应用户的请求。 从上面时序图可以看出,用户请求通过Redis client经由网路到达Redis Server。 因此在考虑使用Redis性能的时候要从客户端和服务端两个角度考虑。 对于业务方来说, 合理使用Redis特性比Redis服务器的优化可操作性更强,也更容易获得好的效果。 下面将从业务优化和服务器优化两个方面介绍Redis的优化。

高并发架构系列:分布式锁的由来、特点及Redis分布式锁的实现详解

|▌冷眼眸甩不掉的悲伤 提交于 2021-02-05 07:47:01
在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。那具体什么是分布式锁,分布式锁应用在哪些业务场景、如何来实现分布式锁呢?今天来探讨分布式锁这个话题。 什么是分布式锁 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。 1.线程锁 主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如Synchronized、Lock等。 2.进程锁 为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。 3.分布式锁 当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。 分布式锁的由来 在传统单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。 但是在分布式系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机并发控制锁策略失效,为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁的由来。 当多个进程不在同一个系统中,就需要用分布式锁控制多个进程对资源的访问。 分布式锁的特点 首先

Java调用Redis的八种方式

試著忘記壹切 提交于 2021-02-01 15:48:06
Redis 是一个著名的key-value存储系统,而作为其官方推荐的 Java 版客户端jedis也非常强大和稳定,支持事务、管道及有jedis自身实现的分布式。 在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比: 一、普通同步方式 最简单和基础的调用方式, @Test public void test1Normal() { Jedis jedis = new Jedis("localhost" ); long start = System.currentTimeMillis(); for ( int i = 0; i < 100000; i++ ) { String result = jedis.set("n" + i, "n" + i); } long end = System.currentTimeMillis(); System.out.println( "Simple SET: " + ((end - start)/1000.0) + " seconds" ); jedis.disconnect(); } 很简单吧,每次 set 之后都可以返回结果,标记是否成功。 二、事务方式(Transactions) redis的事务很简单,他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 看下面例子

Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

眉间皱痕 提交于 2021-02-01 11:53:14
在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比: 一、普通同步方式 最简单和基础的调用方式, @Test public void test1Normal() { Jedis jedis = new Jedis("localhost"); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String result = jedis.set("n" + i, "n" + i); } long end = System.currentTimeMillis(); System.out.println("Simple SET: " + ((end - start)/1000.0) + " seconds"); jedis.disconnect(); } 很简单吧,每次 set 之后都可以返回结果,标记是否成功。 二、事务方式(Transactions) redis的事务很简单,他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 看下面例子: @Test public void test2Trans() { Jedis jedis = new Jedis("localhost"); long start =

Java客户端Jedis 对Redis的几种调用方式包括事务、管道、分布式

血红的双手。 提交于 2021-02-01 11:45:31
在这里对 jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比: 一、 直接同步方式 最简单的调用方式。 二、事务方式 (Transactions) redis 的事务很简单,他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。调用jedis.watch(…)方法来监控key,如果调用后key值发生变化,则整个事务会执行失败。另外,事务中某个操作失败,并不会回滚其他操作。这一点需要注意。还有,可以使用discard()方法来取消事务。 三、管道 (Pipelining)异步方式 有时,我们需要采用异步方式,一次发送多个指令,不同步等待其返回结果。这样可以取得非常好的执行效率。这就是管道,调用方法如下: 四、分布式直连同步调用 五、 分布式直连异步调用 六、 分布式连接池同步调用 七、 分布式连接池异步调用 八、注意 1 、 事务和管道都是异步模式。在事务和管道中不能同步查询结果 。 2 、 分布式中,连接池的性能比直连的性能略好 。 3 、 分布式调用中不支持事务。因为事务是在服务器端实现,而在分布式中,每批次的调用对象都可能访问不同的机器,所以,没法进行事务。 4 、 分布式中,连接池方式调用线程安全 。 工具助手小程序 来源: oschina 链接: https://my.oschina.net/u

jedis连接redis

 ̄綄美尐妖づ 提交于 2021-01-31 09:14:32
基本连接法: Jedis jedis=new Jedis("127.0.0.1",6379); jedis.auth("123456");//redis 密码 jedis.set("key", "helloWorld"); String value=jedis.get("key"); jedis.close(); 线程池连接法: JedisPoolConfig config=new JedisPoolConfig(); config.setMaxTotal(10);//最大连接数 config.setMaxIdle(2);//最大空闲连接数 JedisPool pool=new JedisPool(config,"127.0.0.1",6379); Jedis jedis=null; try{ jedis=pool.getResource(); jedis.auth("123456"); jedis.set("key", "我的第一个redis"); String value=jedis.get("key"); }catch (Exception e) { e.printStackTrace(); }finally{ if(jedis!=null){ jedis.close(); } } 来源: oschina 链接: https://my.oschina.net/u

用try(Jedis jedis = JedisPoolUtils.getJedis()){ ... }catch(Exception e){} 这样语法糖去释放资源(Redis和MyBatis)

佐手、 提交于 2021-01-31 08:55:08
之前总是写了个close方法去释放资源,其实这样也有好处,更加的显式去释放。 但是,可以使用java的try的语法糖,让一切变得更加简单一点,释放资源就不用管了。 来源: oschina 链接: https://my.oschina.net/u/4275902/blog/4938824

RedisSystemException: java.lang.ClassCastException: [B cannot be cast to java.lang.Long

不问归期 提交于 2021-01-28 03:05:40
问题 I meet this exception when using jedis with spring-data-redis in multi threading environment: org.springframework.data.redis.RedisSystemException: Unknown redis exception; nested exception is java.lang.ClassCastException: [B cannot be cast to java.lang.Long at org.springframework.data.redis.FallbackExceptionTranslationStrategy.getFallback(FallbackExceptionTranslationStrategy.java:48) at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate