分布式数据库Redis的简介、安装与设置使用指令

分布式数据库Redis的简介、安装与设置使用指令

Redis的简介

全称Remote Dictionary Server,即远程字典服务。Redis是一款基于内存的高速缓存运行的高性能键值存储系统,通过Key-Value来存储数据的开源数据库,可以用作数据库、缓存和消息中间件。本文中的一些名词解释,待从此博客中找出对应并补入

  • Redis 内置了复制(replication),LUA 脚本(Lua scripting),LRU 驱动事件(LRU eviction),事务(transactions)和不同级别的 磁盘持久化(persistence);
  • Redis 支持多种类型的数据结构,如 字符串(strings),散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) ,范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询;
  • Redis 通过 哨兵(Sentinel) 和自动分区(Cluster)提供高可用性(high availability)。

Redis在【开发项目】中主要用来做缓存——Redis缓存的作用是把经常访问的【数据库中的数据】提取到Redis,①用户查询的时候,先去Redis查询,没有查到再去数据库执行sql语句查询,并同时把查询到的数据同步到Redis里面,Redis只做读操作②用户添加、删除数据的时候,先在Redis中进行操作,然后通过线程对数据库执行异步操作,来对应添加、删除数据库中的对应数据,以保持Redis与数据库中的一致——这是因为Redis基于内存,而内存中查询速度快,就像我们用 MySQL 做持久层数据一样 。通过【Redis+数据库(MySQL、Oracle)】的好处是:待补入此博客

  1. 提速 数据库操作——因为原本【操作数据库】变为了【操作缓存】,而数据库的操作变为了异步,从而不再影响主线程。
  2. 防止数据库出现雪崩——数据库是并发场景下最薄弱的环节,如果所有请求都直接访问数据库上,将导致数据库压力过大而宕机。所以设置Redis作为数据库的缓存,当有请求的时候先从Redis中进行查询、操作,针对有需要的情况(修改数据后同步数据)再异步访问、操作数据库,从而减少直接操作数据库的次数。

Redis由VMware主持开发,遵守 BSD 协议,使用C语言按照ANSI C标准进行开发的。此处先给出Redis的官网缓存是其最常应用的场景之一。Redis支持多数据库,Redis 默认情况下包含16个数据库,数据库名称是用数字0-15 来依次命名的。 多数据库相互独立,互不干扰。

BSD 协议:
ANSI C标准:

Redis相比于MySQL,可以存很多的数据,比如文档,图片、集合对象等等,而数据库只能存基础类型。

  • Redis提供多种语言的API
  • 不仅支持key-value的数据,同时还提供list,set,zset,hash等数据结构的存储
  • 支持数据的备份
  • 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • Redis的所有操作都是原子性的,要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

Redis能实现高并发、运行快,是因为:

  • Redis是基于内存的高速缓存运行,避免了磁盘I/O等耗时操作。
  • Redis命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗。在Redis 6.0中新增加的多线程也只是针对处理网络请求采用了多线程,而数据的读写命令,仍然是单线程处理的。
  • Redis 使用的是非阻塞 IO,采用了I/O多路复用机制——使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争,大大提升了并发效率。

Redis的组成

Redis实例运行在单独的进程中,【应用系统(Redis客户端)】【通过Redis协议】【和Redis Server 进行交互】。

在Redis 协议之上,客户端和服务端可以实现多种类型的交互模式:

  • 串行请求/响应模式
  • 双工的请求/响应模式(pipeline)
  • 原子化的批量请求/响应模式(事务)
  • 发布/订阅模式
  • 脚本化的批量执行(Lua脚本)

Redis Clinet(应用系统)

Redis Server

Redis协议

Redis的交互协议包含2 个部分:网络模型(数据交互的组织方式)和序列化协议(数据本身如何序列化)。

网络模型

Redis协议位于TCP之上,客户端和【Redis实例】保持双工的连接,如下图所示:
在这里插入图片描述
客户端和服务端交互的内容是序列化后的数据服务器为每个客户端建立与之对应的连接,在应用层维护一系列状态保存在connection 中,connection 间相互无关联。在Redis中,connection 通过redisClient 结构体实现

序列化协议

客户端-服务端之间交互的是序列化后的协议数据。在Redis中,协议数据分为不同的类型,每种类型的数据均以…结束,通过数据的 首字符 来区分类型。具体可详见此博客的“Redis协议”章节里的“序列化协议”

  • 由客户端发送给服务器端的类型为:inline command、由 bulk string 组成的array。
  • 由服务端发送给客户端的类型为:除了 inline command之外的所有类型。并根据客户端命令或交互模式的不同进行确定。
