版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l1336037686/article/details/81609833
一,Spring Data Redis的基本使用
1.环境搭建
基本结构
Maven依赖
<dependencies>
<!--Spring-->
<!-- Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- Spring dao依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- Spring web依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<!-- Spring test依赖:单元测试和集成测试 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
<!-- 缓存 -->
<!-- jedis客户端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!--Spring-Redis-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.14.RELEASE</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-libs-release</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
配置文件
redis.properties
redis.host=127.0.0.1
redis.port=6379
redis.password=""
redis.maxIdle=400
redis.maxTotal=6000
redis.maxWaitMillis=1000
redis.blockWhenExhausted=true
redis.testOnBorrow=true
redis.timeout=100000
defaultCacheExpireTime=60
spring-redis.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" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd"
default-lazy-init="false">
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:redis.properties" />
<!-- redis数据源 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 最大空闲数 -->
<property name="maxIdle" value="${redis.maxIdle}" />
<!-- 最大空连接数 -->
<property name="maxTotal" value="${redis.maxTotal}" />
<!-- 最大等待时间 -->
<property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
<!-- 连接超时时是否阻塞,false时报异常,ture阻塞直到超时, 默认true -->
<property name="blockWhenExhausted" value="${redis.blockWhenExhausted}" />
<!-- 返回连接时,检测连接是否成功 -->
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>
<!-- Spring-redis连接池管理工厂 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!-- IP地址 -->
<property name="hostName" value="${redis.host}" />
<!-- 端口号 -->
<property name="port" value="${redis.port}" />
<!-- 超时时间 默认2000-->
<property name="timeout" value="${redis.timeout}" />
<!-- 连接池配置引用 -->
<property name="poolConfig" ref="poolConfig" />
<!-- usePool:是否使用连接池 -->
<property name="usePool" value="true"/>
</bean>
<!-- RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
<!--开启事务 -->
<property name="enableTransactionSupport" value="true"></property>
</bean>
</beans>
2.简单使用
2.1官方文档
spring-data-redis 1.8
参考文档 https://docs.spring.io/spring-data/redis/docs/1.8.14.RELEASE/reference/html/
Api文档 https://docs.spring.io/spring-data/redis/docs/1.8.14.RELEASE/api/
2.2使用RedisTemplate操作对象(主要操作)
RedisTemplate简化了访问Redis操作代码
2.2.1操作视图
2.2.2常用的方法
方法名 | 功能 |
---|---|
boundGeoOps(K key) | 返回绑定到给定键的地理空间特定操作接口 |
boundHashOps(K key) | 返回对绑定到给定键的哈希值执行的操作 |
boundListOps(K key) | 返回对绑定到给定键的List集合执行的操作 |
boundSetOps(K key) | 返回对绑定到给定键的Set集合执行的操作 |
boundValueOps(K key) | 返回对绑定到给定键的值执行的操作 |
boundZSetOps(K key) | 返回对绑定到给定键的ZSet集合执行的操作 |
delete(K key) | 根据Key删除 |
expire(K key, long timeout, TimeUnit unit) | 设置失效时间 |
… | … |
2.2.3例子(使用RedisTemplate进行简单操作)
使用spring单元测试执行
/**
* @author LGX_TvT
* @date 2018-08-15 19:55
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-redis.xml")
public class RedisTemplateExample {
@Autowired
private RedisTemplate redisTemplate;
/**
* 值类型操作
*/
/**
* 设置值
*/
@Test
public void setValue(){
redisTemplate.boundValueOps("name").set("HelloWorld");
}
/**
* 获取值
*/
@Test
public void getValue(){
String str = (String) redisTemplate.boundValueOps("name").get();
System.out.println(str);
}
/**
* 删除值
*/
@Test
public void deleteValue(){
redisTemplate.delete("name");
}
/**
* 设置到期时间
*/
@Test
public void setExpireValue(){
BoundValueOperations demo = redisTemplate.boundValueOps("demo");
demo.set("Hello-World");
demo.expire(30, TimeUnit.SECONDS);
}
@Test
public void getExpireValue(){
System.out.println(redisTemplate.boundValueOps("demo").get());
}
/**
* Set类型操作
*/
/**
* 往set集合添加值
*/
@Test
public void setSetValue(){
redisTemplate.boundSetOps("names").add("zhangsan","lisi","wangwu","zhaoliu");
}
/**
* 获取set集合值
*/
@Test
public void getSetValue(){
Set names = redisTemplate.boundSetOps("names").members();
for (Object name : names) {
System.out.println(name.toString());
}
}
/**
* 删除set中的一个值
*/
@Test
public void removeSetValue(){
redisTemplate.boundSetOps("names").remove("zhangsan");
}
/**
* 删除set集合所有值
*/
@Test
public void deleteSetValue(){
redisTemplate.delete("names");
}
/**
* List类型操作
*/
/**
* 右压栈:后添加的对象排在后边
*/
@Test
public void setListRightPush(){
redisTemplate.boundListOps("namesList").rightPush("zhangsan");
redisTemplate.boundListOps("namesList").rightPush("lisi");
redisTemplate.boundListOps("namesList").rightPush("wangwu");
redisTemplate.boundListOps("namesList").rightPush("zhaoliu");
}
/**
* 左压栈:后添加的对象排在前边
*/
@Test
public void setListLeftPush(){
redisTemplate.boundListOps("namesList").rightPush("zhangsan");
redisTemplate.boundListOps("namesList").rightPush("lisi");
redisTemplate.boundListOps("namesList").rightPush("wangwu");
redisTemplate.boundListOps("namesList").rightPush("zhaoliu");
}
/**
* 获取List内的值
*/
@Test
public void getListValue(){
List namesList = redisTemplate.boundListOps("namesList").range(0, 10000);
for (Object o : namesList) {
System.out.println(o);
}
}
/**
* 查询集合某个元素
*/
@Test
public void getOne(){
Object index = redisTemplate.boundListOps("namesList").index(0);
System.out.println(index);
}
/**
* 移除集合某个元素
*/
@Test
public void removeOne(){
Long remove = redisTemplate.boundListOps("namesList").remove(0, "zhangsan");
System.out.println(remove);
}
/**
* Hash类型操作
*/
/**
* 添加值
*/
@Test
public void setHashValue(){
redisTemplate.boundHashOps("namesHash").put("name","zhangsan");
redisTemplate.boundHashOps("namesHash").put("age",18);
redisTemplate.boundHashOps("namesHash").put("hobby","football");
}
/**
* 获取所有值
*/
@Test
public void getHashValue(){
Map namesHash = redisTemplate.boundHashOps("namesHash").entries();
for (Object o : namesHash.keySet()) {
System.out.println(o.toString() + " " + namesHash.get(o.toString()));
}
}
/**
* 根据KEY提取值
*/
@Test
public void getValueByKey(){
String o = (String) redisTemplate.boundHashOps("namesHash").get("name");
System.out.println(o);
}
/**
* 根据KEY移除值
*/
@Test
public void deleteValueByKey(){
redisTemplate.boundHashOps("namesHash").delete("name");
}
}
对于String密集型操作,可以使用StringRedisTemplate
2.3使用StringRedisTemplate操作对象
StringRedisTemplate主要用于操作String类型的数据
2.3.1在spring-redis.xml中添加
<!--StringRedisTemplate-->
<bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
<!--开启事务 -->
<property name="enableTransactionSupport" value="true"></property>
</bean>
2.3.1例子
StringRedisTemplate操作基本与RedisTemplate一样只是操作的数据类型不同
/**
* @author LGX_TvT
* @date 2018-08-15 21:24
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-redis.xml")
public class StringRedisTemplateExample {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void setValue(){
stringRedisTemplate.boundValueOps("demo").set("HelloWorld");
}
@Test
public void getValue(){
String demo = stringRedisTemplate.boundValueOps("demo").get();
System.out.println(demo);
}
}
二,SpringBoot使用Redis简单介绍
基本结构
1.环境搭建
1.1使用Spring Initializer快速搭建
步骤:
勾选web,redis即可
1.2使用配置文件或配置类配置基本信息
1.2.1 使用配置文件
application.properties
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
1.2.2使用配置类
/**
* @author LGX_TvT
* @date 2018-08-15 22:22
*/
@Configuration
public class RedisConfig {
/**
* 配置Jedis连接池管理工厂
* @return
*/
@Bean
public JedisConnectionFactory jedisConnectionFactory(){
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("127.0.0.1",6379);
return new JedisConnectionFactory(config);
}
}
2.简单使用
要想使用缓存需要先使用@EnableCaching开启缓存
2.1 例子
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataRedisDemo03ApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void contextLoads() {
redisTemplate.boundValueOps("demo").set("HelloWorld");
}
@Test
public void getValue(){
System.out.println(redisTemplate.boundValueOps("demo").get());
}
}