1.是什么?
Redis是一个Key-Value键值对存储系统。我们通常把它用作为缓存服务器。
2.为什么?
①Redis 是一个高性能的key-value数据库
②它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便
③Redis支持主从同步
3.怎么用?
3.1 普通使用
1、获取jedis连接
Jedis jedis = new Jedis("192.168.142.12");
2、键值存储
jedis.set("A","B");
3、获取
jedis.get("A");
4、删除
jedis.del("A");
3.2 使用连接池集成到Spring框架中使用
1、xml配置
<!--配置对象-->
<bean id="jedisConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 可用连接实例的最大数目,默认值为8;-->
<!-- 如果赋值为-1,表示不限制;如果pool已经分配了maxActive个实例,此时pool状态为exhausted(耗尽) -->
<property name="maxActive" value="10" />
<!-- 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8 -->
<property name="maxIdle" value="10" />
<!-- 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。 -->
<!--如果超过等待时间,则直接抛出JedisConnectionException;-->
<property name="maxWait" value="5" />
<property name="testOnBorrow" value="true" /> <!-- 如果为true,则得到的jedis实例均是可用的-->
</bean>
<!-- 连接池 参数依次为配置对象、ip、端口号、密码-->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg index="0" ref="jedisConfig" />
<constructor-arg index="1" value="localhost" />
<constructor-arg index="2" value="6379" />
<constructor-arg index="3" value="1000000" />
</bean>
<!-- 自定义客户端 -->
<bean id="jedisClient" class="cn.com.sgming.core.jedis.JedisClient">
<property name="jedisPool" ref="jedisPool" />
<property name="serializer" ref="hessianSerializer" />
</bean>
2、java代码
public class JedisClient{
//jedis连接池
private JedisPool jedisPool;
public void setJedisPool(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
/**
* Description: 从连接池中获取jedis连接
* @return Jedis
*/
public Jedis getResource() {
return jedisPool.getResource();
}
/**
* Description: 将jedis连接放回连接池中
* @param resource void
*/
public void returnResource(Jedis resource) {
jedisPool.returnResource(resource);
}
public Boolean set(String key, byte[] value) {
String result = null;
Jedis jedis = getResource();
try {
result = jedis.set(key, value);
} finally {
returnResource(jedis);
}
return result;
}
public byte[] getBytes(String key) {
byte[] result = null;
Jedis jedis = getResource();
try {
result = jedis.get(key);
} finally {
returnResource(jedis);
}
return result;
}
public Boolean delete(String key) {
Long result = null;
Jedis jedis = getResource();
try {
result = jedis.del(key);
} finally {
returnResource(jedis);
}
return result;
}
}
*注意:redis可以对所有的内容进行二进制的存储,而java是可以对所有对象进行序列化的,要注意序列化问题(参考redis序列化)
序列化可参考:Java基础学习总结——Java对象的序列化和反序列化,但是有个问题,我的测试程序改了serialVersionUID以后没有抛出异常,后续在跟进一下吧。
最后放两个相关链接: