竹笋

首页 » 问答 » 常识 » Linux运维学习什么是RedisR
TUhjnbcbe - 2024/3/1 17:58:00


  什么是Redis


  Redis的简介


  Redis的特点


  Redis不同处


  Redis的部署


  Redis的配置


  什么是Redis


  REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统


  Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API


  它通常被称为数据结构服务器,因为值(value)可以是字符串(String),哈希(Map),列表(list),集合(sets)和有序集合(sortedsets)等类型


  Redis简介


  Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库


  Redis与其他key-value缓存产品有以下三个特点:


  ①Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。


  ②Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。


  ③Redis支持数据的备份,即master-slave模式的数据备份。


  Redis的特点


  高性能:Redis将所有数据集存储在内存中,可以在入门级Linux机器中每秒写(SET)11万次,读(GET)8.1万次


  持久化:当所有数据都存在于内存中时,可以根据自上次保存以来经过的时间和/或更新次数,使用灵活的策略将更改异步保存在磁盘上


  数据结构:Redis支持各种类型的数据结构,例如字符串、散列、集合、列表、带有范围查询的有序集、位图、超级日志和带有半径查询的地理空间索引


  原子操作:处理不同数据类型的Redis操作是原子操作,因此可以安全地SET或INCR键,添加和删除集合中的元素等


  支持的语言:Redis支持许多语言,如C、C++、Erlang、Go、Haskell、Java、JavaScript(Node.js)、Lua、Objective-C、Perl、PHP、Python、R、Ruby、Rust、Scala、Smalltalk等


  主/从复制:Redis遵循非常简单快速的主/从复制。配置文件中只需要一行来设置它,而Slave在AmazonEC2实例上完成10MMkey集的初始同步只需要21秒


  分片:Redis支持分片。与其他键值存储一样,跨多个Redis实例分发数据集非常容易


  可移植:Redis是用C编写的,适用于大多数POSIX系统,如Linux、BSD、MacOSX、Solaris等


  Redis与其他key-value存储有什么不同?


  ①Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径


  ②Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象


  ③Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存


  ④在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情


  ⑤在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问


  Redis部署


  

下载Redis软件包


  
  GitHub下载
  

解压软件包

tarxfredis-6.2.2.tar.gz-C/oldboyedu/softwares/ln-sv/oldboyedu/softwares/redis-6.2.2/oldboyedu/softwares/redis


  

编译Redis源码

#安装依赖包yum-yinstallgccautomakeautoconflibtoolmake#编译Redis源码cd/oldboyedu/softwares/redismakemakeinstall


  

配置环境变量并测试

#为Redis环境单独配置环境变量#vim/etc/profile.d/redis.sh#!/bin/bashexportPATH=/oldboyedu/softwares/redis/src:$PATH#使得上一步配置的Redis环境变量生效#source/etc/profile.d/redis.sh#redis-cli--version#如果输出该命令有提示信息说明配置生效!


  

启动Redis并进行连接测试


  后台运行Redis服务

#ss-lntStateRecv-QSend-QLocalAddress:PortPeerAddress:PortLISTEN*:22*:*LISTEN[::]:22[::]:*#redis-server


  连接Redis数据库

默认以字节的形式显示中文:#redis-cliSETname"oldboyedu"OKGETname"oldboyedu"SETmyname"老男孩"OKGETmyname"\xe8\x80\x81\xe7\x94\xb7\xe5\xad\xa9"QUIT我们可以直接让redis-cli命令行工具支持中文显示,只需启动时添加"--raw"选项即可,如下所示#redis-cli--rawSETname"oldboyedu"OKGETname"oldboyedu"SETmyname"老男孩"OKGETmyname老男孩我们也可以像mysql命令行工具一样,可以直接在命令行操作redis服务,而无需进入到交互式字符界面#redis-cligetname"oldboyedu"#redis-cligetmyname"\xe8\x80\x81\xe7\x94\xb7\xe5\xad\xa9"#redis-cli--rawgetmyname老男孩


  关闭Redis

进入redis-cli交互式字符界面关闭Redis#redis-cliSHUTDOWNquit直接在Linux界面关闭Redis#redis-clishutdown


  自定义Redis的配置文件


  

创建存放配置文件,日志文件和数据目录