Redis Clinet和Redis Server间的交互模式
串行的请求/响应模式

同一个connection在前一个命令执行完成之后,再发送第二个请求,如下图所示。
在这里插入图片描述
这种方式的弊端在于,每一个请求的发送都取决于前一个响应。Redis在处理单个请求的时间,通常比局域网传输的时间小1个数量级。因此串行模式下,单连接的大部分时间都处于网络等待,没有充分利用服务器的处理能力。

双工的请求/响应模式(pipeline的实现)

因为TCP是全双工的,请求响应【异步?】进行时,也不会引起混淆。此时批量的发送命令至服务器,在批量的获取响应数据,可以极大的提高 单连接 的吞吐量。pipeline 交互模式的穿插请求响应,如下入所示:
在这里插入图片描述
pipeline 的实现取决于客户端

原子化的批量请求/响应模式(事务)

通常在开发时需要将 批量的命令 原子化执行,Redis 中引入了事务模式。

入队/执行 分离的事务原子性
  • 入队阶段:客户端发送请求到服务器,这些命令会被存放在Server端的conn的请求队列中。
  • 执行阶段:发送完一个批次后,Redis 服务器一次执行队列中的所有请求。由于单实例使用单线程处理请求,因此不会存在并发的问题。
    因为 Redis执行器一次执行的粒度是“命令”,所以为了原子地执行批次命令,Redis引入了批量命令执行:EXEC。事务交互模式如下:
    在这里插入图片描述
    由MULTI命令开启事务,随后发送的请求都是暂存在Server conn的队列中,最后通过EXEC批量提交执行;并返回每一个命令执行的结果数组。
事务的一致性
  • 当入队阶段出现语法错误时,不执行EXEC 也不会对数据产生影响;
  • 当EXEC 中有一条command 执行出错时,后续请求继续执行,执行结果会在响应数组中体现,并且由客户端决定如何恢复,Redis 本身不包含回滚机制
  • 一个事务通常需要包含读操作,应用程序需要根据读取的结果决定后续的操作流程。但是在Redis中,事务中的读操作并无意义,如下所示:
发布/订阅模式
脚本化的批量执行(Lua脚本)
  1. 客户端发送eval lua_script_string 2 key1 key2 first second给服务端
  2. 服务端解析lua_script_string 并根据string 本身的内容通过sha1 计算出sha值,存放到redisServer对象的lua_scripts变量中。
  3. 服务端原子化的通过内置Lua环境执行 lua_script_string,脚本可能包含对Redis的方法调用如set 等。
  4. 执行完成之后将lua的结果转换成Redis类型返回给客户端。

Redis的版本选择

打开Redis的官网,在顶部导航栏中选中RESOURCES,在弹出的下拉列表中选中Clients,如下图所示。
在这里插入图片描述
在随后界面的右侧导航栏中,根据自己工程的语言种类选择,比如Java,如下图红框所示。
在这里插入图片描述
随后可以看到Java支持的各版本,如下图所示。
在这里插入图片描述

Jedis

Jedis是一个Java Redis客户端库,它提供了许多简单易用的API来操作Redis。

Redisson

Redisson是一个基于Netty框架的Java Redis客户端库,它提供了分布式锁、分布式集合、分布式对象等功能,支持Redis集群和Sentinel模式。

lettuce

lettuce是一个高级Java Redis客户端库,用于线程安全同步、异步和【响应使用——响应式API】。支持集群(Cluster)、Sentinel模式、Pipelining和编解码器(codecs)以及Redis 6中的新特性

JRedis

Redis的安装

Windows

通过自己本地保留的Redis-x64-3.0.504安装包进行的安装,下方安装方法尚未试通

先按此博客中的方法进行的安装,先给出安装包地址下载地址,在该链接网页中选择.msi文件,如下图红框所示。
在这里插入图片描述
下面自己的方法暂未试通过= =。

下载安装包

先给出官网下载地址,选择哪个安装包根据各自的操作系统而定,这里不再赘述。

安装WSL(Windows Subsystem for Linux)

