在spring boot环境下有个StringRedisTemplate对象,默认已经为我们配置好了,只需要自动注入过来就能用,但是使用它只能在Redis中存放字符串。具体操作如下:

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  3. @DirtiesContext
  4. public class Test {
  5. @Autowired
  6. private StringRedisTemplate stringRedisTemplate;
  7.  
  8. @Test
  9. public void test() throws Exception {
  10. stringRedisTemplate.opsForValue().set("aaa", "111");
  11. Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa"));
  12.  
  13. }
  14. }

因为在StringRedisTemplate的构造器中,设置的序列化器是字符串,所以它只能存取字符串。构造器:

  1. public StringRedisTemplate() {
  2. RedisSerializer<String> stringSerializer = new StringRedisSerializer();
  3. this.setKeySerializer(stringSerializer);
  4. this.setValueSerializer(stringSerializer);
  5. this.setHashKeySerializer(stringSerializer);
  6. this.setHashValueSerializer(stringSerializer);
  7. }

现在,如果我们想使用RedisTemplate存取对象,那我们只需要设置相应的序列化器就行了。操作如下:

  1. package com.newegg.core.service.config;
  2.  
  3. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  4. import com.fasterxml.jackson.annotation.PropertyAccessor;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.data.redis.connection.RedisConnectionFactory;
  9. import org.springframework.data.redis.core.RedisTemplate;
  10. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  11. import org.springframework.data.redis.serializer.StringRedisSerializer;
  12.  
  13. @Configuration
  14. public class RedisConfig {
  15.  
  16. /**
  17. * redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
  18. * @param redisConnectionFactory
  19. * @return
  20. */
  21. @Bean
  22. public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
  23. RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
  24. redisTemplate.setConnectionFactory(redisConnectionFactory);
  25.  
  26. // 使用Jackson2JsonRedisSerialize 替换默认序列化
  27. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
  28.  
  29. ObjectMapper objectMapper = new ObjectMapper();
  30. objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  31. objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  32.  
  33. jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
  34.  
  35. // 设置value的序列化规则和 key的序列化规则
  36. redisTemplate.setKeySerializer(new StringRedisSerializer());
  37. redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
  38. redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  39. redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
  40. redisTemplate.afterPropertiesSet();
  41. return redisTemplate;
  42. }
  43. }

接着我们来测试一下:

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  3. @DirtiesContext
  4. public class Test {
  5. @Autowired
  6. private RedisTemplate<Object, Object> template;
  7.  
  8. @Test
  9. public void savereids() {
  10. User u = new User(1, "王伟", 21);
  11. template.opsForValue().set(u.getId() + "", u);
  12. User result = (User) template.opsForValue().get(u.getId() + "");
  13. System.out.println(result.toString());
  14. }
  15.  
  16. @Test
  17. public void saveHashReids(){
  18. for(int i=1;i<10;i++){
  19. User u=new User(i,"王伟",21);
  20. template.opsForHash().put("myCache",u.getId(),u);
  21. }
  22. ArrayList<User> list=template.opsForHash().values("myCache")
  23. }
  24. }

