Redis详细介绍,以及在SpringBoot中的简单使用
1.Redis的特点:
(1)Redis支持数据的持久化,可以将内存中的数据保存到磁盘中,下次启动的时候可以直接加载磁盘中的数据;
(2)Redis不仅可以存储key-value类型的数据,还可以存储List、Set、hash、zset等数据结构的数据;
(3)Redis支持数据的备份,即master-slave模式的备份;
(4)Redis性能极高,读写速度特别快,读的速度为110000次/s,写的速度为81000次/s;
2.Redis的安装(Windows环境下)
- 首先下载:https://github.com/MSOpenTech/redis/releases,解压后,将文件夹重新命名为redis;
- 使用cmd调出命令窗口,进入redis路径下,输入redis-server.exe redis.windows.conf运行redis服务;
- 再重新打开cmd窗口,运行redis-cli.exe -h 127.0.0.1 -p 6379 ,输入set myKey abc设置myKey的值,然后使用get myKey取值。
- Mac下安装)
3.redis配置
- --使用” CONFIG GET 配置名称 ”获取配置
- --使用“CONFIG GET *”获取所有的配置名称
- --使用“CONFIG SET 配置名称 ‘要修改为的值’”来修改配置
3.1支持的数据类型
- String、hash、Set、zset、List
- --String:set myKey “aaa”
- --hash:HMSET myKey field1 “aa” field2 “bb” (HSET myKey field1)
- --List:
- --Set:
- --zset:
4.客户端启动
- --使用redis-cli启动客户端
- --使用PING来看是否连接成功
- --操控远程的redis
5.关于键的基本命令
- --DEL:删除键
- --DUMP:序列化给定的key,并返回被序列化的值
- --EXPIPR:(EXPIPR key seconds)为指定的key设置时间
- --EXISTS:检查给定的key是否存在
- --KEYS pattern:查找所有符合给定模式的key
- --……更多关于键的命令请查看:https://redis.io/commands
6.常用的redis字符串命令
- --SET key value:设置指定key的值
- --GET key:获取指定key的值
- --GETRANGE key start end:返回字符串中指定的字符
- --GETSET key value:设置key的值为value,并返回key的旧值
- --……更多命令请看:http://www.runoob.com/redis/redis-strings.html
7.常用的Hash的命令
- --HDEL key field1 [field2]:删除一个或多个哈希表字段
- --HEXISTS key field:查看哈希表中给定的字段是否存在
- --HGET key field:获取指定字段的值
- --HGETALL key:获取哈希表中指定key的所有字段和值
- --………更多命令请看:http://www.runoob.com/redis/redis-hashes.html
8.常用的List的命令
- --LINDEX key index:通过索引获取列表中的元素
- --LLEN key:获取列表长度
- --LPOP key:移除并获取列表的第一个元素
- --LPUSH key value1[value2]:将一个或多个值插入到列表头部
- --………更多命令请看:http://www.runoob.com/redis/redis-lists.html
9.集合和有序集合相关命令
http://www.runoob.com/redis/redis-sorted-sets.html
10.什么是基数?
- 基数就是一个集合中不重复的元素:例如{1,3,5,7,5,7,8},那么这个集合的基数为{1,3,5,7,8}。基数估计就是在误差可接受的范围内快速计算基数。
- Redis在2.8.9增加了HyperLogLog结构:
11.发布订阅者模式
- Redis发布订阅者模式:是一种消息发布模式,发布(pub)即发送消息,订阅(sub)即接受消息。使用SUBSCRIBE “频道名称”创建一个频道,然后重新打开另外一个客户端,通过PUBLISH redisChat “message”向频道发送消息,然后客户端就可以收到消息了。具体实例如下图所示:
-
-
- 发布订阅模式常见的命令为:
12.事务
- redis事务:一次可以执行多个命令,并带有一下几个特性:
- (1)批量操作在执行EXES命令前会被放入到缓存中
- (2)执行EXES命令时,进入事务执行,如果任意的命令执行失败,其他的命令会继续执行
- (3)在EXEC执行的过程中,其他客户端发送的命令不会被插入到事务的命令序列中
- redis事务的执行过程分为:开始事务——命令入队——执行事务,具体的示例如下图所示:
- 它以MULTI开始一个事务,然后将多个命令加入到队列当中,最后以EXEC触发事务执行。如果其中的任意一个命令执行失败,都不会影响剩下的命令进行执行,而执行过的命令也不会进行回滚。常见的事务的命令如下所示:
13.脚本执行
- Redis:使用Lua解释器来执行Redis脚本,Redis2.6内嵌了Lua解释器,常用的命令为EVAL。具体的示例如下图所示:
- 常见的Redis脚本的命令为:
14.连接
- redis连接主要用于连接redis服务,下面的示例描述了如何设置密码、如何连接服务、验证是否连接成功等步骤:
- 常见的连接命令为:
15.服务器
- --查看服务器信息INFO
- --获取连接到服务器的所有的客户端信息
- 其他常见的redis服务器的命令如一下连接所示:
http://www.runoob.com/redis/redis-server.html
16.数据保存与备份
- 使用SAVE创建当前数据库的备份;
- 使用CONFIG GET dir获取redis目录,只需要将redis目录下的dump.rdb文件移动到redis的安装目录下,重启服务就可以完成数据的恢复;
- 使用BGSAVE创建备份文件,该命令在后台执行。
17.性能测试
- 在非redis服务下,使用redis-benchmark 参数 具体值 的形式来对redis的性能进行测试。详细的参数列表如下图所示:
- 具体的示例如下图所示:
18.客户端连接
- 客户端的最大连接数默认为10000
- Redis通过监听一个TCP端口或者Unix socket的方式来接受来自客户端的连接,当一个连接建立后,Redis内部会进行一下操作:
- 首先,客户端socket会被设置为非阻塞模式,因为Redis在网络事件处理上采用的是非阻塞多路复用模型;
- 然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法;
- 然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送。
- ----常见的客户端命令如下图所示:
19.管道技术
- Redis是一种基于客户端、服务端和请求相应协议的TCP协议。他的具体流程如下:
- (1)客户端发送请求至服务端,并监听socket返回,等待服务器相应
- (2)服务器端收到请求并处理,将处理后的结果返回给客户端
- Redis管道技术可以在服务端未响应时,客户端继续向服务端发送请求,然后一次性接受所有的服务端相应。
- 查看Redis管道只需要开启Redis实例,然后输入以下命令即可,具体示例如下图所示:
- 上面的例子中,首先我们查看redis是否连接,然后设置了runoobkey的值,接下来获取了runoobkey的值并使得visitor的值自增3次。在返回的结果中我们看到,所有的命令一次性提交,并返回了全部的响应结果。
- 管道开启后,速度会提升很多。。。。。。
20.分区
- 分区是分割数据到多个Redis实例的过程,也就是每个实例只保存key的一个子集。
- ----优势
- (1)通过分区,可以构造更大的数据库
- (2)利用多核和多台计算机,可以提升计算速度
- (3)通过多台计算机以及网络适配器,允许我们拓展带宽
- 但是涉及多个key的操作通常是不被支持的。
- Redis 有两种类型分区。 假设有4个Redis实例 R0,R1,R2,R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放在哪个实例中。也就是说,有不同的系统来映射某个key到某个Redis服务。
- 1)、范围分区
- 就是映射一定范围的对象到某个Redis实例,例如,ID从0到10000的用户会被映射到Redis实例1,范围在10001到20001的用户将会被映射到Redis实例2.。。。。。
- 2)、hash分区
- 利用hash的一个函数将这个key转换成一个整数,然后对这个整数进行取模,例如:如果模为2,则将这个key映射到R2中。
21.SpringBoot中使用Redis
- 以springboot为例:
- 首先导入依赖包:
- 使用RedisTemplate连接redis:
- 最简单的插入操作: