河南省住房和城乡建设厅查询网站首页,电商网站开发的代价,全网推广系统,网站导航功能文章目录Java 整合 Redis一、Jedis二、Spring-Data-RedisJava 整合 Redis
Redis 在项目中我们主要用来做缓存#xff0c;就像我们用 MySQL 做持久层数据一样。Redis 的客户端有两种实现方式#xff1a;
一是直接调用 Jedis 来实现#xff0c;类似于 Java 使用 JDBC 操作数…
文章目录Java 整合 Redis一、Jedis二、Spring-Data-RedisJava 整合 Redis
Redis 在项目中我们主要用来做缓存就像我们用 MySQL 做持久层数据一样。Redis 的客户端有两种实现方式
一是直接调用 Jedis 来实现类似于 Java 使用 JDBC 操作数据库一样。
二是使用 Spring-Data-Redis通过 Spring 的封装来调用。
一、Jedis
Jedis 是 Redis 官方推荐的 Java 连接开发工具Jedis 是 Redis 的 Java 版本的客户端实现。
Java 通过 Jedis 来操作 Redis 服务类似于 Java 通过 JDBC 技术来操作 MySQL 数据库。 通过前面 Redis 的常见数据类型的命令操作可以很容易地使用 Jedis因为大多数方法名与对应的命令基本一致。Redis 的常见数据类型的命令可以参考上一篇文章 Redis常见的数据类型命令 Jedis 的简单使用如下
首先引入 Jedis 的 maven 依赖
dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.6.0/version
/dependency下面是测试代码
public class JedisTest {Jedis jedis;/*** 初始化Jedis实例*/Beforepublic void init() {//指定Redis服务器的IP地址和端口号jedis new Jedis(192.168.43.100, 6379);}Testpublic void redisJedisTest() {//操作字符串//方法名与操作原生redis的命令一致jedis.set(dec, hello);String dec jedis.get(dec);System.out.println(dec);//操作listjedis.lpush(data, v1, v2, v3);jedis.rpush(data, v4, v5, v6);ListString data jedis.lrange(data, 0, -1);for (String s : data) {System.out.print(s );}System.out.println();//操作hashHashMapString, String hashMap new HashMap();hashMap.put(id, 1);hashMap.put(name, huhai);hashMap.put(age, 24);jedis.hset(object, hashMap);MapString, String object jedis.hgetAll(object);object.forEach((key, value) - System.out.print(key value ));}/*** 关闭Jedis连接*/Afterpublic void close() {jedis.close();}
}终端输出如下
hello
v3 v2 v1 v4 v5 v6
namehuhai age24 id1也可以使用 JedisPool 来进行操作
//声明Linux服务器IP地址
String host 192.168.43.100;
//声明Redis端口号
int port Protocol.DEFAULT_PORT;
//创建连接池对象
JedisPool jedisPool new JedisPool(host, port);
//获取Jedis对象连接Redis
Jedis jedis jedisPool.getResource();
//执行具体操作
String ping jedis.ping();
System.out.println(ping);//pong
//关闭连接
jedisPool.close();二、Spring-Data-Redis
Spring-Data-Redis 是 Spring 大家族的一部分通过简单的配置访问 Redis 服务对 Redis 底层开发包JedisJRedisRJC进行了高度封装RedisTemplate提供了 Redis 的各种操作、异常处理以及序列化支持发布订阅。
RedisTemplate
Spring 封装了 RedisTemplate 对象来进行对 Redis 的各种操作它支持所有的 Redis 原生的 API。
org.springframework.data.redis.core.RedisTemplateK, V
RedisTemplate 中定义了对 5 种基本数据结构的操作
redisTemplate.opsForValue();//操作String字符串
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForZSet();//操作有序setStringRedisTemplate 和 RedisTemplate 两者的关系是 StringRedisTemplate 继承 RedisTemplate。 两者的数据是不共通的也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据RedisTemplate 只能管理 RedisTemplate 中的数据。 SDR 默认采用的序列化策略有两种一种是 String 的序列化策略一种是 JDK 的序列化策略。 StringRedisTemplate 默认采用的是 String 的序列化策略保存的 key 和 value 都是采用此策略序列化保存的。 RedisTemplate 默认采用的是 JDK 的序列化策略保存的 key 和 value 都是采用此策略序列化保存的。
使用 Spring-Data-Redis 的 demo 如下
1、首先引入依赖
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!-- redis --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactIdexclusionsexclusiongroupIdio.lettuce/groupIdartifactIdlettuce-core/artifactId/exclusion/exclusions/dependencydependencygroupIdredis.clients/groupIdartifactIdjedis/artifactId/dependency!-- lombok依赖 --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency
/dependencies2、添加配置文件进行 Redis 的一些配置
spring:redis:#redis服务器连接地址host: 192.168.43.100#端口号port: 6379#连接超时时间毫秒timeout: 10000#使用的redis库database: 0jedis:pool:#连接池最大连接数max-active: 10#连接池中的最大空闲连接max-idle: 10#连接池中的最小空闲连接min-idle: 2#连接池最大阻塞等待时间使用负值表示没有限制max-wait: 100003、添加 Redis 配置类定义序列化机制
/*** Description: Redis 基础配置类*/
public class BaseRedisConfig {Beanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory redisConnectionFactory, RedisSerializerObject redisSerializer) {RedisTemplateString, Object redisTemplate new RedisTemplate();redisTemplate.setConnectionFactory(redisConnectionFactory);redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(redisSerializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(redisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}Beanpublic RedisSerializerObject redisSerializer() {//创建JSON序列化器Jackson2JsonRedisSerializerObject serializer new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);//必须设置否则无法将JSON转化为对象会转化成Map类型objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);serializer.setObjectMapper(objectMapper);return serializer;}Beanpublic IRedisService redisService(RedisTemplateString, Object redisTemplate) {return new RedisServiceImpl(redisTemplate);}
}/*** Description: Redis配置类*/
Configuration
public class RedisConfig extends BaseRedisConfig{
}4、创建 IRedisService 接口与 RedisServiceImpl 实现类 只写了一些基本使用方法如有需要可以继续添加在其他类里面注入即可使用~ /*** Description: Redis操作Service*/
public interface IRedisService {/*** 保存属性** param key key* param value value* param time 超时时间秒*/void set(String key, Object value, long time);/*** 保存属性,无过期时间** param key key* param value value*/void set(String key, Object value);/*** 获取属性** param key key* return value*/Object get(String key);/*** 设置过期时间** param key key* param time 超时时间秒* return 是否设置成功*/Boolean expire(String key, long time);/*** 删除key* param key key* return 是否设置成功*/Boolean delete(String key);}/*** Description: Redis操作实现类*/
RequiredArgsConstructor
Service
public class RedisServiceImpl implements IRedisService {private final RedisTemplateString, Object redisTemplate;Overridepublic void set(String key, Object value, long time) {redisTemplate.opsForValue().set(key, value, time);}Overridepublic void set(String key, Object value) {redisTemplate.opsForValue().set(key, value);}Overridepublic Object get(String key) {return redisTemplate.opsForValue().get(key);}Overridepublic Boolean expire(String key, long time) {return redisTemplate.expire(key, time, TimeUnit.SECONDS);}Overridepublic Boolean delete(String key) {return redisTemplate.delete(key);}
}5、进行 Junit 测试
SpringBootTest
class SpringDataRedisDemoApplicationTests {Resourceprivate IRedisService redisService;Testvoid contextLoads() {redisService.set(name, xiaobai);System.out.println(redisService.get(name));//xiaobai}
}只展示了 Redis 的字符串的一些常用操作如果有其他操作可以在 IRedisService 中添加对应方法然后在 RedisServiceImpl 中实现之后在需要的地方进行调用。