jedis

Looking for an example of Jedis with Sentinel [closed]

这一生的挚爱 提交于 2019-11-30 11:39:52
I am looking for an example of jedis using the redis sentinel. I am not able to use the jedis facilities for sentinel, and I could not find any good example or documentation. ERNESTO ARROYO RON The Jedis library is an awesome solution, unfortunately with bad documentation. So, @Autowired private JedisSentinelPool pool; public void mymethod() { Jedis jedis = null; try { jedis = pool.getResource(); jedis.hset(.... } catch (JedisException je) { throw je; } finally { if (jedis != null) pool.returnResource(jedis); } } As I am using Spring, I need: <bean id="redisSentinel" class="redis.clients.jedis

分布式锁与实现(一)基于Redis实现

旧街凉风 提交于 2019-11-30 11:25:02
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。 在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。 选用Redis实现分布式锁原因 Redis有很高的性能 Redis命令对此支持较好,实现起来比较方便 在此就不介绍Redis的安装了,具体在Linux和Windows中的安装可以查看我前面的博客。 http://www.cnblogs.com/liuyang0/p/6504826.html 使用命令介绍 SETNX SETNX key val 当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。 expire expire key timeout 为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。

redis入门笔记

耗尽温柔 提交于 2019-11-30 10:35:58
1.Jedis是什么? Jedis是redis的java版本的客户端实现。 2.Jedis操作步骤如下: 1->获取Jedis实例需要从JedisPool中获取; 2->用完Jedis实例需要返还给JedisPool; 3->如果Jedis在使用过程中出错,则也需要还给JedisPool; 3.具体方法说明 pool.getReource()方法是得到jedis实例。 pipelined() 方法是批处理 4.redis介绍 Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案。 Redis 有三个主要使其有别于其它很多竞争对手的特点: Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的; Redis相比许多键值数据存储系统有相对丰富的数据类型; Redis可以将数据复制到任意数量的从服务器中; Redis优点 异常快速 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。 支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。 这使得在应用中很容易解决的各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。 操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis

分别开启15和20个线程模拟秒杀,操作redis事务,商品居然卖不完。。

空扰寡人 提交于 2019-11-30 10:33:49
用 ExecutorService executor = Executors.newFixedThreadPool(15);创建线程池,分别模拟1000个用户去抢100个商品,线程池超过15个之后,商品居然秒杀不完? 两个类 package redis; import java.util.List; import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction; public class SaleRunable implements Runnable { String productKey = "iphone8";//监视的key 当前秒杀商品的数量 Jedis jedis = new Jedis("192.168.17.128"); String userName; public SaleRunable(String userName) { this.userName = userName; } @Override public void run() { //商品的key , 秒杀有个数量 //watch 监视一个key,当事务执行之前这个key发生了改变,事务会被打断 jedis.watch(productKey); String value = jedis.get(productKey);

springmvc3.2集成redis集群

孤街醉人 提交于 2019-11-30 10:32:29
老项目需要集成redis集群 因为spring版本才从2.x升级上来,再升级可能改动较大,且并非maven项目升级麻烦,故直接集成。 jar包准备: jedis-2.9.0.jar -- 据说只有这个版本支持 密码... commons-pool2-2.0.jar spring-data-redis-1.8.1.RELEASE.jar spring-data-commons-1.8.1.RELEASE.jar <!-- redis-开始 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!--最大空闲数 --> <property name="maxIdle" value="${redis.maxIdle}" /> <!--最大建立连接等待时间 --> <property name="maxWaitMillis" value="${redis.maxWait}" /> <!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 --> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> </bean> <bean id="jedis" class="redis.clients

redis通用工具类

旧街凉风 提交于 2019-11-30 09:12:09
public class RedisUtil { private static final Logger LOGGER = Logger.getLogger(RedisUtil.class); private static JedisPool pool = null; private static RedisUtil ru = new RedisUtil(); private RedisUtil() { if (pool == null) { String ip = InitListener.getValue("redis.ip", "192.168.116.207"); int port = Integer.parseInt(InitListener.getValue("redis.port", "5379")); JedisPoolConfig config = new JedisPoolConfig(); // 控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取; // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 config.setMaxTotal(10000); // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。

Jedis的类型转换异常深究

点点圈 提交于 2019-11-30 09:11:56
1 类型转换异常场景 我们在使用Jedis的时候,经常会出现类型转换异常,有如下情况: 多线程环境 Jedis是线程不安全的,如果存在多线程使用同一个Jedis,就会出现类型转换异常网上也流传着很多错误的解释,下面我们以一个案例来复现下这个问题,这个很好理解。 单线程环境 即使在单线程的情况下,也是会出现类型转换异常的,下面就针对此做一个案例分析 2 Jedis类型转换异常案例 2.1 案例介绍 案例是从这里来的 Jedis returnResource使用注意事项 代码如下: public static void main(String[] args) throws Exception{ Jedis jedis = new Jedis("192.168.126.131", 6379); System.out.println("get name=" + jedis.get("name")); System.out.println("Make SocketTimeoutException"); System.in.read(); //等待制造SocketTimeoutException try { System.out.println(jedis.get("name")); } catch (Exception e) { e.printStackTrace(); } System

Redis异常情况分析

旧巷老猫 提交于 2019-11-30 09:11:38
我们没有正确对待这个SocketTimeoutException异常,即一旦出现SocketTimeoutException异常,我们是必须要废弃掉这个Jedis的。所以对于单线程环境下的Jedis来说,一旦出现这种异常,我们需要重新new一个新的Jedis来使用。 Jedis在内部执行出现异常,如SocketTimeoutException异常的时候,会标记一个boolean broken=true,即意味着该连接已经废弃了。 重要的大坑在这里,我们通常使用JedisPool来应对多线程环境下Jedis的使用,一般使用方式如下: Jedis jedis = null;//从pool中获取资源 try{ jedis = pool.getResource(); jedis.set("k1", "v1"); }catch(Exception e){ e.printStackTrace(); }finally{ if(jedis != null){ pool.returnResource(jedis);//向连接池“归还”资源,千万不要忘记。 } } 而对于JedisPool,我们会使用returnResource方法来向pool中释放回Jedis,而这个returnResource却忽视了上述boolean broken属性,直接将一个标记废弃的连接放回到了pool中,下次别人取的时候

redis(三)与spring整合

半腔热情 提交于 2019-11-30 07:39:51
一、 JAVA操作redis通常使用的是Jedis,通过java代码来操作redis的数据存储读取等操作,用过的人应该知道,Jedis客户端已经足够简单和轻量级了,但是呢,在此同时,Spring也为Redis提供了支持,就是在Spring-data模块中的Spring-Data-Redis(SDR),它一部分是基于Jedis客户端的API封装,另一部分是对Spring容器的整合。 springdata的一些资料: 资料: http://projects.spring.io/spring-data-redis/ 文档: https://docs.spring.io/spring-data/redis/docs/1.8.6.RELEASE/reference/html/ 前提你的ssm已经搭建好(其实就是redis与spring的整合) 二、整合 1、pom中引入相应的jar包 <!--reids--> <spring.redis.version>1.6.0.RELEASE</spring.redis.version> <jedis.version>2.7.2</jedis.version> <commons.version>2.4.2</commons.version> <!--redis--> <!-- config redis data and client jar-->