选择Windows操作系统对应的版本后,网站会跳转到一个新的页面,要求我们安装一个WSL软件——官方解释是因为“Redis在Windows上不受官方支持。但是,您可以按照以下说明在Windows上安装Redis进行开发。要在Windows上安装Redis,首先需要启用WSL2(Windows Linux子系统)。WSL2允许您在Windows上以本机方式运行Linux二进制文件。要使此方法工作,您需要运行Windows 10 2004版及更高版本或Windows 11”。

点击下图红框中的链接开始安装WSL2。此处先给出该WSL安装说明的链接
在这里插入图片描述
如果使用的Windows是早期版本,需要进行手动安装,官方说明the manual install page.如下:
“您必须运行Windows 10 2004版及更高版本(内部版本19041及更高)或Windows 11才能使用以下命令。如果您使用的是早期版本,请参阅手动安装页面。”,如下图所示。此处也给出the manual install page的地址
在这里插入图片描述
点击上图红框链接后,来到下图界面。
在这里插入图片描述
如果安装过程中遇到问题,可以查看上图红框中的链接,此处给出的是中文说明的网址

WSL的简介及用途

WSL(Windows Subsystem for Linux)是一个由微软与Canonical公司合作开发、为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层,属于Windows操作系统中的一个子系统,目标是可以在Windows系统上运行Linux应用程序——使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。WSL为用户提供了一种在Windows环境下运行Linux软件的方法,无需虚拟机或双系统,大大方便了开发人员在Windows系统下的工作。

开发人员可以在Windows机器上同时访问Windows和Linux的功能。Windows Linux子系统(WSL)允许开发人员安装Linux发行版(如Ubuntu、OpenSUSE、Kali、Debian、Arch Linux等),并在Windows上直接使用Linux应用程序、实用程序和Bash命令行工具,无需修改,而无需传统虚拟机或双端口设置的开销。

安装包安装

将压缩包下载完成后,解压到文件夹中,使用命令提示行来进行安装:

  1. 首先切换到解压的文件夹下,切换方法可以参考这篇博客
  2. 输入指令redis-server.exe redis.windows.conf,即可进行安装。

安装成功的标志

安装成功的标志如下图所示。
在这里插入图片描述

安装后的目录文件及其作用

在这里插入图片描述

  • redis-benchmark.exe:官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

语法:redis-benchmark [选项] [选项值]
选项 作用

  • -h 指定服务器主机名
  • -p 指定服务器端口
  • -s 指定服务器socket(套接字)
  • -c 指定并发连接数
  • -n 指定请求数
  • -d 以字节的形式指定SET/GET值的数据大小
  • -k 1=keep alive O=reconnect
  • -r SET/GET/INCR使用随机key,SADD使用随机值
  • -P 通过管道传输请求
  • -q 强制退出redis。仅显示querylsec值
  • -csv 以csv格式输出
  • -1 生成循环,永久执行测试
  • -t 仅运行以逗号分隔的测试命令列表
  • -l ldle模式。仅打开N个idle连接并等待
     
    示例1: 向IP地址为192.168.59.118、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
    redis-benchmark -h 192.168.59.118 -p 6379 -c 100 -n 100000
    示例2:测试存取大小为100字节的数据包的性能。
    redis-benchmark -h 192.168.59.118 -p 6379 -q -d 100
    示例3:测试本机上Redis 服务在进行set与lpush操作时的性能。
  • redis-cli.exe:登录(客户端?)数据库——使用redis-cli连接Redis数据库,默认使用的是序号为0的数据库。

命令格式:select 序号
使用redis-cli连接Redis数据库后,默认使用的是序号为0的数据库
select 1 #切换至序号为1的数据库
select 2 #切换至序号为2的数据库
在这里插入图片描述

  • redis-server.exe:
  • redis文件夹中的内容:是用于可视化操作redis的工具,比如redis安装目录下的\redis\rdm.exe

Linux

详见此博客,待验证。

Redis的基本设置、使用指令

官方文档

此处先给出Redis官方文档

配置/取消配置 成服务——设置/取消 Redis开机自启

redis-server --service-install redis.windows-service.conf --loglevel verbose:通过redis-server --service-install在windows操作系统中注册Redis为服务,需要进入Redis的安装目录——比如D:\redis下——输入此语句

redis-server --service-uninstall:通过redis-server --service-uninstall在windows操作系统中取消注册的服务。

上述指令中的各参数说明

service-install:注册为windows服务
redis.windows-service.conf:配置文件名称
–loglevel verbose:日志级别loglevel 定义为“详细”verbose

以——命令行交互方式(自认)——手动启动/关闭Redis服务

