场景:
1.在基于spring的web项目中使用redis,一般会在配置文件中配置Jedis连接池,连接工厂,RedisTemplate模板等,
把这些类交给spring容器去创建对象,使用时只需注入即可.
2.本例是将spring中用配置文件配置使用redis方式,改成用代码实现配置.可在main函数中直接使用连接池技术操作redis等
细节:
本例共计一个类包含以下部分:
1.配置连接池参数
/**1.配置连接池参数*/
public static JedisPoolConfig getPoolConfig(){
JedisPoolConfig jedisPoolConfig = new redis.clients.jedis.JedisPoolConfig();
jedisPoolConfig.setMaxTotal(1024);
jedisPoolConfig.setMaxIdle(100);
jedisPoolConfig.setMinEvictableIdleTimeMillis(50000);
jedisPoolConfig.setTimeBetweenEvictionRunsMillis(20000);
jedisPoolConfig.setNumTestsPerEvictionRun(-1);
jedisPoolConfig.setSoftMinEvictableIdleTimeMillis(10000);
jedisPoolConfig.setMaxWaitMillis(1000);
jedisPoolConfig.setTestOnBorrow(true);
jedisPoolConfig.setTestWhileIdle(true);
jedisPoolConfig.setTestOnReturn(false);
jedisPoolConfig.setJmxEnabled(true);
jedisPoolConfig.setJmxNamePrefix("pool");
jedisPoolConfig.setBlockWhenExhausted(false);
return jedisPoolConfig;
}
2.获取连接工厂
使用时注意一定要加jedisConnetFactory.afterPropertiesSet();否则会无法初始化实例
/**2.获取连接工厂*/
public static JedisConnectionFactory getConnectionFactory(JedisPoolConfig poolConfig){
JedisConnectionFactory jedisConnetFactory = new JedisConnectionFactory();
jedisConnetFactory.setPoolConfig(poolConfig);
jedisConnetFactory.setHostName(hostName);
jedisConnetFactory.setPort(port);
/**必须执行这个函数,初始化JedisConnectionFactory*/
jedisConnetFactory.afterPropertiesSet();
return jedisConnetFactory;
}
3.获取RedisTemplate实例
使用时注意一定要加redisTemplate.afterPropertiesSet();否则会无法初始化实例.
/**3.获取RedisTemplate实例*/
public static RedisTemplate getRedisTemplate(JedisConnectionFactory connectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(connectionFactory);
StringRedisSerializer serializer = new StringRedisSerializer();
redisTemplate.setDefaultSerializer(serializer);
redisTemplate.setKeySerializer(serializer);
redisTemplate.setValueSerializer(serializer);
/**必须执行这个函数,初始化RedisTemplate*/
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
4.main函数,属性变量,获取JSON数据字符串函数
package com.zbz.redis.client;
import java.util.concurrent.TimeUnit;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
/**
*
* @ClassName: RedisTemplateClient
* @date: 2018-12-26 下午6:11:33
*/
public class RedisTemplateClient {
/**redis服务ip*/
public static final String hostName = "127.0.0.1";
/**redis服务端口*/
public static final int port = 6379;
/**队列名称*/
public static final String template_Queue = "TEMPLATE_QUEUE";
/**测试数据*/
public static final String data = getData();
public static void main(String [] args) throws InterruptedException{
/**1.配置连接池参数*/
JedisPoolConfig poolConfig =getPoolConfig();
/**2.获取连接工厂*/
JedisConnectionFactory connectionFactory = getConnectionFactory(poolConfig);
/**3.获取RedisTemplate实例*/
RedisTemplate redisTemplate = getRedisTemplate(connectionFactory);
System.out.println("测试开始......");
System.out.println("队列写入数据:");
System.out.println(data);
/**获取RedisTemplate操作方式*/
ListOperations operation = redisTemplate.opsForList();
operation.leftPush(template_Queue, data);
System.out.println("主线程休眠10秒......");
Thread.sleep(10000);
Object strJson = operation.rightPop(template_Queue,10, TimeUnit.SECONDS);
System.out.println("队列读出数据:");
System.out.println(strJson);
System.out.println("测试结束......");
}
/**获取JSON数据字符串*/
public static String getData(){
String data= "{\n" +
" \"AREA_CODE\": \"0592\",\n" +
" \"AREA_NUMBER\": \"350200\",\n" +
" \"CITY_NAME\": \"厦门\",\n" +
" \"DESCRIBE\": \"适合居住\",\n" +
" \"POSTAL_CODE\": \"361000\"\n" +
"}";
return data;
}
测试:
使用命令 Llen TEMPLATE_QUEUE,在redis-cli.exe客户端观察队列变化情况.
以上,TKS.