redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 、MongoDB等。
Jedis是Redis官方推出的一款面向Java的客户端,提供了很多接口供Java语言调用。可以在Redis官网下载,当然还有一些开源爱好者提供的客户端,如Jredis、SRP等等,推荐使用Jedis。
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
spring-data-redis针对jedis提供了如下功能:
1.连接池自动管理,提供了一个高度封装的“RedisTemplate”类
2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations:简单K-V操作
SetOperations:set类型数据操作
ZSetOperations:zset类型数据操作
HashOperations:针对map类型的数据操作
ListOperations:针对list类型的数据操作
SpringDadaRedis就是对Jedis进行的封装
创建Maven工程
1.导入依赖
引入Spring相关依赖.JUnit依赖.
Jedis和SpringDataRedis依赖
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
</dependencies>
2. 配置文件
(1)在src/main/resources下创建properties文件夹,建立redis-config.properties 注意每行后面不要有空格
redis.host=127.0.0.1
redis.port=6379
redis.pass=
redis.database=0
redis.maxIdle=300
redis.maxWait=3000
redis.testOnBorrow=true
(2)在src/main/resources下创建spring文件夹 ,创建applicationContext-redis.xml
maxIdle :最大空闲数
maxWaitMillis:连接时的最大等待毫秒数
testOnBorrow:在提取一个jedis实例时,是否提前进行验证操作;如果为true,则得到的jedis实例均是可用的;
<!--引入配置文件-->
<context:property-placeholder location="classpath*:properties/redis_config.properties"/>
<!--配置连接池-->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.maxIdle}"/>
<property name="maxWaitMillis" value="${redis.maxWait}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>
<!--配置连接的ip地址等信息-->
<bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/>
<!--关联管理类-->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="JedisConnectionFactory" />
</bean>
String类型操作 注意包的引入
package com.test.SpringDataRedis;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/applicationContext_redis.xml")
public class TestRedis {
@Autowired
private RedisTemplate redisTemplate; //将管理类注入
/**
* 测试String类型添加
*/
@Test
public void testAdd(){
redisTemplate.boundValueOps("username").set("展昭");
}
/**
* 测试获取
*/
@Test
public void testGet(){
Object username = redisTemplate.boundValueOps("username").get();
System.out.println(username);
}
//根据key删除
@Test
public void delTest(){
redisTemplate.delete("username");
}
Set类型操作
/**
* Set类型
*/
@Test
public void testSetAdd() {
redisTemplate.boundSetOps("sangou").add("张飞");
redisTemplate.boundSetOps("sangou").add("马超");
redisTemplate.boundSetOps("sangou").add("关羽");
}
@Test
public void testSetget() {
Set sangou = redisTemplate.boundSetOps("sangou").members();
System.out.println(sangou);
}
List类型
/**
* List 类型
*/
@Test
public void TestList(){
//右压栈
redisTemplate.boundListOps("nameList").rightPush("可乐1");
redisTemplate.boundListOps("nameList").rightPush("可乐2");
redisTemplate.boundListOps("nameList").rightPush("可乐3");
//左压栈
// redisTemplate.boundListOps("nameList").leftPush("可乐3");
}
@Test
public void TestListGet(){
//获取索引0 到 10 的内容
List list = redisTemplate.boundListOps("nameList").range(0, 10);
System.out.println(list);
}
Hash类型
/**
* Hash类型的
* HashMap<Key,Map<key,Value>>
* @throws Exception
*/
@Test
public void testName() throws Exception {
redisTemplate.boundHashOps("shuixuchuan").put("a", "及时雨");
redisTemplate.boundHashOps("shuixuchuan").put("b", "豹子头");
redisTemplate.boundHashOps("shuixuchuan").put("c", "鼓上蚤");
}
/**
* 获取Hash中所有的key
* @throws Exception
*/
@Test
public void testHashSelect() throws Exception {
System.err.println(redisTemplate.boundHashOps("shuixuchuan").keys());
}
/**
* 获取Hash中所有的值得
* @throws Exception
*/
@Test
public void testHashSelectValue() throws Exception {
System.err.println(redisTemplate.boundHashOps("shuixuchuan").values());
}
/**
* Hash类型的删除
* @throws Exception
* 删除一个Key
*/
@Test
public void testHashDelete() throws Exception {
redisTemplate.delete("content");;
}