jedis

Spring data redis, multi-threading issue with Jedis

放肆的年华 提交于 2021-02-20 03:45:46
问题 I am using redis in a heavily multi-threaded java application and getting intermittent ClassCastException s. Reading through various discussions seemed to point out this might be because the Jedis connection instance getting shared between multiple threads (https://github.com/xetorthio/jedis/issues/359). The solution suggested is to use JedisPool which is thread-safe. I have configured redis through Spring redis support by using RedisTemplate. A thing to note is I am using multiple templates

spring + spring-data-redist + Redis 单机、集群(cluster模式,哨兵模式)

妖精的绣舞 提交于 2021-02-19 01:57:19
一、单机redis配置 1. 配置redis连接池 < bean id ="jedisPoolConfig" class ="redis.clients.jedis.JedisPoolConfig" > <!-- 控制一个pool可分配多少个jedis实例 --> < property name ="maxTotal" value ="${redis.maxTotal}" /> <!-- 控制一个pool最多有多少个状态为idle(空闲)的jedis实例 --> < property name ="maxIdle" value ="${redis.maxIdle}" /> <!-- 表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException --> < property name ="maxWaitMillis" value ="${redis.maxWaitMillis}" /> < property name ="testOnBorrow" value ="true" /> < property name ="testOnReturn" value ="true" /> </ bean > <!-- redis的连接池pool,不是必选项:timeout/password --> < bean id =

Jedis - When to use returnBrokenResource()

北慕城南 提交于 2021-02-18 10:20:11
问题 When exactly we should use this method. On JedisConnectionException, JedisDataException or for any JedisException. There is no good API documentation for Jedis to my knowledge. try { Jedis jedis = JedisFactory.getInstance(); Pipeline pipe = jedis.pipelined(); Response<Set<Tuple>> idWithScore = pipe.zrangeWithScores(cachekey, from, to); **// some statement which may cause some other exception** Response<String> val = pipe.get(somekey); pipe.exec(); pipe.sync(); }catch (JedisConnectionException

分布式锁的实现(java)

南楼画角 提交于 2021-02-17 18:33:50
  当对接第三方接口时,往往会碰到同一时间发送了大量相同的请求,这个时候或许就是第三方发送接口的失误了。而我们需要做的就是针对这个情况来强化我们的系统。这个时候就需要用到分布式锁。让这些请求只有一个能发送进来。 分布式锁的实现一般有三种: 基于数据库的乐观锁; 基于redis的分布式锁; 基于zookeeper的分布式锁。   这里我们讲的是第二种:基于redis的分布式锁的原理以及实现。 下面是代码的实现: public class DistributeLock { /** * setnx(key,value):如果key-value存在,缓存成功并返回1,否则返回0. * getset(key,value):返回旧的value,然后更新旧的value为新的value. * expire(key,seconds):设置key的过期时间为seconds秒. * get(key):获取key对应的value,不存在返回nil. */ private final static long expire = 1000; // 设置锁的过期时间 public static boolean getLockByRedis(Jedis jedis,String lock){ boolean success = false ; long flag = jedis.setnx(lock, String

Redis事务和分布式锁

雨燕双飞 提交于 2021-02-17 13:08:53
Redis事务   Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis事务的实现需要用到 MULTI 和 EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,然后依次发送需要在本次事务中处理的命令,最后再发送 EXEC 命令表示事务命令结束。   举个例子,使用redis-cli连接redis,然后在命令行工具中输入如下命令:     从输出中可以看到,当输入MULTI命令后,服务器返回OK表示事务开始成功,然后依次输入需要在本次事务中执行的所有命令,每次输入一个命令服务器并不会马上执行,而是返回”QUEUED”,这表示命令已经被服务器接受并且暂时保存起来,最后输入EXEC命令后,本次事务中的所有命令才会被依次执行,可以看到最后服务器一次性返回了三个OK,这里返回的结果与发送的命令是按顺序一一对应的,这说明这次事务中的命令全都执行成功了。   再举个例子,在命令行工具中输入如下命令:     和前面的例子一样,先输入MULTI最后输入EXEC表示中间的命令属于一个事务,不同的是中间输入的命令有一个错误(set写成了sett),这样因为有一个错误的命令导致事务中的其他命令都不执行了(通过后续的get命令可以验证),可见事务中的所有命令是同呼吸共命运的。

jedis

旧街凉风 提交于 2021-02-17 02:03:52
Getting Started Installing Jedis In order to have Jedis as a dependency in your application you can: Use the jar files Download the latest Jedis and Apache Commons Pool2 jars from search.maven.org or any other maven repository. Build from source This gives you the most recent version. Clone the GitHub project. That is very easy, on the command line you just need to: git clone git://github.com/xetorthio/jedis.git Build from GitHub Before you package it using maven, you have to pass the tests. To run the tests and package, run make package . Configure a Maven dependency Jedis is also distributed

jedis

隐身守侯 提交于 2021-02-16 14:01:53
来源:http://www.cnblogs.com/Springmoon-venn/p/10141915.html 方法定义如下: 1 、String set(String key, String value) 2 、String set(String key, String value, String nxxx) 3、String set(String key, String value, String nxxx, String expx, int time) 4、String set(String key, String value, String nxxx, String expx, long time) 功能都是一样的,“Set the string value as value of the key.” 将string类型的value 放到key的value上,返回值都是 String。 1、把key、value set到redis中,隐含覆盖,默认的ttl是-1(永不过期) 2、根据第三个参数,把key、value set到redis中 nx : not exists, 只有key 不存在时才把key value set 到redis xx : is exists ,只有 key 存在是,才把key value set 到redis 3、4 和2 就相同

jedis实现分布式锁(悲观锁)

陌路散爱 提交于 2021-02-16 13:06:41
redis需单点部署(非集群) redis分布式锁解决多个应用进程间同步操作 整理了很多网上文档 发现都没有解决如下问题。。。 参考 http://www.cnblogs.com/it-cen/p/4984272.html ... 1.时间同步问题 2.在一个进程cash后失效时间后自动释放锁 3.有些多线程race condition没有考虑到 以下java版本实现彻底解决 充分测试 ** 方案一(推荐)** import java.util.List; import java.util.UUID; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.Transaction; import redis.clients.jedis.exceptions.JedisException; /** * Jedis实现分布式锁 * * @author 三文鱼 * */ public class DistributionLock { private final JedisPool jedisPool; public DistributionLock(JedisPool jedisPool) { this.jedisPool = jedisPool;

Redis-CentOS7安装

时光总嘲笑我的痴心妄想 提交于 2021-02-16 08:10:25
安装 Redis是c语言开发的。 安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++ 安装步骤: 第一步:redis的源码包上传到linux系统。 第二步:解压缩redis。 第三步:编译。进入redis源码目录。make 第四步:安装。make install PREFIX=/usr/local/redis PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下 启动 前端启动:在redis的安装目录下直接启动redis-server [root@localhost bin]# ./redis-server 后台启动: 把解压目录中的/root/redis-3.0.0/redis.conf复制到安装目录中/usr/local/redis/bin目录下 [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/ 修改配置文件: [root@localhost bin]# ./redis-server redis.conf daemon yes #守护进程改为是 查看redis进程: [root@localhost bin]# ps aux|grep redis root 5190 0.1 0.3 33936 1712 ? Ssl 18:23 0

Redis命令:scan实现模糊查询

我的未来我决定 提交于 2021-02-16 08:10:09
转; Redis命令:scan实现模糊查询 2017年12月31日 16:54:33 琦彦 阅读数:22893 标签: redis 数据库 Redis命令 scan 模糊查询 更多 个人分类: Redis 所属专栏: Redis:不只是数据库 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fly910905/article/details/78942357 1.scan前言 从Redis v2.8开始,SCAN命令已经可用,它允许使用游标从keyspace中检索键。 对比KEYS命令,虽然SCAN无法一次性返回所有匹配结果,但是却规避了阻塞系统这个高风险,从而也让一些操作可以放在主节点上执行。 2.SCAN相关命令 SCAN相关命令包括SSCAN 命令、HSCAN 命令和 ZSCAN 命令,分别用于集合、哈希键及有续集等 SCAN 命令用于迭代当前数据库中的数据库键。 SSCAN 命令用于迭代集合键中的元素。 HSCAN 命令用于迭代哈希键中的键值对。 ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。 因为 SCAN 、 SSCAN 、 HSCAN 和 ZSCAN 四个命令的工作方式都非常相似, 要记住: SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一个参数总是一个数据库键。 而 SCAN