一、什么是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