redis学习笔记(一)
基本认识
- 非结构化,非关系型数据库,键值型
- 无关联(没有表),通过JSON类型,存储关联数据
- 非SQL,语法不统一
- 无事务,不能满足ACID,BASE
- 内存存储
- 单线程的
常用命令
可以通过 help 命令 来查看命令用法 (只能在cli中使用help命令)
通用命令
- keys pattern pattern里面存放匹配模式,模糊查询影响效率
- del 删除指定的key,可以删除多个,以空格分隔
- exists key 判断key是否存在
- expire 给key设置有效期,到期后,该key会自动删除 (针对已存在的key)
- ttl 查看key剩余有效期
String常用命令
- setnx 和setex是组合命令,也可以写成下面形式
- 实现key的分级存储,用冒号隔开,图形化界面会分级显示,java类可序列化为json格式便于存储
hash常用命令
注意,hsetnx判断的是hash类型记录的字段名,若不存在,则为该key添加field
List常用命令
- 可视为 双向链表,支持双向检索,双向插入,元素有序,可重复
- 常用于保存对顺序有要求的数据
- push 可插入多个元素,查看数据使用 lrange(双闭) 而不是pop
- 注意插入顺序 lpush 1 2 3 存储的顺序为 3 2 1
Jedis
基本使用
@BeforeEach是单元测试的注解,每个@Test执行前会执行它
连接池
jedis是线程不安全,多线程是需要给每个线程分配一个Jedis对象
通过静态代码块完成初始化工作
最大空闲连接:没人访问可以维持的最多连接数
最小连接数,空闲时维持的最少连接数
SpringDataRedis
简介
Jedis中,key和value的类型都只能是String 或 byte[],但是SpringDateRedis自动序列化
因为redis中的collection对象是分布式,跨系统的
核心是RedisTemplate工具类
快速入门
IDEA新建项目
创建springboot工程
- Maven (Generate a Maven based project archive)会创建一个完整的 Maven 项目结构 。除了生成核心配置文件pom.xml ,还会自动创建src/main/java(存放主代码)、src/main/resources(存放资源文件,如配置文件)、src/test/java(存放测试代码)等标准目录结构,并且如果是创建 Spring Boot 项目,还会生成主启动类(带有@SpringBootApplication注解的类)等必要文件,方便直接开始项目开发。
- Maven POM (Generate a Maven pom.xml) :仅生成 Maven 项目的核心配置文件pom.xml
- 关于版本问题:
这五个文件可删去
.properties 可以 改为 .yml
Meaven里面这个会默认打开,打开后处于离线模式,无法从中央仓库下载
这里应该写8,而不是1.8。点击右栏Meaven的刷新没用,点击pom.xml重新加载项目才刷新成功。
新建项目依赖一直错误,直接在苍穹外卖中新建了一个模块。。。
似乎test文件夹下,运行测试用例,日志信息没有颜色。
使用RedisTemplate操作Redis
ctrl h 查看接口实现列
-
简单入门
- 在yml中配置,redis的连接信息
- 直接注入提供的RedisTemplate并且调用方法
- 由于序列化器问题,默认使用JDK序列化工具,导致存入redis数据可读性差,占用空间大,产生bug
- 在yml中配置,redis的连接信息
-
自定义注册器
- 遇到的问题
- 最开始,疑惑@Autowired怎么确定我要引入的是哪个RedisTemplate,因为简单入门是直接注入的框架提供的RedisTemplate,视频中是通过指定泛型来确定的???再研究研究。
- 接着,发生了一直找不到Bean的错误,于是怀疑配置类代码没有被执行,想通过日志来查看是否执行。发现怎么配日志也不清楚!!!记得看web+ai的时候,教程里是需要注入一个log对象的,好像通过注解也可以实现,不过注解需要配置类???
- 发现目录结构处理问题,启动类多了一层包,导致包扫描扫描不到配置类
- 之后,又报错说,测试框架无法找到 @SpringBootConfiguration 注解的类。(@SpringBootConfiguration 通常由 @SpringBootApplication 即启动类的注解注解隐式提供),通过注解中加入classes显式指定启动类解决@SpringBootTest(classes = RedisDemoApplication.class)
- 最后,报错找不到Jackson,如视频中添加Jsckson依赖解决,此依赖含于SpringMVC中,但是本学习案例没有导入,所以需要手动导入。
- 关于配置类包扫描问题,框架自动扫描启动类所在包及其子包下的类,注册Bean,如果在不同包,则扫描不到,需要使用注解配置。(记得苍穹外卖在某个地方配置了包扫描。等一下看看怎么回事)
- 怎么指定或者区分注入的是哪个Bean
- 怎么配置日志,使用注解的时候在哪里配置日志的隔离层级啥的
- 为什么测试框架找不到启动类,SpringBootConfiguration注解对测试类什么作用
这个错误是由于序列化缺少必要的get和set方法。lombok注解未起作用。 - 为什么lombok没有起作用呢!!!
- 达到的效果
但是,jackon为了反序列化,所以必须存类的全类名,占用空间,不好
- 遇到的问题
-
使用StringRedisTemplate,手动序列化和反序列化
ObjectMapper是JSON工具- 学习一种JSON处理工具 Jackon用得最多