redis 缓存对象、列表的更多相关文章

  1. springboot redis 缓存对象

    只要加入spring-boot-starter-data-redis , springboot 会自动识别并使用redis作为缓存容器,使用方式如下 gradle加入依赖 compile(" ...

  2. Redis缓存 序列化对象存储乱码问题

    使用Redis缓存对象会出现下图现象: 键值对都是乱码形式. 解决以上问题: 如果是xml配置的 我们直接注入官方给定的keySerializer,valueSerializer,hashKeySer ...

  3. C# mvc 前端调用 redis 缓存的信息

    新手 这几天网上学习下redis ,自己总结下过程,怕之后忘记了,基本会用最简单的,有的还是不懂,先记下来,自己摸索的. 没有安装redis的先安装,教程:http://www.cnblogs.com ...

  4. 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表

    python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表 sadd(name,values)name对应的集合中添加元素 #!/usr/bin/env python # -*- ...

  5. 第二百九十九节,python操作redis缓存-SortSet有序集合类型,可以理解为有序列表

    python操作redis缓存-SortSet有序集合类型,可以理解为有序列表 有序集合,在集合的基础上,为每元素排序:元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值, ...

  6. 第二百九十七节,python操作redis缓存-List类型,可以理解为列表

    python操作redis缓存-List类型,可以理解为列表,是可以有重复元素的列表 List操作,redis中的List在在内存中按照一个name对应一个List来存储.如图: lpush(name ...

  7. 因在缓存对象中增加字段,而导致Redis中取出缓存转化成Java对象时出现反序列化失败的问题

    背景描述 因为业务需求的需要,我们需要在原来项目中的一个DTO类中新增两个字段(我们项目使用的是dubbo架构,这个DTO在A项目/服务的domain包中,会被其他的项目如B.C.D引用到).但是这个 ...

  8. Redis对象——列表(List)

    列表(list)类型是用来存储多个有序的字符串,列表中的每个字符串称为元素(element),一个列表最多可以存储232-1个元素.在Redis中,可以对列表两端插入(push)和弹出(pop),还可 ...

  9. Redis缓存Object,List对象

    一.到目前为止(jedis-2.2.0.jar),在Jedis中其实并没有提供这样的API对对象,或者是List对象的直接缓存,即并没有如下类似的API jedis.set(String key, O ...

随机推荐

  1. 深入了解JVM虚拟机8:Java的编译期优化与运行期优化

    java编译期优化 java语言的编译期其实是一段不确定的操作过程,因为它可以分为三类编译过程:1.前端编译:把.java文件转变为.class文件2.后端编译:把字节码转变为机器码3.静态提前编译: ...

  2. ML_Review_GMM(Ch10)

    Note sth about GMM(Gaussian Mixtrue Model) 高斯混合模型的终极理解 高斯混合模型(GMM)及其EM算法的理解 这两篇博客讲得挺好,同时讲解了如何解决GMM参数 ...

  3. 程序中的.htaccess文件是做什么的

    程序中的.htaccess文件是做什么的 一.总结 一句话总结: htaccess=ht(Hypertext)+access=超文本入口 覆盖Apache服务器的默认配置 .htaccess(超文本访 ...

  4. Android 格式化分区命令

    mkfs.vfat  /dev/block/mmcblk0pxxxx           格式化某分区为vfat格式 busybox mkfs.vfat  /dev/block/mmcblk0pxxx ...

  5. LC 918. Maximum Sum Circular Subarray

    Given a circular array C of integers represented by A, find the maximum possible sum of a non-empty ...

  6. 【PHP】解决数据库查询出来的中文内容显示为问号“??”

    方法一:在数据库连接后执行: mysql_query('SET NAMES utf8'); 代码: $dbconn=mysql_connect("localhost", " ...

  7. osg fbx 绘制坐标轴、控制模型影藏与显示

    int main() { osg::ref_ptr<osgViewer::Viewer> viewer1 = new osgViewer::Viewer; osg::ref_ptr< ...

  8. 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_06-课程营销实战分析

    课程营销信息包括课程价格.课程有效期等信息. 课程营销信息使用course_market表存储. 接口我们要提供两个. 接口1先查询课程营销的信息,在页面展示. 接口2:叫做更新,如果发现数据不存在就 ...

  9. nginx负载均衡分配策略有哪些?

    nginx负载均衡分配策略有哪些?   答: 1.轮询(默认,不用在upstream中配置)方式 2.weight(权重) 当指定的服务器的权重参数,权重占比为负载均衡决定的一部分.权重大负载就大. ...

  10. mybatis传入map任意表增删改查,分页过滤字段

    <!--根据实体参数查询 --> <select id="selectBaseList" resultType="java.util.HashMap&q ...