Spring--Redis入门集成配置

一、什么是Redis?

这两年对于 NoSQL(not only SQL) 的使用已经越加频繁,所以对于Redis是什么我们也不会太过陌生。简单来说,Redis就是一个开源的,Key-Value数据库。它的存在主要是为了减少对SQL的读取,来提高服务器响应时间,典型的空间换时间策略。

二、Redis的安装与命令

这个太多,请看官网:  https://redis.io/           

教程: http://www.runoob.com/redis/redis-tutorial.html

三、简单Java项目中的引用测试

1、导入Jar包: jedis-2.9.0.jar 、commons-pool2-2.5.0.jar

2、测试:

package redis;


import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisTest {

	/**
	 * 引入jar包:
	 *     jedis-2.9.0.jar
	 *     commons-pool2-2.5.0.jar 
	 * 
	 **/
	
	/**
	 * TODO Redis单例测试
	 * @author geYang
	 * @date 2018-04-07 16:39
	 */
	@Test
	public void demo1() {
		//设置IP和端口号
		Jedis jedis = new Jedis("127.0.0.1", 6379);
		//保存数据
		jedis.set("name", "imooc");
		//读取数据
		System.out.println(jedis.get("name"));
		//删除数据
//		jedis.del("name");
		System.out.println(jedis.get("name"));
		//释放资源
		jedis.close();
	}
	
	
	/**
	 * TODO 连接池测试
	 * @author geYang
	 * @date 2018-04-07 16:41
	 */
	@Test
	public void demo2() {
		//连接池配置
		JedisPoolConfig config = new JedisPoolConfig();
		//设置最大连接数
		config.setMaxTotal(10);
		//设置最大空闲连接数
		config.setMaxIdle(5);
		
		//设置连接IP端口号
		JedisPool pool = new JedisPool(config, "127.0.0.1", 6379);
		
		Jedis jedis = null;
		
		try {
			jedis = pool.getResource();
			jedis.set("name", "geYang");
			System.out.println(jedis.get("name"));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (jedis != null) {
				jedis.close();
			}
			if (pool != null) {
				pool.close();
			}
		}
	}
	
	/**
	 * TODO Keys测试
	 * @author geYang
	 * @date 2018-04-08 10:24
	 */
	@Test
	public void demo3() {
		Jedis jeds = new Jedis("127.0.0.1", 6379);
		
		Set<String> keys = jeds.keys("*");
		
		Iterator<String> it = keys.iterator() ;   
        while(it.hasNext()){   
            String key = it.next();   
            System.out.println(key);   
        }
		
		jeds.close();
	}
	
	/**
	 * TODO List测试
	 * @author geYang
	 * @date 2018-04-08 10:27
	 */
	@Test
	public void demo4() {
		Jedis jedis = new Jedis("127.0.0.1", 6379);
		System.out.println("连接成功");
		//存
		jedis.lpush("mylist", new String[] {"1","2","3"});
		jedis.lpush("mylist", "a");
		jedis.lpush("mylist", "b");
		jedis.lpush("mylist", "c");
		
		//读
		List<String> list = jedis.lrange("mylist", 0, -1);
		for (String str : list) {
			System.out.println(str);
		}
		jedis.close();
	}
	
	/**
	 * TODO Hash测试
	 * @author geYang
	 * @date 2018-04-08 10:46
	 */
	@Test
	public void demo5() {
		Jedis jedis = new Jedis("127.0.0.1", 6379);
		System.out.println("连接成功");
		
//		jedis.hset("myhash", "tel", "18281916257");
		
		HashMap<String,String> hashMap = new HashMap<>();
		hashMap.put("sex", "man");
		hashMap.put("address", "China");
		jedis.hmset("myhash", hashMap);
		
		
		Map<String, String> map = jedis.hgetAll("myhash");
		System.out.println(map);
		
		
		jedis.close();
	}
	
	
	
	
	
	
	
}

四、Spring中集成

1、Maven仓库:

        <!-- Not Only SQL REDIS  -->
		<dependency>
		    <groupId>redis.clients</groupId>
		    <artifactId>jedis</artifactId>
		    <version>2.9.0</version>
		</dependency>

2、spring-redis.xml(需要将该文件加载入spring上下文) ,  配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        
        <context:property-placeholder location="classpath:config.properties"/>
        
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
	        <!-- 最大连接数 --> 
	        <property name="maxTotal" value="30"/>
	        <!-- 最大空闲连接数 -->
	        <property name="maxIdle" value="10"/>
	        <!-- 每次释放连接的最大数目 -->
	        <property name="numTestsPerEvictionRun" value="1024"/>
	        <!-- 释放连接的扫描间隔(毫秒) -->
	        <property name="timeBetweenEvictionRunsMillis" value="30000"/>  
	        <!-- 连接最小空闲时间 -->
	        <property name="minEvictableIdleTimeMillis" value="1800000"/> 
	        <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
	        <property name="softMinEvictableIdleTimeMillis" value="10000"/>
	        <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
	        <property name="maxWaitMillis" value="1500"/>
	        <!-- 在获取连接的时候检查有效性, 默认false -->
	        <property name="testOnBorrow" value="true"/>
	        <!-- 在空闲时检查有效性, 默认false -->
	        <property name="testWhileIdle" value="true"/>
	        <!-- 连接耗尽时是否阻塞, false报异常,true阻塞直到超时, 默认true -->  
	        <property name="blockWhenExhausted" value="false"/>
        </bean>     
      
	    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
	        <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
	        <constructor-arg name="host" value="${redis.host}"/>
	        <constructor-arg name="port" value="${redis.port}"/>
	    </bean>
        
       
</beans>

3、简单使用:

package com.gy.spring.mvc.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.gy.spring.mvc.service.RedisService;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@Service
public class RedisServiceImpl implements RedisService {

	@Autowired
	private JedisPool jedisPool;
	
	@Override
	public String get(String key) {
		Jedis jedis = jedisPool.getResource();
		String value = null;
		try {
			value = jedis.get(key);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			close(jedis);
		}
		return value;
	}

	@Override
	public void set(String key, String value) {
		Jedis jedis = jedisPool.getResource();
		try {
			jedis.set(key, value);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			close(jedis);
		}
	}

	@Override
	public List<String> getList(String key,long start,long end) {
		Jedis jedis = jedisPool.getResource();
		List<String> list = null;
		try {
			list = jedis.lrange(key, start, end);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			close(jedis);
		}
		return list;
	}

	@Override
	public void set(String key, List<String> value) {
		Jedis jedis = jedisPool.getResource();
		try {
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			close(jedis);
		}
	}

	@Override
	public void del(String key) {
		Jedis jedis = jedisPool.getResource();
		try {
			jedis.del(key);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			close(jedis);
		}
	}
	
	
	/**
	 * TODO 释放资源
	 * @param jedis
	 * @author geYang
	 * @date 2018-04-10 10:13
	 */
	private void close(Jedis jedis) {
		if(jedis!=null) {
			jedis.close();
		}
	}
	
}

4、项目源码: https://gitee.com/ge.yang/spring-demo/tree/master/spring-mvc

猜你喜欢

转载自my.oschina.net/u/3681868/blog/1796571
今日推荐