jedis是使用java代码操做redis数据库的,jedis和redis的关系,就至关于JDBC和MySql的关系java
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
复制代码
public class RedisTest {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
// jedis的方法和redis的命令一一对应
jedis.set("username","zhansan");
jedis.close();
}
}
复制代码
Jedis链接池:建立一个链接池对象,每次须要操做 redis数据库,都从链接池中获取 jedis对象 使用完毕,jedis对象又从新放回链接池。若是Jedis在使用过程当中出错,则也须要还给JedisPoolredis
链接池参数配置spring
JedisPool的配置参数大部分是由JedisPoolConfig的对应项来赋值的。数据库
maxActive:控制一个pool可分配多少个jedis实例,经过pool.getResource()来获取;若是赋值为-1,则表示不限制;若是pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted。缓存
maxIdle:控制一个pool最多有多少个状态为idle(空闲)的jedis实例;bash
whenExhaustedAction:表示当pool中的jedis实例都被allocated完时,pool要采起的操做;默认有三种。工具
WHEN_EXHAUSTED_FAIL --> 表示无jedis实例时,直接抛出NoSuchElementException;测试
WHEN_EXHAUSTED_BLOCK --> 则表示阻塞住,或者达到maxWait时抛出JedisConnectionException;ui
WHEN_EXHAUSTED_GROW --> 则表示新建一个jedis实例,也就说设置的maxActive无用;spa
maxWait:表示当borrow一个jedis实例时,最大的等待时间,若是超过等待时间,则直接抛JedisConnectionException;
testOnBorrow:得到一个jedis实例的时候是否检查链接可用性(ping());若是为true,则获得的jedis实例均是可用的;
testOnReturn:return 一个jedis实例给pool时,是否检查链接可用性(ping());
testWhileIdle:若是为true,表示有一个idle object evitor线程对idle object进行扫描,若是validate失败,此object会被从pool中drop掉;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
timeBetweenEvictionRunsMillis:表示idle object evitor两次扫描之间要sleep的毫秒数;
numTestsPerEvictionRun:表示idle object evitor每次扫描的最多的对象数;
minEvictableIdleTimeMillis:表示一个对象至少停留在idle状态的最短期,而后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基础上,加入了至少minIdle个对象已经在pool里面了。若是为-1,evicted不会根据idle time驱逐任何对象。若是minEvictableIdleTimeMillis>0,则此项设置无心义,且只有在timeBetweenEvictionRunsMillis大于0时才有意义;
lifo:borrowObject返回对象时,是采用DEFAULT_LIFO(last in first out,即相似cache的最频繁使用队列),若是为False,则表示FIFO队列;
其中JedisPoolConfig对一些参数的默认设置以下:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1
package com.baizhi.redis;
import redis.clients.jedis.JedisPool;
package com.atguigu.redis.test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisUtils {
//被volatile修饰的变量不会被本地线程缓存,对该变量的读写都是直接操做共享内存。
private static volatile JedisPool jedisPool = null;
private JedisUtils() {}
public static JedisPool getJedisPoolInstance() {
if(null == jedisPool)
{
synchronized (JedisUtils.class)
{
if(null == jedisPool)
{
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxActive(1000);
poolConfig.setMaxIdle(32);
poolConfig.setMaxWait(100*1000);
poolConfig.setTestOnBorrow(true);
jedisPool = new JedisPool(poolConfig,"127.0.0.1");
}
}
}
return jedisPool;
}
public static void release(JedisPool jedisPool,Jedis jedis) {
if(null != jedis)
{
jedisPool.returnResourceObject(jedis);
}
}
}
复制代码
Spring-Data-Redis项目(简称SDR)对Redis的Key-Value数据存储操做提供了更高层次的抽象,相似于Spring Framework对JDBC支持同样。Spring-Data-Redis项目(简称SDR)对Redis的Key-Value数据存储操做提供了更高层次的抽象,相似于Spring Framework对JDBC支持同样。
Spring Data Redis使得在Spring应用中读写Redis数据库更加容易
链接Redis服务
在Spring Data Redis中经过org.springframework.data.redis.connection包中的RedisConnection和RedisConnectionFactory类来获取Redis链接。
链接redis服务集群
熟悉Spring的JdbcTemplate对象的话,应该大概能猜出来RedisTemplate的做用了,RedisTemplate对象对RedisConnection进行了封装,它提供了链接管理,序列化等功能,它对Redis的交互进行了更高层次的抽象。另外还提供了Redis操做命令的操做视图,这极大的方便和简化了Redis的操做。
Key类型操做 | |
---|---|
ValueOperations | Redis String/Value 操做 |
ListOperations | Redis List 操做 |
SetOperations | Redis Set 操做 |
ZSetOperations | Redis Sort Set 操做 |
HashOperations | Redis Hash 操做 |
Value约束操做 | |
BoundValueOperations | Redis String/Value key 约束 |
BoundListOperations | Redis List key 约束 |
BoundSetOperations | Redis Set key 约束 |
BoundZSetOperations | Redis Sort Set key 约束 |
BoundHashOperations | Redis Hash key 约束 |
简单的String操做
简单的List操做
简单的Set操做
简单的Zset操做
简单的Hash操做
其余操做
使用RedisSerializer
说明 :
这里配置了RedisTemplate和StringRedisTemplate,不一样之处在于StringRedisTemplate的Key-Value序列化使用的是StringRedisSerializer。使用StringRedisTemplate操做Redis以后的结果是读友好的。 另外对Hash类型而言,还有对应的HashKey序列化(其对应于Hash类型的字段名)。
我不能保证每个地方都是对的,可是能够保证每一句话,每一行代码都是通过推敲和斟酌的。但愿每一篇文章背后都是本身追求纯粹技术人生的态度。
永远相信美好的事情即将发生。