Spring整合Redis
中國加油,武漢加油!
篇幅較長,配合目錄觀看
項目準備
- 本案例基於liunx篇】 十二. Redis簡介及安裝 一
- liunx篇】 十二. Redis常用命令和數據類型 二
- liunx篇】 十二. Redis事務 三
- liunx篇】 十二. Redis發佈訂閱和超時指令 四
- liunx篇】 十二. Redis持久化機制和內存回收機制 五
1. 新建spring-redis
1.1 刪掉src做站點工程
2. java操作Redis
2.1 spring-redis下新建java-redis(module-maven)
2.2 導包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2.3 Test
package com.wpj;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class JedisTest {
@Test
public void testJedis(){
// 連接Redis
Jedis jedis = new Jedis("192.168.59.100", 6379);
// 設置連接jedis密碼
jedis.auth("admin");
// 設置一個鍵值對
jedis.set("name","wpj");
// 根據鍵獲取值
String name = jedis.get("name");
System.out.println(name);
// 關閉連接
jedis.close();
}
}
3. spring操作redis
3.1 spring-redis下新建spring-redis2(module-maven)
3.2 導包
<!-- spring整合redis的依賴 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
3.3 編寫beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 創建一個連接的對象-->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="50" /> <!-- 最大空閒數 -->
<property name="maxTotal" value="100" /> <!-- 最大連接數 -->
<property name="maxWaitMillis" value="20000" /> <!-- 最大等待時間 -->
</bean>
<!-- 配置redis連接工廠 -->
<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="poolConfig" ref="poolConfig" /> <!-- 連接池配置 -->
<property name="hostName" value="192.168.59.100" /> <!-- 連接主機 -->
<property name="port" value="6379" /> <!-- 端口 -->
<property name="password" value="admin" /> <!-- 密碼 -->
</bean>
<!-- 配置redis模板對象 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="connectionFactory" /> <!-- 配置連接工廠 -->
<property name="keySerializer" ref="stringRedisSerializer" /> <!-- 設置字符串序列方式 -->
<property name="valueSerializer" ref="stringRedisSerializer" /> <!-- 設置字符串序列方式 -->
</bean>
<!-- 字符串序列化 -->
<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer">
</bean>
</beans>
3.3 Test
package com.wpj;
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(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(value ="classpath:beans.xml")
public class SpringRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testSpringRedis(){
redisTemplate.opsForValue().set("username","admin");
System.out.println(redisTemplate.opsForValue().get("username"));
}
}
3.4 其他類型
package com.wpj;
import com.wpj.bean.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
import java.util.Set;
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(value ="classpath:beans.xml")
public class SpringRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testSpringRedis(){
redisTemplate.opsForValue().set("name","吳培傑");
System.out.println(redisTemplate.opsForValue().get("name"));
}
@Test
public void testAddUser() {
ValueOperations valueOperations = redisTemplate.opsForValue();
// 1.創建一個對象
User user = new User();
user.setId(10);
user.setUsername("admin");
// 2.添加到redis中,記得把stringRedisSerializer去掉
valueOperations.set("user", user);
// 3.獲取
User user1 =(User) valueOperations.get("user");
System.out.println(user1.getUsername());
redisTemplate.delete("user");
}
/**
* 操作Hash類型
*/
@Test
public void testHash(){
HashOperations hash = redisTemplate.opsForHash();
// put key filed value
hash.put("stu","name","admin");
hash.put("stu","age","12");
Object o = hash.get("stu", "name");
System.out.println(o);
hash.delete("xxx","xx");
}
/**
* 操作List類型
*/
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
// lpul key a1 a2 a3
listOperations.leftPush("books","java");
listOperations.leftPush("books","js");
listOperations.leftPushAll("books","js","c#",".net");
List<String> books = listOperations.range("books", 0, -1);
for(String key :books){
System.out.println(key);
}
listOperations.leftPop("books");
listOperations.rightPop("books");
listOperations.remove("books",2,"java");
listOperations.index("books",3); // 獲取指定位置的元素
Long books1 = listOperations.size("books"); // 獲取key的長度
}
/**
* 操作Set類型
*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("phones","xiaomi","hauwei","phone");
Set phones = setOperations.members("phones"); // 獲取key中所有的數據
System.out.println(phones);
setOperations.pop("phones"); // 隨機彈出一個元素
}
/**
* 操作Sorted Set類型
*/
@Test
public void testSortedSet(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("demo","zs",10.0);
zSetOperations.add("demo","lisi",20.0);
zSetOperations.add("demo","wagnwu",15.0);
Set demo = zSetOperations.range("demo", 0, -1);
System.out.println(demo);
}
}