spring+redis整合

本文实现spring+redis缓存服务器的整合。


1、windows下redis安装

(1)、下载

由于本文出于测试目的,因此使用windows的redis版本。从https://github.com/ServiceStack/redis-windows下载redis,下载后解压,找到解压文件夹中的downloads中的redis-latest.zip压缩包,该压缩包就是当前支持的最新的windiws版本(这里需要注意了,好似只是支持64位的系统,而且需要使用Administrator的管理员用户名登陆才能运行),解压该压缩包得到redis的资源文件。

(2)、创建启动脚本

创建一个bat脚本,本文中卫startup.bat脚本,然后在其中输入如下启动redis服务器的命令:

redis-server.exe  redis.windows.conf

(3)、启动redis服务器

双击启动脚本即可启动服务器。启动后如下:

关闭该命令行窗口即可关闭redis服务器。

(4)、测试

双击运行解压目录下的redis-cli.exe程序,正常运行后会弹出客户端测试框,输入如下命令进行简单测试

set hello 123
get hello
如图

(5)、配置redis密码

先关闭redis服务器,然后编辑redis.windows.conf文件,搜索requirepass配置,去掉前面的注释符号(#)。保存并关闭,此时redis的默认密码就是requirepass后面的值,本文为foobared。

(6)、使用密码登陆测试

首先运行脚本启动redis服务器,然后在redis-cli.exe所在目录下安装shift键,点击鼠标邮件选择"在此处打开命令窗口"。输入如下命令登陆redis服务器进行测试:

redis-cli.exe -h 127.0.0.1 -p 6379 -a foobared
登陆成功后按照之前的测试步骤进行redis测试即可。

2、linux下的redis安装和配置

linux下的redis安装和配置可以参考如下博客:http://blog.csdn.net/smilefyx/article/details/73822851

3、spring+redis整合测试

(1)、依赖导入

创建一个maven工程,导入必要的spring和其他相关依赖jar包,然后导入如下redis相关的jar包:

		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-redis</artifactId>
			<version>1.6.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.7.3</version>
		</dependency>

(2)、创建java配置类

本文使用的是基于java的配置类,配置类中主要是配置redis的连接工厂,redis的模板操作类、cacheManager和一个简单的测试bean。代码如下:

package cn.hi_fei.redis.configuration;

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

import cn.hi_fei.redis.impl.CacheServiceImpl;

@Configuration
@EnableCaching 
public class RedisCacheConfig extends CachingConfigurerSupport{
    @Bean  
    public RedisConnectionFactory redisConnectionFactory() {  
        JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();    
        // Defaults  
        redisConnectionFactory.setHostName("127.0.0.1");  
        redisConnectionFactory.setPort(6379);  
        return redisConnectionFactory;  
    }  
  
    @Bean  
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {  
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();  
        redisTemplate.setConnectionFactory(cf);  
        return redisTemplate;  
    }  
  
    @Bean  
    public CacheManager cacheManager(RedisTemplate<String, String> redisTemplate) {  
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);   
        // Number of seconds before expiration. Defaults to unlimited (0)  
        cacheManager.setDefaultExpiration(3000); // Sets the default expire time (in seconds)  
        return cacheManager;  
    }  
    
    @Bean("CacheServiceImpl")
    public CacheServiceImpl getCacheServiceImpl() {
    	return new CacheServiceImpl();
    }
}

(3)、测试代码

首先创建一个用于加载配置的基类,该类用于加载配置。源码如下

package cn.hi_fei.redis;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.hi_fei.redis.configuration.RedisCacheConfig;

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(classes = {RedisCacheConfig.class})   
public class BaseTest {

}

第二步创建一个使用spring缓存相关注解的测试服务类,用于在测试用例中自动注入用来测试spring的注解。代码如下:

package cn.hi_fei.redis.impl;

import org.apache.log4j.Logger;
import org.springframework.cache.annotation.Cacheable;

public class CacheServiceImpl {
	Logger logger = Logger.getLogger(CacheServiceImpl.class);

	@Cacheable(value="test",key="#key")
	public String hello(String key) {
		logger.info("Get without cache.");
		return "Hello!";
	}
}

第三部创建继承于第一步的基类的实体测试类,用于测试redis和spring的配合使用。本例中使用两种方式用于测试redis。第一种是基于spring注解的实现,第二种是基于spring都redis操作的模板类实现。源代码如下:

package cn.hi_fei.redis.impl;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;

import cn.hi_fei.redis.BaseTest;

public class CacheTest extends BaseTest{
	
	Logger logger = Logger.getLogger(CacheTest.class);
	
	@Autowired
	private RedisTemplate<String, String> redis;
	
	@Autowired
	@Qualifier("CacheServiceImpl")
	private CacheServiceImpl mService;
	
	@Test
	public void test() {
		//1
		logger.info("1="+this.mService.hello("hello3"));				
        logger.info("2="+this.mService.hello("hello3"));
        try {
    		logger.info("Wait input to exit.");
            InputStreamReader is_reader = new InputStreamReader(System.in);          	
			new BufferedReader(is_reader).readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
        //2
		logger.info("1="+this.hello("hello4"));				
        logger.info("2="+this.hello("hello4"));
        try {
    		logger.info("Wait input to exit.");
            InputStreamReader is_reader = new InputStreamReader(System.in);          	
			new BufferedReader(is_reader).readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	        
	}
	
	public String hello(String key) {
		String v = redis.opsForValue().get(key);
		if(null != v) {
			logger.info("Get from cache.");
			return v;
		}
		logger.info("Get without cache.");
		redis.opsForValue().set(key, "Hello!");
		return "Hello!";
	}	

}

运行后的测试结果如下:

(4)、代码下载

本例的源码工程可以从如下地址进行下载

http://download.csdn.net/detail/yxtouch/9830337

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值