redis-server --service-start:启动
redis-server --service-stop:关闭

在Redis服务启动后,登录Redis服务

redis-cli:在Redis的安装目录下,启动redis-cli.exe文件,如下图所示。请注意,登录Redis服务前需要先启动Redis服务,如下图所示
在这里插入图片描述

使用redis-cli连接Redis数据库后,默认使用的是序号为0的数据库

在这里插入图片描述
上图中指定了ip地址和端口号。

登录Redis服务后,在多数据库中切换数据库。

Redis支持多数据库,Redis 默认情况下包含16个数据库,数据库名称是用数字0-15 来依次命名的。 多数据库相互独立,互不干扰。使用redis-cli连接Redis数据库后,默认使用的是序号为0的数据库
select n:切换至第n个数据库,命令格式为select 10,表示切换至序号为10的数据库。

登录Redis服务后,测试客户端和服务端是否成功连接

PING:在登录Redis服务后,测试客户端和服务端是否成功连接,若连接成功,命令行应显示PONG,如下图所示。
在这里插入图片描述

登录Redis服务后,存放数据set

set: 存放数据,命令格式为 set key value。
在这里插入图片描述

登录Redis服务后,读取数据get

get:获取数据,命令格式为 get key。
在这里插入图片描述

登录Redis服务后,移动当前库中的指定数据至另一数据库

move 当前库中的键名 要移动到的数据库的序号move yxp 1移动当前库中键名为“yxp”的键值对到序号为“1”的数据库中。
在这里插入图片描述

登录Redis服务后,查找指定key对应的value
  • keys *:获取所有的key,命令格式为keys 要查找的键*表示任意位的任意字符。
  • keys n*:获取所有以n开头的、且其后 【任意位的任意字符】 的键对应的值,命令格式为keys 首字母*
  • keys n?:获取所有以n开头、且其后仅有一个任意字符的键对应的值。
  • keys n??获取所有以n开头、且其后仅有两个任意字符的键对应的值。
    在这里插入图片描述
登录Redis服务后,获取以s开头、其后仅包含—位任意数据

keys s?:获取以s开头、其后仅包含—位任意数据,命令格式为keys 首字母?
在这里插入图片描述

登录Redis服务后,判断指定键名的数据是否存在

exists aaa:判断数据“aaa”是否存在——(存在:1,不存在:0)
在这里插入图片描述

登录Redis服务后,删除当前数据库的key

del key:删除当前数据库的key,命令格式为del key——(成功:1,失败:0,比如删除一个已删除的数据)
在这里插入图片描述

登录Redis服务后,获取key对应的value值的类型

type key:获取【该key对应的value值】的类型,命令格式为 type key。
在这里插入图片描述

登录Redis服务后,重命名key名

rename key1 key2:将key1修改为key2。
在这里插入图片描述

登录Redis服务后,将key1修改为key2之前判断key2是否存在,不存在再重命名

renamenx key1 key2:将key1修改为key2之前判断key2是否存在,不存在则重命名。
在这里插入图片描述

登录Redis服务后,查看当前数据库中key的数目

dbsize:查看当前数据库中key的数目。
在这里插入图片描述

登录Redis服务后,选择数据库

select:选择数据库,命令格式为select 数据库的序号(第几个数据库)

在Redis服务启动后,登出Redis服务

服务使用后,输入exit退出即可,如下图所示。
在这里插入图片描述

以——后端观察运行情况、无法交互的形式(自认)——手动启动/关闭Redis服务

安装之后,每次都要先打开一个命令提示符,切换到Redis文件夹下,输入指令redis-server.exe redis.windows.conf来连接远程的服务器,以启动服务,如下图所示。自认,此种形式是后端启动Redis,但并不能交互设置Redis,只能以运维的形式观看Redis的运行状况
在这里插入图片描述

以——后端观察运行情况、无法交互的形式(自认)——启动Redis服务后,使用Redis服务

此种情况因为以——后端观察运行情况、无法交互的形式——启动的Redis服务,所以需要再打开一个新的命令提示符窗口,在切换至Redis的安装根目录后,输入指令redis-cli.exe -h 127.0.0.1 -p 6379,来访问已启动的服务器,成功的话如下图所示。
在这里插入图片描述

录入数据mykey=007:set myKey 007回车
查询数据mykey的值:get myKey回车
tips:在输入set指令后(还没输入完指令),会自动在后面给你弹出一个输入提示。
在这里插入图片描述
录入数据成功,如下所示。
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值