1. Redis的安装过程
(1) 下载Redis
这里就随便下,无论是安装包也好压缩包也好怎么都行
(2) 配置环境变量
配完了之后可以不需要进入Redis的那个目录,然后可以直接敲redis.....把这个服务启动起来。
(3) 把Redis变成一个服务
至少你在服务页面估计能看到他,然后定成自动启动,省的天天手动。
(4) 设置密码
在Redis这个文件夹里面编辑redis.windows-service.conf,类似的conf文件有两个,千万分清楚这个后面带service的。
使用这种方式设置是永久性设置。
(5) 打开本地客户端
如果要查询里面的键值对是什么之类的,就用redis-cli。
设置了密码之后,上来输入的就是 auth 123456(根据自己的密码改)
###########################################################
安装、打开、设置密码(就是配Redis环境)这些应该也可以用docker完成
2. SpringBoot集成Redis
(1) 在pom里导入一个jar包
(2) yml配置
redis:
host: localhost # Redis服务器地址
database: 0 # Redis数据库索引(默认为0)
port: 6379 # Redis服务器连接端口
password:"test" # Redis服务器连接密码(默认为空,以及这里带引号!!!)
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制),能制造出来的最大的连接数
max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接,空闲太多可能销毁
min-idle: 0 # 连接池中的最小空闲连接,务必保持几个控线连接
timeout: 3000ms # 连接超时时间(毫秒)
(3) 注入Template开始用
经过了上两个步骤之后,其实就已经配置好了,在代码里面注入Template就可以set、get然后启用了。
Teplate目前已知的有两种,一种是RedisTemplate,一种是
StringRedisTemplate(这种其实也就是RedisTemplate<String,String>),就是封装了一下写的高大上了。
所以自己用的时候只能用RedisTemplate,如果需要的话自己写泛型。
序列化器:
由于RedisTemplate里面注入的直接就是object,需要被缓存的类实现了Serielizable接口才行。
简单写一下Serielizable:
Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行状态时,这些对象才能存在,即,这些对象的生命周期不会比JVM更长。但在现实中,就可能要求在JVM运行停止后能够保存(持久化),以便下次运行时重新获取对象,Java对象序列化就能够帮助我们实现该功能。
网络上远程传递的时候也需要实现这个功能。
如果仅仅只是让某个类实现Serializable接口,而没有其他处理的话,则就是使用默认序列化机制。使用默认机制,在序列化对象时,不仅会序列化当前对象本身,还会对该对象引用的其他对象也进行序列化,同样的,这些其他对象引用的另外对象也将被序列化,以此类推。所以,如果一个对象的成员变量是容器类对象,而这些容器含有的元素也是容器类对象,那么这个序列化对象的过程就会很复杂,开销也很大。
transient关键字可以忽略掉某些字段。
3. Redis连接池
(1) 为什么要用连接池:
连接池定义:连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程。
连接池管理的就是连接,每次存取数据的时候,都要new一个连接对象出来,建立一个TCP连接要经历三次握手什么的,这样挺浪费时间的,所以每次用完连接对象之后不释放,存到连接池里面去,下次用连接对象的时候去连接池里面获取。
(2) 手写Redis连接池:
Redis连接池这东西一共就三个函数,一个init,一个getResource,一个release。
其中尤其以getResources为核心。
首先如果要完成连接池保存,要有存储容器,set、list、queue、array、map这些是要选择一下的。
频繁的存取,不能用array,不能用array的也不能用list,map不需要key,queue和set两个平分,最终用queue。
那就要有两个queue来放置空闲的和被使用的连接。
getResource的调用流程:(中间把config都用上了)
如果有空闲连接直接返回
没有空闲的但是目前总数还没超过max,可以再new一个
总数已经到max了,没法new了就只能等
如果超过了等待时间,返回报错
release调用流程:
把这个连接从使用中队列移动到空闲队列