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

📅 2026/7/22 15:39:59
分布式数据库Redis的简介、安装与设置使用指令
分布式数据库Redis的简介、安装与设置使用指令Redis的简介Redis的组成Redis Clinet应用系统Redis ServerRedis协议网络模型序列化协议Redis Clinet和Redis Server间的交互模式串行的请求/响应模式双工的请求/响应模式pipeline的实现原子化的批量请求/响应模式事务入队/执行 分离的事务原子性事务的一致性发布/订阅模式脚本化的批量执行Lua脚本Redis的应用Redis的版本选择JedisRedissonlettuceJRedisRedis的安装Windows下载安装包安装WSLWindows Subsystem for LinuxWSL的简介及用途安装包安装安装成功的标志安装后的目录文件及其作用LinuxRedis的基本设置、使用指令官方文档配置/取消配置 成服务——设置/取消 Redis开机自启上述指令中的各参数说明以——命令行交互方式自认——手动启动/关闭Redis服务未登录Redis服务、直接测试是否能够访问Redis服务在Redis服务启动后登录Redis服务登录Redis服务后在多数据库中切换数据库。登录Redis服务后测试客户端和服务端是否成功连接登录Redis服务后获取key的列表登录Redis服务后判断指定键名的表key是否存在登录Redis服务后随即返回一个 key登录Redis服务后根据 key 获取该键所存储的 redis 数据类型登录Redis服务后存放数据set登录Redis服务后读取数据get登录Redis服务后删除 key登录Redis服务后重命名key登录Redis服务后将当前库中的指定数据 key 移动到指定的数据库中登录Redis服务后查找指定key对应的value登录Redis服务后获取以s开头、其后仅包含—位任意数据登录Redis服务后删除当前数据库的key登录Redis服务后获取key对应的value值的类型登录Redis服务后重命名key名登录Redis服务后将key1修改为key2之前判断key2是否存在不存在再重命名登录Redis服务后查看当前数据库中key的数目登录Redis服务后选择数据库在Redis服务启动后登出Redis服务以——后端观察运行情况、无法交互的形式自认——手动启动/关闭Redis服务以——后端观察运行情况、无法交互的形式自认——启动Redis服务后使用Redis服务Redis的简介全称Remote Dictionary Server即远程字典服务。Redis是一款基于内存的高速缓存运行的高性能键值存储系统通过Key-Value来存储数据的开源的强类型数据库不同的数据结构String, Hash, List, Set, ZSet等有各自专属的命令数据库可以用作数据库、缓存和消息中间件。本文中的一些名词解释待从此博客中找出对应并补入。Redis 内置了复制replicationLUA 脚本Lua scriptingLRU 驱动事件LRU eviction事务transactions和不同级别的 磁盘持久化persistenceRedis 支持多种类型的数据结构如 字符串strings散列hashes 列表lists 集合sets 有序集合sorted sets 范围查询 bitmaps hyperloglogs 和 地理空间geospatial 索引半径查询Redis 通过 哨兵Sentinel 和自动分区Cluster提供高可用性high availability。Redis由VMware主持开发遵守 BSD 协议使用C语言按照ANSI C标准进行开发的。此处先给出Redis的官网缓存是其最常应用的场景之一。Redis支持多数据库Redis 默认情况下包含16个数据库数据库名称是用数字0-15 来依次命名的。 多数据库相互独立互不干扰。BSD 协议ANSI C标准Redis相比于MySQL可以存很多的数据比如文档图片、集合对象等等而数据库只能存基础类型。Redis提供多种语言的API不仅支持key-value的数据同时还提供listsetzsethash等数据结构的存储支持数据的备份支持数据的持久化可以将内存中的数据保存在磁盘中重启的时候可以再次加载进行使用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 ServerRedis协议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脚本客户端发送eval lua_script_string 2 key1 key2 first second给服务端服务端解析lua_script_string 并根据string 本身的内容通过sha1 计算出sha值存放到redisServer对象的lua_scripts变量中。服务端原子化的通过内置Lua环境执行 lua_script_string脚本可能包含对Redis的方法调用如set 等。执行完成之后将lua的结果转换成Redis类型返回给客户端。Redis的应用Redis在【开发项目】中主要用来做缓存——Redis缓存的作用是把数据库中经常访问的数据提取到Redis①缓存查询结果用户查询、添加、删除的时候先去Redis中进行操作然后通过线程对数据库执行异步操作以保持Redis与数据库中的一致。没有查到再去数据库执行sql语句查询并同时把查询到的数据同步到Redis里面Redis只做读操作②缓存热门数据将经常使用且不经常变动的数据存储到Redis中以减轻MySQL数据库的负载。例如用户信息、配置信息等。③分布式锁通过Redis的分布式锁功能保证在分布式系统中的并发操作的一致性。例如在订单系统中可以使用Redis的分布式锁来保证同一时间只有一个线程可以修改订单状态。④消息队列使用Redis的发布/订阅功能将MySQL中的数据变更操作发布到Redis的消息队列中然后订阅者可以根据消息队列中的数据进行相应的处理。Redis是内存数据库而MySQL是磁盘数据库它们在数据存储和读取速度上存在差异。因此在使用Redis和MySQL配合使用时需要根据具体业务需求和数据特点来选择合适的方式。通过【Redis数据库MySQL、Oracle】的好处是提速 数据库操作——因为原本【操作数据库】变为了【操作缓存】并且数据库的操作变为了异步从而不再影响主线程。防止数据库出现雪崩——数据库是并发场景下最薄弱的环节如果所有请求都直接去访问数据库将导致数据库压力过大而宕机。所以设置Redis作为数据库的缓存当有请求的时候先从Redis中进行查询、操作Redis没有查到、再从MySQL中进行查询并将查询结果更新到Redis中、以备下次同样的查询再次查询MySQL数据库。针对有需要的情况修改数据后同步数据再异步访问、操作数据库从而减少直接操作数据库的次数。Redis的版本选择打开Redis的官网在顶部导航栏中选中RESOURCES在弹出的下拉列表中选中Clients如下图所示。在随后界面的右侧导航栏中根据自己工程的语言种类选择比如Java如下图红框所示。随后可以看到Java支持的各版本如下图所示。JedisJedis是一个Java Redis客户端库它提供了许多简单易用的API来操作Redis。RedissonRedisson是一个基于Netty框架的Java Redis客户端库它提供了分布式锁、分布式集合、分布式对象等功能支持Redis集群和Sentinel模式。lettucelettuce是一个高级Java Redis客户端库用于线程安全同步、异步和【响应使用——响应式API】。支持集群Cluster、Sentinel模式、Pipelining和编解码器codecs以及Redis 6中的新特性JRedisRedis的安装Windows通过自己本地保留的Redis-x64-3.0.504安装包进行的安装下方安装方法尚未试通。先按此博客中的方法进行的安装先给出安装包地址下载地址在该链接网页中选择.msi文件如下图红框所示。下面自己的方法暂未试通过 。下载安装包先给出官网下载地址选择哪个安装包根据各自的操作系统而定这里不再赘述。安装WSLWindows Subsystem for Linux选择Windows操作系统对应的版本后网站会跳转到一个新的页面要求我们安装一个WSL软件——官方解释是因为“Redis在Windows上不受官方支持。但是您可以按照以下说明在Windows上安装Redis进行开发。要在Windows上安装Redis首先需要启用WSL2Windows 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的简介及用途WSLWindows 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命令行工具无需修改而无需传统虚拟机或双端口设置的开销。安装包安装将压缩包下载完成后解压到文件夹中使用命令提示行来进行安装首先切换到解压的文件夹下切换方法可以参考这篇博客。输入指令redis-server.exe redis.windows.conf即可进行安装。安装成功的标志安装成功的标志如下图所示。安装后的目录文件及其作用redis-benchmark.exe官方自带的 Redis 性能测试工具可以有效的测试 Redis 服务的性能。语法redis-benchmark [选项] [选项值]选项 作用-h 指定服务器主机名-p 指定服务器端口-s 指定服务器socket(套接字)-c 指定并发连接数-n 指定请求数-d 以字节的形式指定SET/GET值的数据大小-k 1keep alive Oreconnect-r SET/GET/INCR使用随机keySADD使用随机值-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.exeredis文件夹中的内容是用于可视化操作redis的工具比如redis安装目录下的\redis\rdm.exe。Linux详见此博客待验证。Redis的基本设置、使用指令Redis 是强类型的数据库不同的数据结构String, Hash, List, Set, ZSet等有各自专属的命令例如你不能对一个存储为 List 的键使用 GET 命令也不能对一个存储为 String 的键使用 LPUSH 命令。键的实际类型错误的命令操作正确的命令操作‌String‌ (字符串)LPUSH mykey value HGET mykey fieldSET mykey value GET mykey‌Hash‌ (哈希)GET mykey LPUSH mykey valueHGET mykey field HSET mykey field value‌List‌ (列表)GET mykey SADD mykey memberLRANGE mykey 0 -1 LPUSH/RPUSH mykey value‌Set‌ (集合)GET mykey HSET mykey field valueSMEMBERS mykey SADD mykey member官方文档此处先给出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 -h 127.0.0.1 -p 6379 pingIP地址和端口需要更换为测试的Redis服务端地址。在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服务后获取key的列表KEYS pattern 通配符有 *[] 和转义 \。登录Redis服务后判断指定键名的表key是否存在EXISTS key存在返回 1不存在返回 0。登录Redis服务后随即返回一个 keyrandomkey随即返回一个 key。登录Redis服务后根据 key 获取该键所存储的 redis 数据类型TYPE key返回的是 string、list、hash、set、zset。登录Redis服务后存放数据setset key value 存放key数据、值为value。登录Redis服务后读取数据getget获取数据命令格式为 get key。散列类型hget 表名 key比如hget fileTableForQualityStandard 0。登录Redis服务后删除 keyDEL keyHDEL key field [field ...]删除散列中的指定多条数据成功返回1比如删除不存在的数据失败返回0。登录Redis服务后重命名keyrename oldkey newkey对 key 重命名如果 newkey 存在则覆盖。renamenx oldkey newkey对 key 重命名如果 newkey 存在则不覆盖。登录Redis服务后将当前库中的指定数据 key 移动到指定的数据库中move key db-index将 key 移动到指定的数据库中如果 key 不存在或者已经在该数据库中则返回 0成功则返回 1。move 当前库中的键名 要移动到的数据库的序号move yxp 1移动当前库中键名为“yxp”的键值对到序号为“1”的数据库中。登录Redis服务后查找指定key对应的valuekeys *获取所有的key命令格式为keys 要查找的键*表示任意位的任意字符。keys n*获取所有以n开头的、且其后 【任意位的任意字符】 的键对应的值命令格式为keys 首字母*。keys n?获取所有以n开头、且其后仅有一个任意字符的键对应的值。keys n??获取所有以n开头、且其后仅有两个任意字符的键对应的值。登录Redis服务后获取以s开头、其后仅包含—位任意数据keys s?获取以s开头、其后仅包含—位任意数据命令格式为keys 首字母?登录Redis服务后删除当前数据库的keydel 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来访问已启动的服务器成功的话如下图所示。录入数据mykey007set myKey 007回车查询数据mykey的值get myKey回车tips在输入set指令后还没输入完指令会自动在后面给你弹出一个输入提示。录入数据成功如下所示。