首先需要两个JAR包,commons-pool2-2.3.jar和 jedis-2.7.0.jar 用于支持使用redis服务器,和用jedis操作redis服务器。
redis服务器也相当于一个数据库,它可以控制程序不访问数据库,而访问redis本身,redis本身可以存储数据库的内容,从而实现了程序与数据库假断开,提高了程序运行的效率,和减少并发问题的出现,而操作redis时,首先要有一个redis.properties文件在SRC下,并且要有一个工具类。工具类源代码如下:
package com.yinhe.utils;
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;
public class JedisPoolUtils {
private static JedisPool pool = null;
static{
//加载配置文件
InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
Properties pro = new Properties();
try {
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
}
//获得池子对象(redis数据库)
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));//最大闲置个数
poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));//最小闲置个数
poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));//最大连接数
pool = new JedisPool(poolConfig,pro.getProperty("redis.url") , Integer.parseInt(pro.get("redis.port").toString()));
}
//获得jedis资源的方法
public static Jedis getJedis(){
return pool.getResource();
}
public static void main(String[] args) {
Jedis jedis = getJedis();
System.out.println(jedis.get("xxx"));
}
}
redis配置文件:
redis.maxIdle=30
redis.minIdle=10
redis.maxTotal=100
redis.url=localhost
redis.port=6379
有了工具类,控制层便可以进行操作redis了。
redis中数据是以键值对的形式存在着,若想获取redis中的某一组数据,要知道该组数据的key,
例如我需要从数据库中查询出一个集合数据,并缓存进redis服务器中,则可以先实例化工具类,
// 获取redis连接
Jedis jedis = JedisPoolUtils.getJedis();
jedis有set方法,两个参数,便是key和value 键值对,
同样的 也有get方法,需要知道某个数据的key才能获取到数据
实现缓存时,首先用if判断jedis.get(...)值是否为空,为空的时候说明是第一次访问redis,还没有缓存过,这时需要访问一次数据库,并把数据存入redis中,若不为空的时候,便出现了一些问题:
redis有利有弊,弊端是因为缓存的机制,使用redis时,redis不会实时根据数据库内容来进行更新缓存中的数据,需要程序控制更新,也就是可以在每次更新完数据库后,存入application一个flag并更改flag的值,代表最新的,然后控制层判断flag是否为最新的来进行是否重新缓存的操作。