一、Redis
1.Redis描述
- Redis是一个开源的(BSD许可的),
- 使用C语言编写的
- 支持网络交互的
- 内存中的Key-Value数据结构存储系统
- 可将数据缓存到内存中 (程序使用时,可以缓存数据,具有临时性,速度快)
- 非关系新数据库
- Redis支持多种类型数据库;如:
- 字符串(strings)
- 散列(hashes)
- 列表(lists)等
2.缓存
- 将数据库缓存到内存(程序中)
- sqlSession 一级缓存
- sqlSessionFactory 二级缓存 设置有效时间,减轻数据库的压力
- eg:
- 计算机的运行速率
3.关系型数据库与非关系型数据库
- 关系型数据库
- MySQL,SQLserver,Oracle等需要建表,列,且表与表直接有关系,支持多种类型数据结构
- 一张二维表的表名就是关系,二维表中的一行就是一条记录,二维表中的一列就是一个字段
- 优点:
- 容易理解
- 使用方便,通用sql语言
- 易于维护,丰富的完整性(实体完整性、参照完整性和用户定义的完整性),大大降低了数据冗余和数据不一致的概率缺点
- 缺点:
- 磁盘 I/O 是并发的瓶颈(保证数据一致性,事务控制+锁 性能降低)
- 非关系型数据库
- 非关系型,分布式,一般不保证遵循 ACID 原则的数据存储系统,键值对存储,结构不固定。
- 优点:
- 根据需要添加的字段不需要多表联查,仅需要id取出对应的value
- 严格上讲不是一种数据库,而是一种数据结构化存储方法的集合
- 缺点:
- 只适合存储简单的数据
- 不适合复杂查询的数据
- 不适合持久存储海量数据
4.Redis基本设置
- 在使用前需要更改内部设置
- 1.后台运行: daemonize no 改为 daemonize yes
- 2.设置密码:requirepass 你的密码
- 3.注释 绑定的 id,默认只能本机访问, 注释后其他电脑就可以远程访问了,即# bind 127.0.0.1
- 若使用宝塔,只需要在安全中放行端口6379,设置配置密码即可,切记更改完配置后需要重启Redis
- 若使用不使用宝塔,则需在VMware中
- 先将从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录
cp redis.conf /usr/local/redis/bin/
- 修改 redis.conf 文件 vim redis.conf即上部更改配置操作
- 最后在启动命令:./redis-server redis.conf
- 查看进程:ps -ef|grep redis
- 销毁进程:kill -9 进程号
5.Redis基本使用

- 使用Xshell打开redis
- 首先输入redis-cli进入客户端模式
- 输入密码 auth
- ping 测试 结果为PONG
- ctil+c 退出客户端模式
- 在重新来一遍测试ping,但会发现此次需要输入密码,否则报错
6.Redis五种数据类型
- String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)
(1)String

- Redis中的String是二进制安全的,可以包含任何数据,
- eg:jpg 图片或者序列化的对象
- String类是Redis最基本的数据类型,String类型的值最大能存储512Mb
- set 键 值 ; 键为 name,对应的
- get 键 ; 值为 jim。
(2)Hash

- Redis Hash是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
- 存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希
- HMSET 设置了两个 field=>value 对,
- HGET 获取对应 field 对应的 value。
- 每个 hash 可以存储 232 -1 键值对(40 多亿)
- hmset 键 字段1 值1 字段2 值2
- hget 键 字段。
- student:{field1:“heool”,field2:“oka”}
(3)List

- Redis List(列表)是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- LPUSH 设置了两个 aa=>value 对, 是从表头开始添加
- RPUSH 设置了两个 aa=>value 对, 是从表尾开始添加
- LRANGE 获取对应 aa对应的 value。
- 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储 40 多亿)。
- 一个键可以多次赋值 user:[a,a,a,a]
(4)Set

- Redis 的 Set 是 string 类型的无序集合。
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)
- sadd 命令添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
- smembers获取对应的value
- 以上实例中 rabbitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
- 最大的成员数为 232 - 1(4294967295, 每个集合可存储 40多亿个成员)。
- 可以添加多组数据 user:[aa,a,b,c]
(5)zset(sorted set:有序集合)
- Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个 double 类型的分数。
- Redis 正是通过分数来为集合中的成员进行从小到大的排序。
- zset 的成员是唯一的,但分数(score)却可以重复。
- zadd 命令添加元素到集合,元素在集合中存在则更新对应 scorezadd key score member
7.Redis设置失效时间
- 有时候我们并不希望 redis 的 key 一直存在。(假永久存在,当关闭时所有的数据缓存都会被销毁)
- 比如验证码等数据,我们希望他可以自动销毁.
- redis 提供了一些命令,能够让我们对 key设置过期时间,并且让 key 过期之后被自动删除.
- 如下图所示

- 上图只演示EX秒单位示例
- PX 表示以毫秒为单位 EX,PX 不区分大小写
- set bbbjim EX 10 设置失效时间为 10 秒
- ttl 键 查看剩余时间(秒) ;
- 发现剩余时间-2秒,此时说明当前bbb已失效
- 此时设置20s有效时间
- 会查看发现他的有效时间一直减少直至-2彻底消失
- 当你查询为给予有效时间的元素会发现出现-1
- pttl 键 查看剩余时间(毫秒)
- 设置值后设置有效时间
- expire 键 时间(秒)
- pexpire 键 时间(毫秒)
二、springBoot 集成使用 redis
- springBoot对redis提供的Jedis封装在了spring-data-redis
- spring-data-redis的功能
- 连接池自动管理
- 对Jedis客户端中的各种api封装在operation接口中
- 封装了事务功能
- 针对数据的序列化与反序列化
1.添加redis依赖
<!--redis-->
<dependency>
<groupId>org.springframework.boot<