• SSM整合(四)


    SSM整合之redis设置值和获取值三种方式

    准备工作(导入一些必要的依赖)

    <dependency>
        <groupId>org.springframework.datagroupId>
        <artifactId>spring-data-redisartifactId>
        <version>2.4.1version>
    dependency>
    
    <dependency>
        <groupId>redis.clientsgroupId>
        <artifactId>jedisartifactId>
        <version>3.3.0version>
    dependency>
    
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>fastjsonartifactId>
        <version>1.2.75version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    1.JDK序列化

    1.1 特点

    默认的,必须实现序列化接口,可读性差(redis的可视化界面)
    
    • 1

    1.2 实例代码

    1.2.1 实体类Emp类
    package com.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import tk.mybatis.mapper.annotation.KeySql;
    
    import javax.persistence.Id;
    import java.io.Serializable;
    
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    //属性必须是引用数据类型 数据库Null值 动态sql都是判断属性是否为空
    public class Emp implements Serializable{
    
        @Id
        //导入的是javax.persistence下的
        @KeySql(useGeneratedKeys = true)//主键回填
        private Integer empno;
        private String ename;
        private String mgr;
        private String job;
        private String hiredate;
        private Double sal;
        private Double comm;
        private Integer deptno;
        private static final long serialVersionUID = 1L;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    1.2.2 创建RedisConfig类
    package com.config;
    
    import com.fasterxml.jackson.databind.ser.std.StringSerializer;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    @Configuration//等同于xml文件
    public class RedisConfig {
        @Bean
        public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory cf){
            RedisTemplate<String, Object> redis = new RedisTemplate<>();
            //①设置连接对象
            redis.setConnectionFactory(cf);
            //1JDK序列化器 默认的 必须实现序列化接口 可读性差
            //② new一个jdk序列化器对象
            JdkSerializationRedisSerializer jdk = new JdkSerializationRedisSerializer();
            //③设置redis的存储普通数据时的键为jdk方式存储,值为jdk方式存储
            redis.setKeySerializer(jdk);
            redis.setValueSerializer(jdk);
            return redis;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    1.2.3 注入RedisTemplate类
    @Autowired
    RedisTemplate redisTemplate;
    
    • 1
    • 2
    1.2.4 测试代码
    @Test
        public void t(){
            Emp emp = em.selectByPrimaryKey(7369);
            redisTemplate.opsForValue().set("emp:7369",emp);
            Emp e = (Emp) redisTemplate.opsForValue().get("emp:7369");
            System.out.println("取出来的值: "+emp);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1.2.5 测试运行截图
    a redis可视化工具展示

    在这里插入图片描述

    b 控制台打印结果展示

    在这里插入图片描述

    2.String序列化器

    2.1 特点

    String序列话器 存储数据必须是String类型
    查询到的数据需要通过fastjson中的JSON.toJSONString设置进去
    
    • 1
    • 2

    2.2 实例代码

    2.2.1 实体类Emp类
    package com.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import tk.mybatis.mapper.annotation.KeySql;
    
    import javax.persistence.Id;
    import java.io.Serializable;
    
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    //属性必须是引用数据类型 数据库Null值 动态sql都是判断属性是否为空
    public class Emp{
    
        @Id
        //导入的是javax.persistence下的
        @KeySql(useGeneratedKeys = true)//主键回填
        private Integer empno;
        private String ename;
        private String mgr;
        private String job;
        private String hiredate;
        private Double sal;
        private Double comm;
        private Integer deptno;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    2.2.2 创建RedisConfig类
    package com.config;
    
    import com.fasterxml.jackson.databind.ser.std.StringSerializer;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    @Configuration//等同于xml文件
    public class RedisConfig {
        @Bean
        public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory cf){
            RedisTemplate<String, Object> redis = new RedisTemplate<>();
            //① 设置连接对象
            redis.setConnectionFactory(cf);
            //② String序列话器 存储数据必须是String类型
            StringRedisSerializer string=new StringRedisSerializer();
            //③设置redis的存储普通数据时的键为string方式存储,值为string方式存储
            redis.setKeySerializer(string);
            redis.setValueSerializer(string);
            return redis;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    2.2.3 注入RedisTemplate类
    @Autowired
    RedisTemplate redisTemplate;
    
    • 1
    • 2
    2.2.4 测试代码
      @Test
        public void t(){
            Emp emp = em.selectByPrimaryKey(7369);
            String s= JSON.toJSONString(emp);
            redisTemplate.opsForValue().set("emp:7369",s);
            String s1 = (String) redisTemplate.opsForValue().get("emp:7369");
            Emp emp1 = JSON.parseObject(s1, Emp.class);
            System.out.println("取出来的值: "+emp1);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    2.2.5 测试运行截图
    a redis可视化工具展示

    在这里插入图片描述

    b 控制台打印结果展示

    在这里插入图片描述

    3.GenericJackson2JsonRedisSerializer

    3.1 特点

    GenericJackson2JsonRedisSerializer不需要序列化 可以存储任意对象 自动转换
    
    • 1

    3.2 实例代码

    3.2.1 实体类Emp类
    package com.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import tk.mybatis.mapper.annotation.KeySql;
    
    import javax.persistence.Id;
    import java.io.Serializable;
    
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    //属性必须是引用数据类型 数据库Null值 动态sql都是判断属性是否为空
    public class Emp{
        @Id
        //导入的是javax.persistence下的
        @KeySql(useGeneratedKeys = true)//主键回填
        private Integer empno;
        private String ename;
        private String mgr;
        private String job;
        private String hiredate;
        private Double sal;
        private Double comm;
        private Integer deptno;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    3.2.2 创建RedisConfig类
    package com.config;
    
    import com.fasterxml.jackson.databind.ser.std.StringSerializer;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    @Configuration//等同于xml文件
    public class RedisConfig {
        @Bean
        public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory cf){
            RedisTemplate<String, Object> redis = new RedisTemplate<>();
            //① 设置连接对象
            redis.setConnectionFactory(cf);
            //.GenericJackson2JsonRedisSerializer不需要序列化 可以存储任意对象 自动转换
            //② 实例化GenericJackson2JsonRedisSerializer对象
            GenericJackson2JsonRedisSerializer gjj=new GenericJackson2JsonRedisSerializer();
            //③设置redis的存储普通数据时的键为GenericJackson2JsonRedisSerializer方式存储
            //值为GenericJackson2JsonRedisSerializer方式存储
            redis.setKeySerializer(gjj);
            redis.setValueSerializer(gjj);
            return redis;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    3.2.3 注入RedisTemplate类
    @Autowired
    RedisTemplate redisTemplate;
    
    • 1
    • 2
    3.2.4 测试代码
    @Test
        public void t(){
            Emp emp = em.selectByPrimaryKey(7369);
            redisTemplate.opsForValue().set("emp:7369",emp);
            Emp emp1 = (Emp) redisTemplate.opsForValue().get("emp:7369");
            System.out.println("取出来的值: "+emp1);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.2.5 测试运行截图
    a redis可视化工具展示

    在这里插入图片描述

    b 控制台打印结果展示

    在这里插入图片描述

  • 相关阅读:
    计算机操作系统-第六天
    Delphi+DIYGW开发小程序
    你真的懂TSP吗
    JUC-进程和线程
    CountDownLatch和CyclicBarrier:如何让多线程步调一致?
    变量、因子、缺失值、类型转换、剔除多余变量、随机抽样、用R使用SQL、trim、na.rm=TRUE、数据标准化应用
    【JVM笔记】同步控制字节码指令
    排序算法:选择排序(直接选择排序、堆排序)
    CDGA|数据治理不得不坚持的六个原则
    设计模式之享元模式(十)
  • 原文地址:https://blog.csdn.net/SSS4362/article/details/127958631