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端口是否正确,防火墙是否关闭)
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)
- 对象序列化和反序列化异常(必须注意序列化规则)
Java中redis先进的项目应用
核心知识点
- 基于redis实现简单点登录系统(重点)
- 基于redis实现简易活动投票系统(重点)?
- 基于redis实现简易购物车系统(重点)
- 在项目菜单模块中redis应用实践(重点)
常见问题分析
基于redis您在存储用户状态时使用的数据类型是什么?(hash类型-key是随机串, value为hash存储方式的对象) 通过redis您认为存储登录状态的缺点是什么?(检查用户登录状态需要查询redis) 基于redis实现某一活动的投票系统,您使用的数据类型是什么?(Set类型-不允许元素重复。 如何在我们的业务对象中使用?redis?(注入RedisTemplate或其子类) 如何基于AOP方式应用Redis?() 如何定制Aop方式应用redis数据序列化机制(自定义)CacheManager接口实现类-RedisCacheManager)
常见Bug分析
- 依赖注射异常(检查对象是否交给了?Spring管理,一个接口有多个实现时如何实现对象的注入)
- 对象序列化存储异常JDK需要实现序列化的对象JDK序列接口)
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架构设计及实践
核心知识点
- 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地址(最核心问题)。
- 服务内存不足,导致服务启动失败。