- 浏览: 545312 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (618)
- java (109)
- Java web (43)
- javascript (52)
- js (15)
- 闭包 (2)
- maven (8)
- 杂 (28)
- python (47)
- linux (51)
- git (18)
- (1)
- mysql (31)
- 管理 (1)
- redis (6)
- 操作系统 (12)
- 网络 (13)
- mongo (1)
- nginx (17)
- web (8)
- ffmpeg (1)
- python安装包 (0)
- php (49)
- imagemagic (1)
- eclipse (21)
- django (4)
- 学习 (1)
- 书籍 (1)
- uml (3)
- emacs (19)
- svn (2)
- netty (9)
- joomla (1)
- css (1)
- 推送 (2)
- android (6)
- memcached (2)
- docker、 (0)
- docker (7)
- go (1)
- resin (1)
- groovy (1)
- spring (1)
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
原文地址:http://snowolf.iteye.com/blog/1633196
用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET
等。基于这些限制,有必要考虑Redis!
相关链接:
征服 Redis
征服 Redis + Jedis
征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)
征服 Redis + Jedis + Spring (三)—— 列表操作
言归正传,目前Redis大概有3中基于Java语言的Client:
Jredis
Jedis
Redis4J
这里只说Jedis,因为它是官方提供的唯一Redis Client For Java Provider!
一、简单使用Jedis
需要Jedis就从Maven获取吧!
Maven Pom.xml
Xml代码 收藏代码
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.1.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
如果只是简单使用Jedis,以下这么几行代码足够:
Java代码 收藏代码
Jedis jedis = new Jedis("10.11.20.140");
String keys = "name";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, "snowolf");
// 取数据
String value = jedis.get(keys);
System.out.println(value);
二、池化使用Jedis
Jedis使用commons-pool完成池化实现。
先做个配置文件:
Properties代码 收藏代码
#最大分配的对象数
redis.pool.maxActive=1024
#最大能够保持idel状态的对象数
redis.pool.maxIdle=200
#当池内没有返回对象时,最大等待时间
redis.pool.maxWait=1000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#IP
redis.ip=10.11.20.140
#Port
redis.port=6379
在静态代码段中完成初始化:
Java代码 收藏代码
private static JedisPool pool;
static {
ResourceBundle bundle = ResourceBundle.getBundle("redis");
if (bundle == null) {
throw new IllegalArgumentException(
"[redis.properties] is not found!");
}
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(Integer.valueOf(bundle
.getString("redis.pool.maxActive")));
config.setMaxIdle(Integer.valueOf(bundle
.getString("redis.pool.maxIdle")));
config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));
config.setTestOnBorrow(Boolean.valueOf(bundle
.getString("redis.pool.testOnBorrow")));
config.setTestOnReturn(Boolean.valueOf(bundle
.getString("redis.pool.testOnReturn")));
pool = new JedisPool(config, bundle.getString("redis.ip"),
Integer.valueOf(bundle.getString("redis.port")));
}
然后,修改前面那段jedis操作Redis
Java代码 收藏代码
// 从池中获取一个Jedis对象
Jedis jedis = pool.getResource();
String keys = "name";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, "snowolf");
// 取数据
String value = jedis.get(keys);
System.out.println(value);
// 释放对象池
pool.returnResource(jedis);
改为从对象池中,获取Jedis实例:
Java代码 收藏代码
// 从池中获取一个Jedis对象
Jedis jedis = pool.getResource();
切记,最后使用后,释放Jedis对象:
Java代码 收藏代码
// 释放对象池
pool.returnResource(jedis);
三、一致性哈希
Memcached完全基于分布式集群,而Redis是Master-Slave,如果想把Reids,做成集群模式,无外乎多做几套Master-Slave,每套Master-Slave完成各自的容灾处理,通过Client工具,完成一致性哈希。
PS:Memcached是在Server端完成Sharding,Redis只能依靠各个Client做Sharding。可能会在Redis 3.0系列支持Server端Sharding。
保留前面的JedisPoolConfig,新增两个Redis的IP(redis1.ip,redis2.ip),完成两个JedisShardInfo实例,并将其丢进List中:
Java代码 收藏代码
JedisShardInfo jedisShardInfo1 = new JedisShardInfo(
bundle.getString("redis1.ip"), Integer.valueOf(bundle .getString("redis.port")));
JedisShardInfo jedisShardInfo2 = new JedisShardInfo(
bundle.getString("redis2.ip"), Integer.valueOf(bundle .getString("redis.port")));
List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();
list.add(jedisShardInfo1);
list.add(jedisShardInfo2);
初始化ShardedJedisPool代替JedisPool:
Java代码 收藏代码
ShardedJedisPool pool = new ShardedJedisPool(config, list);
改由ShardedJedis,获取Jedis对象:
Java代码 收藏代码
// 从池中获取一个Jedis对象
ShardedJedis jedis = pool.getResource();
String keys = "name";
String value = "snowolf";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, value);
// 取数据
String v = jedis.get(keys);
System.out.println(v);
// 释放对象池
pool.returnResource(jedis);
四、Spring封装参考
Ok,完成上述代码足够完成简单任务,如果有必要,可以用Spring封装初始化:
Xml代码 收藏代码
<context:property-placeholder location="classpath:redis.properties" />
<bean
id="jedisPoolConfig"
class="redis.clients.jedis.JedisPoolConfig"
>
<property
name="maxActive"
value="${redis.pool.maxActive}" />
<property
name="maxIdle"
value="${redis.pool.maxIdle}" />
<property
name="maxWait"
value="${redis.pool.maxWait}" />
<property
name="testOnBorrow"
value="${redis.pool.testOnBorrow}" />
</bean>
<bean
id="shardedJedisPool"
class="redis.clients.jedis.ShardedJedisPool"
>
<constructor-arg
index="0"
ref="jedisPoolConfig" />
<constructor-arg index="1">
<list>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg
index="0"
value="${redis1.ip}" />
<constructor-arg
index="1"
value="${redis.port}"
type="int" />
</bean>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg
index="0"
value="${redis2.ip}" />
<constructor-arg
index="1"
value="${redis.port}"
type="int" />
</bean>
</list>
</constructor-arg>
</bean>
代码可以更简洁一些:
Java代码 收藏代码
private ApplicationContext app;
private ShardedJedisPool pool;
@Before
public void before() throws Exception {
app = new ClassPathXmlApplicationContext("applicationContext.xml");
pool = (ShardedJedisPool) app.getBean("shardedJedisPool");
}
@Test
public void test() {
// 从池中获取一个Jedis对象
ShardedJedis jedis = pool.getResource();
String keys = "name";
String value = "snowolf";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, value);
// 取数据
String v = jedis.get(keys);
System.out.println(v);
// 释放对象池
pool.returnResource(jedis);
assertEquals(value, v);
}
当然,Spring提供了对于Redis的专门支持:spring-data-redis,以后有机会再深入研究。
详见附件!
相关链接:
征服 Redis
征服 Redis + Jedis
征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)
征服 Redis + Jedis + Spring (三)—— 列表操作
jedis.zip (24.4 KB)
用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET
等。基于这些限制,有必要考虑Redis!
相关链接:
征服 Redis
征服 Redis + Jedis
征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)
征服 Redis + Jedis + Spring (三)—— 列表操作
言归正传,目前Redis大概有3中基于Java语言的Client:
Jredis
Jedis
Redis4J
这里只说Jedis,因为它是官方提供的唯一Redis Client For Java Provider!
一、简单使用Jedis
需要Jedis就从Maven获取吧!
Maven Pom.xml
Xml代码 收藏代码
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.1.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
如果只是简单使用Jedis,以下这么几行代码足够:
Java代码 收藏代码
Jedis jedis = new Jedis("10.11.20.140");
String keys = "name";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, "snowolf");
// 取数据
String value = jedis.get(keys);
System.out.println(value);
二、池化使用Jedis
Jedis使用commons-pool完成池化实现。
先做个配置文件:
Properties代码 收藏代码
#最大分配的对象数
redis.pool.maxActive=1024
#最大能够保持idel状态的对象数
redis.pool.maxIdle=200
#当池内没有返回对象时,最大等待时间
redis.pool.maxWait=1000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#IP
redis.ip=10.11.20.140
#Port
redis.port=6379
在静态代码段中完成初始化:
Java代码 收藏代码
private static JedisPool pool;
static {
ResourceBundle bundle = ResourceBundle.getBundle("redis");
if (bundle == null) {
throw new IllegalArgumentException(
"[redis.properties] is not found!");
}
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(Integer.valueOf(bundle
.getString("redis.pool.maxActive")));
config.setMaxIdle(Integer.valueOf(bundle
.getString("redis.pool.maxIdle")));
config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));
config.setTestOnBorrow(Boolean.valueOf(bundle
.getString("redis.pool.testOnBorrow")));
config.setTestOnReturn(Boolean.valueOf(bundle
.getString("redis.pool.testOnReturn")));
pool = new JedisPool(config, bundle.getString("redis.ip"),
Integer.valueOf(bundle.getString("redis.port")));
}
然后,修改前面那段jedis操作Redis
Java代码 收藏代码
// 从池中获取一个Jedis对象
Jedis jedis = pool.getResource();
String keys = "name";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, "snowolf");
// 取数据
String value = jedis.get(keys);
System.out.println(value);
// 释放对象池
pool.returnResource(jedis);
改为从对象池中,获取Jedis实例:
Java代码 收藏代码
// 从池中获取一个Jedis对象
Jedis jedis = pool.getResource();
切记,最后使用后,释放Jedis对象:
Java代码 收藏代码
// 释放对象池
pool.returnResource(jedis);
三、一致性哈希
Memcached完全基于分布式集群,而Redis是Master-Slave,如果想把Reids,做成集群模式,无外乎多做几套Master-Slave,每套Master-Slave完成各自的容灾处理,通过Client工具,完成一致性哈希。
PS:Memcached是在Server端完成Sharding,Redis只能依靠各个Client做Sharding。可能会在Redis 3.0系列支持Server端Sharding。
保留前面的JedisPoolConfig,新增两个Redis的IP(redis1.ip,redis2.ip),完成两个JedisShardInfo实例,并将其丢进List中:
Java代码 收藏代码
JedisShardInfo jedisShardInfo1 = new JedisShardInfo(
bundle.getString("redis1.ip"), Integer.valueOf(bundle .getString("redis.port")));
JedisShardInfo jedisShardInfo2 = new JedisShardInfo(
bundle.getString("redis2.ip"), Integer.valueOf(bundle .getString("redis.port")));
List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();
list.add(jedisShardInfo1);
list.add(jedisShardInfo2);
初始化ShardedJedisPool代替JedisPool:
Java代码 收藏代码
ShardedJedisPool pool = new ShardedJedisPool(config, list);
改由ShardedJedis,获取Jedis对象:
Java代码 收藏代码
// 从池中获取一个Jedis对象
ShardedJedis jedis = pool.getResource();
String keys = "name";
String value = "snowolf";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, value);
// 取数据
String v = jedis.get(keys);
System.out.println(v);
// 释放对象池
pool.returnResource(jedis);
四、Spring封装参考
Ok,完成上述代码足够完成简单任务,如果有必要,可以用Spring封装初始化:
Xml代码 收藏代码
<context:property-placeholder location="classpath:redis.properties" />
<bean
id="jedisPoolConfig"
class="redis.clients.jedis.JedisPoolConfig"
>
<property
name="maxActive"
value="${redis.pool.maxActive}" />
<property
name="maxIdle"
value="${redis.pool.maxIdle}" />
<property
name="maxWait"
value="${redis.pool.maxWait}" />
<property
name="testOnBorrow"
value="${redis.pool.testOnBorrow}" />
</bean>
<bean
id="shardedJedisPool"
class="redis.clients.jedis.ShardedJedisPool"
>
<constructor-arg
index="0"
ref="jedisPoolConfig" />
<constructor-arg index="1">
<list>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg
index="0"
value="${redis1.ip}" />
<constructor-arg
index="1"
value="${redis.port}"
type="int" />
</bean>
<bean class="redis.clients.jedis.JedisShardInfo">
<constructor-arg
index="0"
value="${redis2.ip}" />
<constructor-arg
index="1"
value="${redis.port}"
type="int" />
</bean>
</list>
</constructor-arg>
</bean>
代码可以更简洁一些:
Java代码 收藏代码
private ApplicationContext app;
private ShardedJedisPool pool;
@Before
public void before() throws Exception {
app = new ClassPathXmlApplicationContext("applicationContext.xml");
pool = (ShardedJedisPool) app.getBean("shardedJedisPool");
}
@Test
public void test() {
// 从池中获取一个Jedis对象
ShardedJedis jedis = pool.getResource();
String keys = "name";
String value = "snowolf";
// 删数据
jedis.del(keys);
// 存数据
jedis.set(keys, value);
// 取数据
String v = jedis.get(keys);
System.out.println(v);
// 释放对象池
pool.returnResource(jedis);
assertEquals(value, v);
}
当然,Spring提供了对于Redis的专门支持:spring-data-redis,以后有机会再深入研究。
详见附件!
相关链接:
征服 Redis
征服 Redis + Jedis
征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)
征服 Redis + Jedis + Spring (三)—— 列表操作
jedis.zip (24.4 KB)
发表评论
-
java的InputStream和OutputStream的理解【转】
2015-11-09 18:10 624原文地址:http://www.cnblogs.com/spr ... -
【JSP】让HTML和JSP页面不缓存的方法
2015-10-14 10:16 448原文地址:http://blog.csdn.net/juebl ... -
jsp去掉浏览器缓存
2015-10-14 09:21 591原文地址:http://bbs.csdn.net/topics ... -
Spring定时任务的几种实现
2015-09-17 18:02 359原文地址:http://gong1208.iteye.com/ ... -
Java 8 简明教程
2015-08-31 17:43 325原文地址:http://www.iteye.com/magaz ... -
Java 8 简明教程
2015-08-28 15:30 540原文地址:http://www.iteye.com/magaz ... -
Spring 3.0 注解注入详解
2015-08-20 12:01 486原文地址:http://developer.51cto.com ... -
Apache所有项目介绍
2015-08-20 11:47 917原文地址:http://haisha.iteye.com/bl ... -
jdk5.0新特性介绍
2015-08-04 18:08 446原文地址:http://blog.sina.com.cn/s/ ... -
Apache Log4j配置说明
2015-05-18 15:59 389原文地址:http://zhangjunh ... -
ubuntu 14.04 下通过apt-get 安装jdk
2015-04-09 16:42 664原文地址:http://segmentfault.com/a/ ... -
【原创】Eclipse Class Decompiler——Java反编译插件
2015-04-01 15:00 575原文地址:http://www.blogj ... -
jvisualvm远程监控Tomcat
2015-03-06 10:19 683原文地址:http://ihuangweiwei.iteye. ... -
Java 并发核心编程
2015-01-08 18:07 591原文地址:http://www.cnblogs.com/see ... -
log4j日志文件乱码问题的解决方法
2015-01-06 18:11 789原文地址:http://blog.csdn.net/inkfi ... -
SHA1与MD5
2014-12-22 15:31 575原文地址:http://blog.csdn.net/fogle ... -
Java连接redis的使用示例
2014-12-19 12:08 1035原文地址:http://blog.csdn.net/wgw33 ... -
java对redis的基本操作
2014-12-19 12:07 555原文地址:http://www.cnblogs.com/edi ... -
Eclipse Class Decompiler——Java反编译插件
2014-10-16 11:02 434原文地址:http://bbs.csdn. ... -
Eclipse上Java反编译插件Java Decompiler的安装与使用
2014-10-16 11:00 832原文地址:http://my.oschina.net/Pipi ...
相关推荐
Redis Windows32位+64位安装包,Linux压缩包, Redis图形操作管理软件,Jedis
redis3.2.1+jedis2.8.0+jedis.api.rar一站下载
Redis+Jedis+案例实战(高清视频教程).rar
redis3.2.1+jedis2.5+jedis.api一站下载
redis2.8windows64位版本+jedis2.5jar+jedis英文api
Springboot+Redis+Dubbo+Rocketmq Springboot+Redis+Dubbo+Rocketmq Springboot+Redis+Dubbo+Rocketmq
里面包含了spring-data-redis-1.3.4.RELEASE.jar ,但是jedis可以不用,用spring-data-redis方式的同学可以使用
NULL 博文链接:https://snowolf.iteye.com/blog/1824868
Spring boot+redis+rabbitMq实例整合的简单例子,可用来参考学习
SSM+redis+mysql框架实现的一个简单博客,SSM+redis+mysql框架实现的一个简单博客SSM+redis+mysql框架实现的一个简单博客SSM+redis+mysql框架实现的一个简单博客SSM+redis+mysql框架实现的一个简单博客SSM+redis+...
基于maven+springmvc+redis+mybatis整合案例框架,主要实现redis的读取案例
前后端分离(这里只展示后台),基于url拦截的通用权限管理系统,采用jwt+redis的机制取代传统session+cookie的认证授权方式,shiro框架,配置Jedis,以redis作缓存
NULL 博文链接:https://snowolf.iteye.com/blog/1667104
SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+...
本项目JDK8x64+SpringBoot+MyBatis+Redis+Druid+Beetl+Shrio的框架组合, 自研工作流引擎,支持可视化表单设计与流程设计。 支技分布式部署。功能完善能够满足中大型企业办公需要。 本项目JDK8x64+SpringBoot+...
vue+springboot+redis+kaptcha实现登录页验证码
SpringMVC+Redis+MyBatis项目,主要实现Redis注释缓存
yshop基于当前流行技术组合的前后端分离商城系统: SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含分类、sku、运费模板、素材库、小程序直播、拼团、砍价、商户管理、 秒杀、...
Springboot+redis+mybatisplus