Redis系列(6)——RedisTemplate操作模板

转载地址: http://blog.youkuaiyun.com/hotdust/article/details/51832926

RedisTemplate是spring-data-redis中用于操作redis的操作模版、可以对redis进行序列化操作,由于redis存储的本质是数组,而操作模板就是把对象、json这些对象序列化成string存储到redis、也可以把序列化的对象、json字符串反序列化成java对象、json对象。

spring-data-redis的序列化类有下面这几个:

l  GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化

l  Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer实际上是一样的

l  JacksonJsonRedisSerializer: 序列化object对象为json字符串

l  JdkSerializationRedisSerializer: 序列化java对象

l  StringRedisSerializer: 简单的字符串序列化

 

1.用JdkSerializationRedisSerializer序列化

用JdkSerializationRedisSerializer序列化的话,被序列化的对象必须实现Serializable接口。

在存储内容时,除了属性的内容外还存了其它内容在里面,总长度长,且不容易阅读。

对于最下面的代码,存到redis里的内容如下:

redis127.0.0.1:6379> get users/user1
"\xac\xed\x00\x05sr\x00!com.oreilly.springdata.redis.User\xb1\x1c\n\xcd\xed%\xd8\x02\x00\x02I\x00\x03ageL\x00\buserNamet\x00\x12Ljava/lang/String;xp\x00\x00\x00\x14t\x00\x05user1"
2.用JacksonJsonRedisSerializer序列化

 如果需要保存对象为json的话推荐使用JacksonJsonRedisSerializer,它不仅可以将对象序列化,还可以将对象转换为json字符串并保存到redis中,但需要和jackson配合一起使用。

用JacksonJsonRedisSerializer序列化的话,被序列化的对象不用实现Serializable接口。

 Jackson是利用反射和getter和setter方法进行读取的,如果不想因为getter和setter方法来影响存储,就要使用注解来定义被序列化的对象。

 Jackson序列化的结果清晰,容易阅读,而且存储字节少,速度快,推荐。

对于最下面的代码,存到redis里的内容如下:

redis127.0.0.1:6379> get json/user1
"{\"userName\":\"user1\",\"age\":20}"
redis127.0.0.1:6379> strlen json/user1
(integer) 29
3.用StringRedisSerializer序列化

 一般如果key-value都是string的话,使用StringRedisSerializer就可以了

 代码:

@Test
public voidtestJacksonSerialiable()
{   
    RedisTemplate<String, Object> redis =new RedisTemplate<String, Object>();   
   redis.setConnectionFactory(connectionFactory);   
   redis.setKeySerializer(ApplicationConfig.StringSerializer.INSTANCE);   
    redis.setValueSerializer(newJacksonJsonRedisSerializer<User>(User.class));   
    redis.afterPropertiesSet();   
   
   
    ValueOperations<String, Object> ops =redis.opsForValue();   
    User user1 = new User();   
    user1.setUserName("user1");   
    user1.setAge(20);   
    User user11 = null;   
    String key1 = "json/user1";   
    long begin =System.currentTimeMillis();   
    for (int i = 0; i < 100; i++) {       
        ops.set(key1,user1);       
        user11 = (User)ops.get(key1);   
    }   
    long time = System.currentTimeMillis() -begin;    System.out.println("jsontime:"+time);   
   assertThat(user11.getUserName(),is("user1"));
}

### 集成和使用 Redis 在 Java Spring 项目中的方法 为了在 Java Spring 项目中集成并使用 Redis,可以遵循以下方式实现: #### 使用 Spring Data Redis 进行配置 Spring 提供了一个名为 `spring-data-redis` 的模块来支持 Redis 数据库的操作。通过该模块,开发者能够轻松地连接到 Redis 并执行各种操作。 以下是具体的实现细节: 1. **引入依赖** 在项目的构建文件(Maven 或 Gradle)中添加必要的依赖项。对于 Maven 用户来说,可以在 `pom.xml` 文件中加入如下内容[^4]: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. **配置 Redis 参数** 修改 `application.properties` 或者 `application.yml` 来指定 Redis 实例的相关参数。例如,在 YAML 格式的配置文件中设置如下属性[^5]: ```yaml spring: redis: host: localhost port: 6379 password: your_password_here_if_any lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 ``` 3. **创建 RedisTemplate Bean** 定义一个用于访问 Redis模板对象——即 `RedisTemplate`,它允许我们以键值对的形式存储数据以及检索它们。 下面是一个简单的例子展示如何定义这个 bean: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){ final RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); template.setConnectionFactory(connectionFactory); return template; } } ``` 4. **编写服务类处理逻辑** 创建一个新的 Service 类型组件用来封装业务逻辑并与 Redis 进行交互。比如下面这段代码展示了怎样保存字符串类型的 key-value 对至 Redis 中去[^6]: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @Service public class CacheService { private final RedisTemplate<String, Object> redisTemplate; @Autowired public CacheService(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; } public void setValue(String key, Object value){ redisTemplate.opsForValue().set(key,value); } public Object getValue(String key){ return redisTemplate.opsForValue().get(key); } } ``` 以上就是关于如何在一个基于 Java 和 Spring Framework 构建的应用程序里头整合 Redis 存储系统的概述说明[^7]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值