jedis

JedisPoolConfig is not assignable to GenericObjectPoolConfig

烈酒焚心 提交于 2019-12-04 06:05:47
I have a Spring based java web application hosted on Heroku. I am attempting to utilize the Spring Caching abstraction using the Redis implementation. When the server starts, I get an error saying: Type 'redis/clients/jedis/JedisPoolConfig' (current frame, stack[3]) is not assignable to 'org/apache/commons/pool2/impl/GenericObjectPoolConfig' Here is my configuration: @Bean RedisConnectionFactory jedisConnectionFactory() throws Exception { URI redisUri = new URI(System.getenv("REDISCLOUD_URL")); JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(); redisConnectionFactory

Redisson实现分布式锁及其底层原理解析

社会主义新天地 提交于 2019-12-04 05:31:58
目前主流的开源解决方案有jedis,redission,lettuce三种解决方案,其中jedis是同步的方案,现在包括spring-data也已经不再内置使用了,替换成了lettuce。redission和lettuce都是基于netty的也就是说他俩都是异步非阻塞的,但是他们有什么区别呢?其实在使用语法上面有一些区别,redission对结果做了一层包装,通过包装类来进行一些额外的操作来达到异步操作,并且redission提供了额外的分部署锁功能。 Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持;Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比, 功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离, 从而让使用者能够将精力更集中地放在处理业务逻辑上。 Jedis使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。 Redisson使用非阻塞的I/O和基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作。 一

J2Cache 中使用 Lettuce 替代 Jedis 管理 Redis 连接

≯℡__Kan透↙ 提交于 2019-12-04 04:59:11
一直以来 J2Cache 都是使用 Jedis 连接 Redis 服务的。Jedis 是一个很老牌的 Redis 的 Java 开发包,使用很稳定,作者维护很勤勉,社区上能搜到的文章也非常非常多。算是使用范围最广的 Redis 开发包。但是 Jedis 比较推出时间比较早,整个设计思路比较传统,例如不支持异步操作,接口设计比较繁琐老套(相比其他开发包而已),使用连接池占用很多的物理连接资源。当然,这个是可以理解的,比较一个比较早期的开发包,相对其做大的结构调整是很难的,而且用户也不一定会接受。 自从 2.7.0 版本开始,J2Cache 就增加了 Lettuce 的支持。Lettuce是一个可伸缩线程安全的 Redis 客户端。多个线程可以共享同一个RedisConnection。它利用优秀 Netty NIO 框架来高效地管理多个连接。 相比较 Jedis ,我觉得 Lettuce 的优点有如下几个方面: 更加直观、结构更加良好的接口设计 基于 Netty NIO 可以高效管理 Redis 连接,不用连接池方式 支持异步操作(J2Cache 暂时没用到这个特性) 文档非常详尽 不过 Lettuce 需要至少 Java 8 的支持,好在 J2Cache 也要求至少 Java 8 ,就这么愉快的决定了。 在 J2Cache 2.7.0 版本以及以后的更新版本中,想使用 Lettuce

何谓redis

非 Y 不嫁゛ 提交于 2019-12-04 00:51:01
Rides 在 spring 中应用 一. redis 的简介 2008 年,意大利一家创业公司 Merzia 的创始人 Salvatore Sanfilippo 为了避免 MySQL的低性能,亲自定做一个数据库,并于 2009 年开发完成,这个就是 Redis。 从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。 从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。 说明: Pivotal 公司是由 EMC 和 VMware 联合成立的一家新公司。Pivotal 希望为新一代的应用提供一个原生的基础,建立在具有领导力的云和网络公司不断转型的IT特性之上。 Pivotal 的使命是推行这些创新,提供给企业 IT 架构师和独立软件提供商 . 二. redis 在 linux 服务器中的安装 1. 上传压缩包到服务器 . 2. 解压压缩包 :tar zxvf redis-5.0.3.tar.gz 3. 安装依赖 :yum -y install gcc-c++ autoconf automake 4. 进行预编译 :切换到解压目录cd redis-5.0.3/make 5. 创建安装目录 :mkdir -p /usr/local/redis(注意解压目录和安装目分开) 6. 启动 :安装的默认目标路径:/usr/local

jmeter操作—从redis中获取token

眉间皱痕 提交于 2019-12-03 20:47:48
嗨,大家好,我是叶子 背景:某APP项目中需要进行各接口的性能测试,比如:测试商品的搜索功能、店铺查询功能等接口,测试时需要保持登录状态,所以需要获取到登录账号的token,方便之后的接口测试。 准备环境:jmeter5.0,下载jar包 下载地址: https://mvnrepository.com/ 1、在搜索框输入jedis关键字,点击"search"获取 2、点击最上面的 Jedis 3、选择下Jedis的版本2.9.0,点击后跳转到可下载页面,点击"jar"进行包的下载 4、将下载好的jar包放到本地jmeter目录下,如:E:\software\apache-jmeter-5.0\lib\ext 5、打开jmeter,右击“测试计划”点击“添加”—>“线程”—>"线程组",如下图操作步骤: 将下载好的jar包引入到jmeter中,如下图操作步骤: 6、在线程组中添加BeanShell取样器,参考下图操作步骤: 7、编写BeanShell脚本,脚本如下: 8、在线程组中加jmeter调试工具Debug Sampler,方便调试,如想具体了解这个工具如何使用,请参考:https://www.cnblogs.com/puresoul/p/4817832.html 9、添加监听器,操作如下图: 10、点击运行,在察看结果树中,看运行结果,点击Debug

启动redis本地服务

好久不见. 提交于 2019-12-03 19:58:03
首先是安装环境 windows版redis: https://github.com/MSOpenTech/redis/releases linux版redis: http://redis.io/download 我的电脑是windows版本接下来windows为例,现在我们的环境安装好了,接下来是要启动redis服务,启动要在两个dos界面输入命令,为了方便我将这两条命令做成批处理, start redis-server.exeredis.windows.conf start redis-cli.exe -h 127.0.0.1 -p 6379 将这两句话写入txt文件保存后,将文件后缀改为bat就可以直接启动(这个文件要放在下载回来的redis文件下) 前期准备工作已经完成,接下来可以了解redis是个什么东西了。简单的来说redis是一个分布式的(string,object)的一个map,可以用于信息之间的传递。下面是java和redis的使用。 public class RedisJava { public static void main(String[] args) { //连接本地redis服务(本地服务要先开呀) Jedis jedis=new Jedis( "localhost" ) ; System .out .println ( "连接成功" ) ; /

使用canal进行mysql数据同步到Redis

泪湿孤枕 提交于 2019-12-03 16:27:46
写这篇博文时,自己一定是含着误删数据库的眼泪写完的,文中的后续部分会谈到这个“从删库到**”的悲惨故事,这个故事深刻地教训了我,我也想以此来警示大家,注意数据安全和数据备份。 1. 可行方案 回归正题:我们的标题为《使用canal进行mysql数据同步到Redis》,那就先来说说我们的目的:mysql数据同步到Redis,想达到读写分离,Redis只做缓存,MySQL做持久化。刚开始想这样干的时候就去网上收集资料,发现了N多做法: 先从Redis读取数据,如果没有查询到;便从mysql查询数据,将查询到的内容放到Redis中。对于写操作,先对mysql进行写,写成功对Redis进行写。当然这是一种相对直观而且简单的方法,但是看起来有许多操作需要我们自己去做。 使用mysql的udf去做,大体的思想是通过数据库中的Trigger调用自定义的函数库来触发对Redis的相应操作,比较麻烦的一点是:自定义的函数库需要我们基于mysql的API进行开发(C++),想想自己的Java程序要去调用这么一堆玩意,本人很不情愿。据了解,该方法也是阿里早起的解决方案,具体的步骤可参照: 《【菜鸟玩Linux开发】通过MySQL自动同步刷新Redis》 通过Gearman去同步,但是通过了解发现,它一般使用在PHP的开发中。 接下来的两种方案都属于对mysql中的binlog进行解析的方法了。

基于Redis实现分布式锁

喜夏-厌秋 提交于 2019-12-03 14:44:15
我们知道分布式锁的特性是排他、避免死锁、高可用。分布式锁的实现可以通过数据库的乐观锁(通过版本号)或者悲观锁(通过for update)、Redis的setnx()命令、Zookeeper(在某个持久节点添加临时有序节点,判断当前节点是否是序列中最小的节点,如果不是则监听比当前节点还要小的节点。如果是,获取锁成功。当被监听的节点释放了锁(也就是被删除),会通知当前节点。然后当前节点再尝试获取锁,如此反复) redis.png 本篇文章,主要讲如何用Redis的形式实现分布式锁。后续文章会讲解热点KEY读取,缓存穿透和缓存雪崩的场景和解决方案、缓存更新策略等等知识点,理论知识点较多。 Redis配置 spring: redis: port: 6379 database: 0 host: 127.0.0.1 password: jedis: pool: max-active: 8 max-wait: -1ms max-idle: 8 min-idle: 0 timeout: 5000ms  Jedis工具类 public class JedisConnectionUtil { private static JedisPool pool = null; static { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

NoSuchMethodError: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute

China☆狼群 提交于 2019-12-03 12:32:29
I am trying to use spring-data-redis in a spring-boot application to work with redis. I am creating JedisConnectionFactory as follows: RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); configuration.setHostName("localhost"); configuration.setPort(6379); JedisConnectionFactory connectionFactory = new JedisConnectionFactory(configuration); It throws the exception: Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.data.repository.config.RepositoryConfigurationSource.getAttribute(Ljava/lang/String;)Ljava/util/Optional; at org.springframework

redis的集群模式和哨兵模式

随声附和 提交于 2019-12-03 09:51:15
redis的集群模式和哨兵模式 redis中集群模式 redis集群模式配置支持3.0及以上的版本。目的提高redis的可用性,但是只能保证 一定程度的高可用 。 redis-cluster原理 Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么: 节点 A 包含 0 到 5500号哈希槽. 节点 B 包含5501 到 11000 号哈希槽. 节点 C 包含11001 到 16384号哈希槽. 这种结构无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态。 因为这种key分布在不同的节点,所以不能使用多keys的操作。(其实也可以变相的实现,但是在高负载的情况下存在风险)。 redis-cluster的主从复制模型 为了实现一定程度的高可用,比如某个节点挂掉的情况下,服务仍然能够正常使用。redis使用了主从复制模型,例如创建三个节点的集群A,B,C,在集群创建的时候或者过段时间为三个节点,添加从节点A1,B1,C1.此时整个集群有三个master节点和三个slave节点。A节点down掉的情况,集群推举A1为主节点继续服务。当然,如果A,A1都挂掉的情况,集群则无法使用。所以这也是为什么集群只能保证一定程度的高可用。 redis集群安装配置