#创建专用于存放redis服务的配置文件目录mkdir-pv/oldboyedu/softwares/redis/conf#创建专用于存放redis服务的日志文件目录mkdir-pv/oldboyedu/logs/redis#创建专用于存放redis服务的数据目录mkdir-pv/oldboyedu/data/redis


  

创建配置文件

install-d/oldboyedu/softwares/redis/confcat/oldboyedu/softwares/redis/conf/redis.confEOFdaemonizeyesportlogfile/oldboyedu/logs/redis/redis.logdir/oldboyedu/data/redisdbfilenameoldboyedu_linuxEOF


  配置文件参数说明:


  

重启Redis服务

#关闭redis服务redis-clishutdown#启动redis服务时指定配置文件redis-server/oldboyedu/softwares/redis/conf/redis.conf


  

验证服务是否正常运行

#redis-cligetname(nil)setname"oldboyedu"OKgetname"oldboyedu"quit


  

基于配置文件设置Redis安全相关参数


  1.Redis默认开启了安全保护模式,只允许本地回环地址登录并访问数据库。即--protected-modeyes

基于本地连接Redis服务,是可以正常读写入数据的#redis-cli.0.0.1:基于"IP:Port"方式连接Redis服务,发现无法从Redis获取数据#redis-cli-h10.0.0.-p


  温馨提示:


  ①上图的报错中给了4个解决方案,其中前3个解决方案都是设置--protected-modeno。但前3种种解决方案用于测试还是可以的,但是在生产环境中使用时并不建议使用,因为其治标不治本。我们推荐大家使用第4种方法。


  ②其中上述的第四种方法说我们可以绑定地址(bindaddress),或者设置验证密码(authenticationpassword)


  2.配置Redis的安全参数

#cat/oldboyedu/softwares/redis/conf/redis.confEOFdaemonizeyesportlogfile/oldboyedu/logs/redis/redis.logdir/oldboyedu/data/redisdbfilenamemydump.rdbbind10.0.0..0.0.1requirepassoldboyeduEOF


  配置文件参数说明:


  3.重启Redis服务使得配置生效

redis-clishutdownredis-server/oldboyedu/softwares/redis/conf/redis.conf


  4.验证Redis安全设置是否生效

#redis-cli-h10.0.0.-aoldboyedugetname(nil)setname"oldboyedu"OKgetname"oldboyedu"redis-clishutdownredis-s


  在线查看和修改Redis的配置


  

在线查看配置参数


  查看Redis所有的配置信息


  我们在交互式命令行输入"CONFIGGET*",就可以查看Redis所有的配置信息,如下所示:

#redis-cli-h10.0.0.-aoldboyedu#表示获取所有的配置参数CONFIGGET*


  模糊查询参数,例如:查看以"re","re*"的配置信息


  我们在交互式命令行输入"CONFIGGETre*",就可以查看Redis所有的配置信息中以"re*"开头的配置,如下所示:

CONFIGGETre*


  查看具体参数信息,即只获取Redis某一个特定的配置


  我们在交互式命令行使用"CONFIGGET"命令获取某一个特定的参数值,就可以查看Redis对应的配置信息,如下所示:

CONFIGGETrequirepass


  如上所述,当我们记得配置的名称后,可以直接查询具体的参数信息哟


  

在线设置配置参数


  临时设置参数不保存


  如下所示,我们可以通过"CONFIGSET"命令来临时修改参数值

#查看Redis默认使用的内存为"0",这意味着不对Redis内存使用做限制,生产环境中建议设置为服务器的70%的资源CONFIGGETmaxmemory1)"maxmemory"2)"0"#很明显,我这里设置的是28G的内存给Redis使用CONFIGSETmaxmemoryMCONFIGGETmaxmemory1)"maxmemory"2)"000000"quit#我们对Redis服务进行重启#redis-cli-h10.0.0.-aoldboyedushutdown#redis-server/oldboyedu/softwares/redis/conf/redis.conf#发现配置还是使用配置文件的信息,上面的修改只是在内存中发生的#redis-cli-aoldboyedu-h10.0.0.CONFIGGETmaxmemory1)"maxmemory"2)"0"


  温馨提示:


  使用"CONFIGSET"命令可以临时修改Redis的配置,但此次修改的配置并不会被写入到配置文件,因此我们说这样修改为临时修改,下次重启后是不生效的


  临时设置参数并保存


  查看Redis的配置文件

