09-Redis知识点分体分析及常见问题总结
时间:2023-04-07 08:07:00
文章目录
- 1、Redis技术入门
-
- 核心知识点
- 常见问题分析
- 常见Bug分析
- 课后作业
- 2、Jedis与RedisTemplate应用实践
-
- 核心知识点
- 常见问题分析
- 常见Bug分析
- 课后作业
- 3、Java中redis项目应用进阶
-
- 核心知识点
- 常见问题分析
- 常见Bug分析
- 课后作业
- 4、Redis数据持久,事务。
-
- 核心知识点
- 常见问题分析
- 常见Bug分析
- 课后作业
- 5、Redis架构设计与实践
-
- 核心知识点
- 常见问题分析
- 常见Bug分析
- 课后作业
1、Redis技术入门
核心知识点
- Redis技术简介(什么,背景,版本,基本架构)
- Redis服务基本操作(登录redis,退出基本指令redis)
- Redis常用数据类型(string,hash,list,set,…)
- Jedis API (Redis的客户端API)的基本应用.
常见问题分析
- Redis是什么?(分布式Key/Value结构内存数据库,非关系数据,NoSql数据库)
- Redis数据库诞生的背景?(关系数据库访问压力大,本地内存不支持多服务实例共享)
- Redis数据库的基本架构?(C/S,redis-cli,redis-server)
- 你了解Redis基本指令是什么?(redis-cli,redis-server,exit,clear,type,expire,shutdown,help,?,keys,flushall,flushdb)
- 字符串类型的特点是什么?(所有值均为字符串,空间动态分配,可实现整个值的增减和日志记录。
- 操作字符串类型(string)常用指令?(set,get,strlen,append,mset,mget,incr,incrby,decr,decrby,del,setnx)
- 哈希类型(hash)数据的特点是什么?(即值也可以使用key/value结构存储,key无序,key覆盖相同值,方便存储对象)
- 操作哈希类型(hash)常用指令(hset,hget,hgetall,hexits,hdel,hkeys,hvals,hincrby,hmget)
- 列表类型(list)数据的特点是什么?(链表记录添加元素的顺序,允许重复元素,可以实现FIFO,FILO这些特性)
- 操作列表类型(list)常用指令类型(lpush,rpop,rpush,lpop,lrem,lindex,ltrim,lset,linsert,lrange,rpoplpush,lpos)
- Set类型数据的特点(散列,不记录元素添加顺序,不允许元素重复)
- 操作set常用类型指令?(sadd,smembers,spop,smove,scard,sunion)
- Redis各种数据类型的应用场景?
- Gson是什么?(Google一组用于操作json数据的API)
常见Bug分析
- redis服务不能启动?(看容器日志)
- redis指令应用错误(参考语法实践)
- Jedis中连接Redis检查失败redis服务是否启动,ip端口是否正确,防火墙是否关闭)
课后作业
- 总结课堂知识点
- 完成Redis常用的数据类型操作
- 预习redis对应的Java客户端api实践
2、Jedis与RedisTemplate应用实践
核心知识点
- JedisPool基本应用和设计分析
- RedisTemplate对象应用实践分析
- StringRedisTemplate应用实践分析
- 基于业务定制RedisTemplate对象(简单定制,高级定制)
常见问题分析
- Jedis常用API有哪些?(Jedis,JedisPool,JedisPoolConfig)
- Jedis如何存储POJO对象到redis?(将对象转换为json串,对象以Hash存储形式)
- Gson是什么?(Google用于运营的公司推出JSON一组格式数据API)
- JedisPool是什么?(一个Jedis所有池对象都有享元设计)
- 我们在应用JedisPool连接池时,如何保证这个对象是内存中唯一的?(双锁验证单例模式)
- RedisTemplate对象的作用(Spring在框架中推出一个操作框架Redis的API对象)
- RedisTemplate 默认对象的序列化方式是什么?(JDK方式,默认key和value需要实现Java中序列接口)
- RedisTemplate 当对象按默认规则序列时,我们的对象是否需要实现序列接口?(需要)
- 如何修改RedisTemplate对象的序列化?setXxx设置序列化等方法)
- RedisTemplate应用了哪些设计模式?(模板方法模式)
- 如何学习?RedisTemplate(参考官方文件,demo,源代码)
- 在什么场景下使用?StringRedisTemplate?(key/value序列化方法都是string时)
- RedisTemplate对象你做过定制实现(做过,定制过key/value序列化)
常见Bug分析
- 连不上远程redis服务?(redis服务是否启动,防火墙是否打开,ip和账号是否正确)
- 基于RedisTemplate对象的incrment方法实现key注意值的结构类型?(Long)
- 对象序列化和反序列化异常(必须注意序列化规则)
课后作业
- 总结课堂知识点
- 完成基于Jedis对象实现数据应用实践?
- 完成基于RedisTemplate对象应用实践?
- 预览并尝试完成03文档中的单点登录系统和简单的投票系统.
3、Java中redis先进的项目应用
核心知识点
- 基于redis实现简单点登录系统(重点)
- 基于redis实现简易活动投票系统(重点)?
- 基于redis实现简易购物车统(重点)?
- 项目菜单模块中redis应用实践(重点)?(两种方式)
常见问题分析
- 基于redis存储用户状态时,你使用的数据类型是什么?(hash类型-key是随机串,
value为hash方式存储的对象) - 通过redis存储登录状态,你觉得有什么弊端?(检查用户登录状态需要查询redis)
- 基于redis实现某个活动的投票系统,你使用的数据类型是什么?(Set类型-不允许元素重复)
- 在我们的业务对象中如何使用redis?(注入RedisTemplate或其子类)
- 如何基于AOP方式应用Redis?(@EnableCaching,@Cacheable,@Cacheput)
- 如何定制Aop方式应用redis时的数据序列化机制?(自己定制CacheManager接口实现类-RedisCacheManager)
常见Bug分析
- 依赖注入异常?(检查对象是否交给了Spring管理,一个接口有多个实现时如何实现对象的注入)
- 对象序列化存储异常?(假如是JDK方式的序列化,序列化化的对象需要实现JDK中的序列化接口)
课后作业
- 总结课堂知识点
- 完成AOP方式Redis应用实践。
- 预习04-Redis中的持久化应用实践。
4、Redis数据持久化,事务。
核心知识点
- Redis持久化背景?
- Redis持久化机制以及持久化方式。
- Redis中的事务背景。
- Redis中的事务处理方式以及常用指令。
常见问题分析
- 为什么要持久化?(更好的保证数据的可靠性,防止断电,系统宕机情况出现大量数据丢失)
- Redis中持久化的方式有哪些?(RDB,AOF)
- Redis中默认开启的持久化方式是?(RDB-快照方式的持久化)
- 如何理解Redis中AOF方式的持久化?(记录我们所有的写操作指令)
- 你是否了解AOF中的Rewrite操作?(重写aof日志文件,压缩日志文件,同时让日志文件中的指令与内存中的数据尽量一致)
- 你了解Redis中的哪些持久化配置?(持久化的时机,…)
- 说说Redis中Rdb和Aof方式持久化的优势和劣势?
- 生产环境下如何应用Rdb和Aof的持久化方式?(两种都要配置)
- Redis中常用事务指令有哪些?(watch,unwatch,multi,exec,discard)
- Redis中是基于乐观锁方式处理事务吗?(是)
常见Bug分析
- redis配置文件中配置出错导致redis服务无法启动?(vim指令不熟,容器服务启动一定要日志)
- redis数据库连不上?(ip,port,服务启动,防火墙)
课后作业
- 总结课上知识点
- 课后查阅缓存穿透,击穿,雪崩相关内容.
- 预习Redis架构设计。
5、Redis架构设计及实践
核心知识点
- Redis 主从架构设计及实践(薪火相传,Master->Slave:全量同步和增量同步)
- Redis 哨兵机制及应用实践 (反客为主,Master宕机了,哨兵会选择slave为Master)
- Redis 集群架构设计及实践 (众志成城,多个Master齐心合力)
常见问题分析
- 为什么需要Redis主从架构?(大部分缓存是读多写少)
- 为什么需要Redis哨兵机制?(为了高可用,Master宕机可以选择Slave升级为Master)
- 为什么需要Redis集群架构?(高可用,大量数据的存储需要)
- 单纯的Redis主从架构存在什么问题?(Master宕机,整个主从不再支持写操作)
- Redis哨兵(sentinel)作用是什么?(监控主从节点工作状态,主节点宕机,自动选择新的主节点)
- Redis 从节点下还可有从节点吗?(可以的,薪火相传)
- Redis主从加哨兵还存在什么明显缺陷?(主节点只有一个,支持可存储的数据量受限)
- 集群架构要解决的主要问题是什么?(横向扩容,单个主节点不能支持更大并发的写操作,且容量有限)
- 当架构设计中的redis服务有问题时怎么办?(一定要看容器日志 docker logs 容器id或容器名)
- 命令行如何登录redis集群中的节点?(redis-cli -c -h 192.168.126.128 -p 8010)
- 登录redis集群节点后,如何查询redis中的集群节点信息?(cluster nodes)
- 如何停止多个redis容器?(参考docker stop redis-801{0…1})
- Jedis中应用集群时的API是什么?(JedisCluster)
- SpringBoot工程中如何配置Redis集群连接(spring.redis.nodes:…)
- SpringBoot中如何应用lettuce连接池(依赖-common-pool2,application.yml)
常见Bug分析
- 架构实践过程中要注意ip地址(最核心问题)。
- 服务内存不足,导致服务启动失败。
课后作业
- 总结课上知识点
- 完成redis架构设计及实践
- 尝试克隆gitee上面的jt-cloud-admin项目,然后按照项目中readme.txt中内容,将项目跑起来.