使用redis服务器缓存数据库内容

首先需要两个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才能获取到数据

扫描二维码关注公众号,回复: 2573886 查看本文章


实现缓存时,首先用if判断jedis.get(...)值是否为空,为空的时候说明是第一次访问redis,还没有缓存过,这时需要访问一次数据库,并把数据存入redis中,若不为空的时候,便出现了一些问题:

redis有利有弊,弊端是因为缓存的机制,使用redis时,redis不会实时根据数据库内容来进行更新缓存中的数据,需要程序控制更新,也就是可以在每次更新完数据库后,存入application一个flag并更改flag的值,代表最新的,然后控制层判断flag是否为最新的来进行是否重新缓存的操作。

猜你喜欢

转载自blog.csdn.net/qq_40100214/article/details/78056856