HSAF实战收获

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: HSAF实战收获

收获1:MySQL数据类型对应Java类型表格

这里的timestamp类型在Java中对应TimeStamp类型,varchar和char都是对饮的String类型

收获2:@TableField

@TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错。

@TableField(exist = false)
private Integer ticketNumber;


在 MyBatis-Plus 中,@TableField 注解用于指定 Java 类字段和表列之间的映射。此注解的 updateStrategy 属性可用于指定在更新操作期间如何处理该字段。

该更新策略属性可以采用5种可能的值:

收获3:实体类中如何自动生成serialVersionUID

为什么要实现序列化接口Serializable?

答:实现序列化接口Serializable的目的是为了类可持久化,Java中的序列化机制能够将一个实例对象信息写入到一个字节流中(只序列化对象的属性值,而不会去序列化方法),序列化后的对象可用于网络传输(远程),或者持久化到数据库、磁盘中(本地存储)。为系统的分布和异构部署提供先决条件。若没有序列化,现在我们所熟悉的RPC(Remote Procedure Call,远程调用),对象数据库都不可能存在。


serialVersionUID是干什么用的?

serialVersionUID适用于java序列化机制。简单来说,JAVA序列化的机制是通过判断类的serialVersionUID来验证的版本一致的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID于本地相应实体类的serialVersionUID进行比较。如果相同说明是一致的,可以进行反序列化,否则会出现反序列化版本一致的异常,即是InvalidCastException。


教程:https://blog.csdn.net/weixin_42218169/article/details/123525504


收获4:分页查询的参数

分页查询需要传入两个参数:pageNo (每页的页码)和pageSize (每页显示的条数),通过这个两个参数可以算出当前页的起始索引 index=(pageNum-1)*pageSize,举个例子

   pageSize=4,pageNum=1,index=0 limit (0,4)

收获5:给Redis设置临时密码

先打开服务端

再打开客户端

注意顺序不能错,不然会报错,然后输入

config set requirepass 123(自定的密码)
auth 123 (自定的密码)


例如

注意:这样设置只是临时的密码,关闭服务端后密码就失效了


收获6:使用Redis

首先添加配置类进行序列化

package cn.hsa.xxx.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.session.data.redis.config.ConfigureRedisAction;
/**
 * @author 骚戴
 */
@Configuration
public class RedisConfig {
    @Bean
    public static ConfigureRedisAction configureRedisAction() {
        return ConfigureRedisAction.NO_OP;
    }
    /**
     * 设置RedisTemplate规则(默认的是把对象转成二进制存储到Redis,配置了这个后就是Json格式存储)
     * @param redisConnectionFactory
     * @return
     */
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        //序列号key value
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

使用Redis存储单个对象内容

@Resource
private RedisTemplate redisTemplate;
redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES);
public static final String ALL_CLASS_KEY = "DEMO:ALL:CLASS";


代码演示
    @Override
    public ClassDTO add(ClassDTO classDTO) {
        ClassDO classDO = classDTOConverter.convertToClassDO(classDTO);
        classDO.setCreateTime(new Timestamp((new Date()).getTime()));
        classDO.setUpdateTime(new Timestamp((new Date()).getTime()));
        classDO.setClassUuid(String.valueOf(idGenerator.next(RedisConstans.CLASS_ID_KEY)));
        classDAO.addClass(classDO);
        String key = RedisConstans.CLASS_KEY + ":" + classDO.getClassUuid();
        redisTemplate.opsForValue().set(key, classDO,5, TimeUnit.MINUTES);
        return classDTOConverter.convertToClassDTO(classDO);
    }


使用Redis存储List集合

    /**
     * 分页查询
     * @param pageNo 每页的页码
     * @param pageSize 每页显示的条数
     * 当前页的起始索引 index=(pageNum-1)*pageSize
     *   举例
        pageSize=4,pageNum=1,index=0 limit (0,4)
     */
    @Override
    public List<ClassDTO> getAll(Integer pageNo, Integer pageSize) {
        PageHelper.startPage(pageNo,pageSize);
        String key = RedisConstans.ALL_CLASS_KEY + ":" + pageNo;
        if (redisTemplate.hasKey(key)){
            List<ClassDO> classDOList = (List<ClassDO>) redisTemplate.opsForValue().get(key);
            List<ClassDTO> classDTOList = new ArrayList<>();
            for (ClassDO classDO : classDOList) {
                classDTOList.add(classDTOConverter.convertToClassDTO(classDO));
            }
            return classDTOList;
        }
        List<ClassDO> classDOList = classDAO.getAll();
        List<ClassDTO> classDTOList = new ArrayList<>();
        for (ClassDO classDO : classDOList) {
            classDTOList.add(classDTOConverter.convertToClassDTO(classDO));
        }
        redisTemplate.opsForValue().set(key,classDOList);
        return classDTOList;
    }
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
安全 Unix 编译器
c++的学习之路:1、学习前言
c++的学习之路:1、学习前言
45 0
|
前端开发
2023Web前端开发八股文&面试题(万字系列)——这篇就够了!
2023Web前端开发八股文&面试题(万字系列)——这篇就够了!
1553 2
|
7月前
|
消息中间件 Java 关系型数据库
首发!阿里面试官总结从零到架构面试宝典,是时候让面试官懵逼了
最近几年公司的大小招聘,社招、校招都有参与,遇到过许多厉害的,也遇到过很多职场小白。
首发!阿里面试官总结从零到架构面试宝典,是时候让面试官懵逼了
|
Cloud Native 算法 程序员
程序员面试宝典专栏简介
程序员面试宝典专栏简介
66 0
|
前端开发 JavaScript 容器
2023年前端面试整理(持续更新中)
2023年前端面试整理(持续更新中)
|
数据库
【知识提升】计算机书籍收获
【知识提升】计算机书籍收获
|
前端开发 JavaScript IDE
程序员成长第二篇:如何快速入门
程序员成长第二篇:如何快速入门
133 0
|
存储 Linux
疑惑、问题、生疏及解决(持续更新)
疑惑、问题、生疏及解决(持续更新)
134 0
疑惑、问题、生疏及解决(持续更新)
|
存储 弹性计算 云计算
我的学习收获
在经过一小段的时间的学习,我学会了运用云服务器ECS搭建一个简单的简历网站
我的学习收获
|
弹性计算
阿里云的学习收获
利用老师给的网站进行阿里云的学习,领用到云服务器ECS后,使用云服务器进行一系列的学习。

热门文章

最新文章

相关实验场景

更多