为了减少访问数据库的次数,设置jedis缓冲确实是个不错的办法,操作也很简单。
- Redis下载好
- 上手jedis的操作(String,hash,list,set等)
- 编写工具类,jedis的连接池的工具类
package com.lcx.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author 作者 E-mail:
* @version 创建时间:2020年5月16日 下午8:57:15
* 类说明 jedisPool工具包
*/
public class JedisPoolUtils {
private static JedisPool jedisPool;
//类加载时读取配置文件
static {
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro = new Properties();
//关联文件
try {
pro.load(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取数据,设置到jedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化JedisPool
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
- 在需要实现的地方调用就好了。对于那些不常改变的数据,在首次查询后可放在缓存中,以后的每次查询就可直接在缓存中查,大大减少访问数据库的次数。
承接我之前的课设,我就在查询商品时用了这个缓存
@Override
public String findJson(int tags) {
// TODO Auto-generated method stub
Jedis jedis = JedisPoolUtils.getJedis();
String typename = StringUtil.createname("product", tags);
String product_json=jedis.get(typename);
//首次查询
if(product_json==null) {
System.out.println("首次查询jedis为空,要去数据库查了");
//从数据库中找
List<Product> tag_product = dao.findbytags(tags);
//序列化
ObjectMapper mapper = new ObjectMapper();
try {
product_json=mapper.writeValueAsString(tag_product);
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jedis.set(typename,product_json);
jedis.close();
}
return product_json;
}
我这里还序列化了,发现多此一举,controller还是要转回list输出到界面┭┮﹏┭┮,直接存list不就好了吗~~~