#cat/oldboyedu/softwares/redis/conf/redis.confdaemonizeyesportlogfile/oldboyedu/logs/redis/redis.logdir/oldboyedu/data/redisdbfilenamemydump.rdbbind10.0.0..0.0.1requirepassoldboyedu


  临时设置参数并保存

#redis-cli-aoldboyedu-h10.0.0.CONFIGGETmaxmemory1)"maxmemory"2)"0"CONFIGSETmaxmemoryMOKCONFIGGETmaxmemory1)"maxmemory"2)"000000"CONFIGREWRITEQUIT


  再次查看配置文件,不难发现在配置文件末尾多了2行配置


  临时设置参数并保存

#cat/oldboyedu/softwares/redis/conf/redis.confdaemonizeyesportlogfile"/oldboyedu/logs/redis/redis.log"dir"/oldboyedu/data/redis"dbfilename"mydump.rdb"bind..1.201.0.0.1requirepass"oldboyedu"#GeneratedbyCONFIGREWRITEmaxmemorykb


  重启Redis服务,发现上一次修改生效了

#redis-cli-aoldboyedushutdown#redis-server/oldboyedu/softwares/redis/conf/redis.conf#redis-cli-aoldboyedu-h10.0.0.-pCONFIGGETmaxmemory1)"maxmemory"2)"000000"


  Redis持久化


  

Redis持久化概述


  指的是将内存数据保存到磁盘。Redis给我们提供了两种持久化的功能,分比为RDB和AOF:


  1、RDB持久化:可以在执行的时间间隔内生成数据集的时间点快照(point-in-timesnapshot),新快照会覆盖老快照


  优点:速度快,适合于用于做备份,主从复制也是基于RDB持久化功能实现的


  缺点:会有数据丢失


  2、AOF持久化:记录服务执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集


  AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾(append-onlylogfile)


  优点:可以最大程度保证数据不丢失。其类似于MySQL的binlog日志功能


  缺点:日志记录量级比较大,持久化时间较长


  

配置RDB持久化功能


  1.手动触发持久化


  如下所示的配置文件中,并不会自动进行持久化操作,但我们可以通过"SAVE"命令来手动触发持久化

#cat/oldboyedu/softwares/redis/conf/redis.confdaemonizeyesportlogfile"/oldboyedu/logs/redis/redis.log"dir"/oldboyedu/data/redis"dbfilename"mydump.rdb"bind..1.201.0.0.1requirepass"oldboyedu"#GeneratedbyCONFIGREWRITEmaxmemorykb


  当修改数据后,并不会立即发生持久化

#ll/oldboyedu/data/redis/总用量0#redis-cli-aoldboyedu-h10.0.0.-pSETname"oldboyedu"OKGETname"oldboyedu"QUIT#ll/oldboyedu/data/redis/总用量0


  但是我们可以通过"SAVE"命令来手动触发持久化

#redis-cli-aoldboyedu-h10.0.0.-pSETname"oldboyedu"OK#调用该命令后,会记录将内存中的数据同步到磁盘上SAVEOKQUIT#ll/oldboyedu/data/redis/总用量4-rw-r--r--1rootroot月:59mydump.rdb


  我们也可以不进入redis-cli命令的交互式字符界面就能进行持久化操作

#ll/oldboyedu/data/redis/总用量0#redis-cli-aoldboyedu-h10.0.0.-pOK#直接进行持久化#redis-cli-aoldboyedusaveOK#ll/oldboyedu/data/redis/总用量4-rw-r--r--1rootroot月:01mydump.rdb#redi


  

配置RDB自动持久化相关参数


  配置RDB持久化

#tail-6/oldboyedu/softwares/redis/conf/redis.conf#RDB持久化配置dir"/oldboyedu/data/redis"dbfilename"mydump.rdb"savesavesave


  参数说明:


  温馨提示:


  上述的save参数是用于定义自动持久化的参数,上面我们定义了3种策略,但凡满足其中任意一种策略均能实现自动持久化


  测试可以使用“kill-9”指令杀死redis-server进程,如果使用官方提供的shutdown脚本会在关掉redis实例之前可能会自动进行一次持久化哟


  

配置AOF持久化功能


  如下所示,配置AOF持久化通常只需指定两个参数即可

#tail-3/oldboyedu/softwares/redis/conf/redis.conf#配置AOF持久化appendonlyyesappendfsynceverysec


  参数说明:

文章来源于:

1
查看完整版本: Linux运维学习什么是RedisR