- 浏览: 586313 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
一. 原理:
1. Jedis是redis的java版本的客户端实现。
1.1 以下是jedis代码测试,使用了两个redis服务:
Codis 是一个分布式 Redis 解决方案,对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 ,上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.
下图可以看到redis客户端连接是是codis的代理。代理连接很多的分组,一个组包括一个master和0到多个slave。
2.1 codis代码测试:先配置codis,codis的安装配置就不讲了,我测试在集成在spring中了。
spring中的配置:
redis配置文件:
封装的redis方法,用的是redisTemplate:
用junit测试:
二. 性能对比
两者的性能比较,如下图:
三. 动态扩容
1. codis动态扩容
下图是整个codis的界面
转自:http://blog.csdn.net/dayibagou/article/details/43937039
1. Jedis是redis的java版本的客户端实现。
1.1 以下是jedis代码测试,使用了两个redis服务:
public class RedisShardPoolTest { static ShardedJedisPool pool;//切片连接池 static{ JedisPoolConfig config =new JedisPoolConfig();//Jedis池配置 config.setMaxActive(300);//最大活动的对象个数 config.setMaxIdle(1000 * 60);//对象最大空闲时间 config.setMaxWait(1000 * 10);//获取对象时最大等待时间 config.setTestOnBorrow(true);//;如果为true,则得到的jedis实例均是可用的; String hostA = "127.0.0.1";//服务器地址 int portA = 6379;//redis端口号 String hostB = "127.0.0.1"; int portB = 6378; List<JedisShardInfo> jdsInfoList =new ArrayList<JedisShardInfo>(2); JedisShardInfo infoA = new JedisShardInfo(hostA, portA); JedisShardInfo infoB = new JedisShardInfo(hostB, portB); jdsInfoList.add(infoA); jdsInfoList.add(infoB); pool =new ShardedJedisPool(config, jdsInfoList); } public static void main(String[] args) { long s1=System.currentTimeMillis(); Map<String, String> map=new HashMap<String, String>(); for(int i=0; i<1000; i++){ ShardedJedis jds = null;//切片客户端连接 jds = pool.getResource(); try { map.put("s"+i, "s"+i); jds.hmset("s"+i, map); } catch (Exception e) { e.printStackTrace(); } finally { pool.returnResource(jds); } } long s2=System.currentTimeMillis(); System.out.println(testTime(s2-s1)); } public static String testTime(long ss){ String aa=null; long zongmiaoshu = ss / 1000; long dangqianmiaoshu = zongmiaoshu % 60; long zongfenshu = zongmiaoshu /60; long dangqianfenshu = zongfenshu % 60; long zongshishu = zongfenshu / 60; long dangqianshishu = zongshishu % 24; aa="当前时间:" + dangqianshishu + ":" + dangqianfenshu + ":" + dangqianmiaoshu; return aa; } }
Codis 是一个分布式 Redis 解决方案,对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 ,上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.
下图可以看到redis客户端连接是是codis的代理。代理连接很多的分组,一个组包括一个master和0到多个slave。
2.1 codis代码测试:先配置codis,codis的安装配置就不讲了,我测试在集成在spring中了。
spring中的配置:
<bean id="ehcacheService" class="net.okdi.core.common.redis.RedisServiceImpl"/> <context:property-placeholder location="classpath:/redis.properties" ignore-unresolvable="true" /> <bean id="jedisConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxActive" value="${redis_max_active}"></property> <property name="maxIdle" value="${redis_max_idle}"></property> <property name="maxWait" value="${redis_max_wait}"></property> <property name="testOnBorrow" value="${redis_test_on_borrow}"></property> </bean> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis_addr}"></property> <property name="port" value="${redis_port}"></property> <property name="password" value="${redis_auth}"></property> <property name="poolConfig" ref="jedisConfig"></property> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="connectionFactory" /> 如果不配置Serializer,那么存储的时候智能使用String,如果用User类型存储,那么会提示错误User can't cast to String!!! <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> </property> </bean>
redis配置文件:
redis_addr=192.168.31.204 redis_port=19000 (codis代理服务器端口) redis_auth=okdi redis_max_active=1024 redis_max_idle=200 redis_max_wait=10000 redis_timeout=10000 redis_test_on_borrow=true
封装的redis方法,用的是redisTemplate:
public class RedisServiceImpl implements EhcacheService { private static Logger logger = Logger.getLogger(EhcacheServiceImpl.class); @Autowired private StringRedisTemplate redisTemplate; @Autowired private RedisConstant redisConstant; @Override public void put(String cacheName, String key, String value) { // boolean bool = redisTemplate.hasKey(cacheName); if (cacheName==null || "".equals(cacheName) || key==null || "".equals(key)) { return; } //放入redis redisTemplate.opsForHash().put(cacheName, key, value); long expireTime = redisConstant.getExpireTime(cacheName); //如果不等于-1,则该cacheName配置有过期时间 if(expireTime != -1){ redisTemplate.expire(cacheName, expireTime, TimeUnit.SECONDS); } } @Override public void put(String cacheName, String key, Object value) { if (cacheName==null || "".equals(cacheName) || key==null || "".equals(key)) { return; } //放入redis redisTemplate.opsForHash().put(cacheName, key, JSON.toJSONString(value)); long expireTime = redisConstant.getExpireTime(cacheName); //如果不等于-1,则该cacheName配置有过期时间 if(expireTime != -1){ redisTemplate.expire(cacheName, expireTime, TimeUnit.SECONDS); } } }
用junit测试:
public class test11 extends BaseTest{ @Autowired private EhcacheService redisService; @SuppressWarnings("rawtypes") @Test public void test1(){ long s1=System.currentTimeMillis(); for(int i=0;i<10000;i++){ redisService.put("a"+i, "a"+i,"a"+i); redisService.remove("a"+i, "a"+i); } long s2=System.currentTimeMillis(); System.out.println(testTime(s2-s1)); System.out.println(redisService.getValueByKey("eeee9", "e9")); }
二. 性能对比
两者的性能比较,如下图:
三. 动态扩容
1. codis动态扩容
下图是整个codis的界面
转自:http://blog.csdn.net/dayibagou/article/details/43937039
发表评论
-
缓存穿透、缓存击穿、缓存雪崩区别和解决方案
2022-03-28 00:07 165缓存穿透、缓存击穿、缓存雪崩区别和解决方案 缓存穿透,缓存 ... -
SpringBoot系列教程之Redis集群环境配置
2022-02-28 00:37 211SpringBoot系列教程之Redis集群环境配置 Co ... -
Redis 分布式锁的实现
2021-05-23 18:53 228Redisson实现分布式锁(1)---原理 https:// ... -
Redis面试题
2021-05-23 16:30 265redis布隆过滤器的使用 布隆过滤器可以看成是一个不是很准确 ... -
Redis性能问题排查解决手册
2019-08-07 10:31 367Redis性能问题排查解决手册(七) https://www. ... -
linux下安装redis及其中遇到的问题的解决方法
2017-11-29 16:46 470https://www.cnblogs.com/wyy123/ ... -
Redis scan命令的一次坑
2017-11-16 12:07 1058http://www.jianshu.com/p/d9f0a5 ... -
redis命中率计算
2017-09-29 21:29 1599redis提供了INFO这个命令,能够随时监控服务器的状态,只 ... -
redis分片
2017-07-10 18:41 450http://www.cnblogs.com/liucongl ... -
Redis_conf配置文件说明
2017-05-22 13:58 438Redis_conf配置文件说明 http://blog.cs ... -
redis 数据持久化
2017-05-22 10:16 6141、快照(snapshots) 缺省情况情况下,Redi ... -
overcommit_memory
2017-05-17 09:29 529/etc/sysctl.conf ... -
批量删除Redis数据库中的Key
2017-05-16 10:58 430Redis 中有删除单个 Key 的指令 DEL,但好像没有批 ... -
redis配置认证密码
2017-04-14 19:34 452http://blog.csdn.net/zyz5119197 ... -
redis-cluster研究和使用
2016-12-16 10:09 404参考:http://hot66hot.iteye.com/bl ... -
Redis 3.2.1集群搭建
2016-10-27 10:25 401http://www.cnblogs.com/yuanerme ... -
redis从2.1.0升级到2.6.0报错:java.lang.NoSuchMethodError
2016-10-14 13:05 1515项目中使用了jedis-2.1.0.jar,现在升级为jedi ... -
redis-cli 如何重写服务器的主机名和端口
2016-08-17 16:08 1159windows 环境下,启动多个redis服务,使用不同的端口 ... -
《Redis官方文档》用Redis构建分布式锁
2016-08-08 13:37 656redis深度讲解 http://edu.csdn.net/c ... -
Jedis returnResource使用注意事项
2016-08-07 12:50 1608http://my.oschina.net/zhuguowei ...
相关推荐
codis数据迁移性能优化PDF
codis性能测试代码,占用所有proxy,保持每台机器资源使用率平衡;支持多线程入库,支持随机查询
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的...
在各redis机上启动codis服务: ./bin/codis-server ./conf/redis6379.conf & ./bin/codis-server ./conf/redis6380.conf & 在管理机上启动: nohup ./bin/codis-dashboard --ncpu=4 --config=./conf/dashboard.conf ...
codis集群安装部署手册codis集群安装部署手册codis集群安装部署手册codis集群安装部署手册codis集群安装部署手册
redis-codis集群
Codis ansiable playbook 一键部署
Codis3.1集群搭建文档
支持codis迁移数据到redis 支持codis迁移数据到redis cluster 支持redis迁移数据到redis 支持redis迁移数据到codis 支持增量同步数据
codis-3.0.3环境搭建,本人测试通过,可以按照。
针对PIKA编译的Codis二进制文件,版本信息如下: Codis版本:3.2 Pika版本:3.0.16
codis安装包以及安装文档,2019-09-23 最近刚自己动手安装的,写的还算比较详细吧。
Codis是用Go编写基于代理的高性能Redis集群解决方案
一个满足亿级流量实时计算,实时监控的系统,SpringBoot+ElasticSearch集群+RocketMQ+Codis集群架构实现,项目经过严格测试,确保可以运行! 主要功能是通过ElasticSearch实现实时计算、实时分析海量数据,聚合处理...
Codis分布式redis集群及安装使用文档。包括内容安装及注意事项。
只需要设置gopath,就可以直接使用,所有的依赖包都已经加到里面了
codis 2.8以上版本 建议使用coids3.0 3.2版本适合这个jar包
都已经完全编译好了,可以直接使用,只需要设置一个gopath
codis-3.1 for linux 64 bit
最新版codis集群部署,整合zookeeper集群,已成功部署运行。