1。总结说起Redis,相信大家都不陌生。做过云平台开发的程序员或多或少都会接触到它。这是一个远程字典服务。从官方的定义来看,Redis是一个开源的、用C语言开发的、遵守BSD协议的key-value存储系统。简单的说,它是一个跨平台的非关系型数据库,支持内存优先存储,提供多种语言的API客户端。Redis是世界著名的,由一个叫SalvatoreSanfilippo的人开发的。此人来自意大利西西里岛。他的网名是antirez。如果您有兴趣,可以访问他的博客antirez.com。不过从2010年开始,Redis的开发由VMware主持,2013年后,Redis的开发由Pivotal赞助。Redis是目前互联网技术中应用最为广泛的缓存中间件之一。随着在新浪微博上的使用,它逐渐在中国流行起来。虽然开源软件市场上有很多优秀的缓存服务中间件,比如memcache,但是和redis相比,redis还是显得尤为突出。优点如下:极高的性能:Redis读取速度可达110,000次/s速度为81,000次/s丰富的数据类型:支持String,Hash,List,Set,SortedSetSupport等数据类型的操作原子操作:Redis的每条命令操作都是原子的,Redis操作之所以是原子的,是因为每条命令的执行都是单线程的,不存在线程竞争问题。存储方式多样化:memecache将所有数据存储在内存中,掉电挂掉;redis支持数据持久化,同时也支持数据备份,即主从模式下的数据备份功能丰富:Redis还支持发布/订阅、通知、key过期等特性。在分布式架构环境中,Redis基本上是不可或缺的缓存中间件,它可以很好的解决服务间的数据共享问题,而且性能不会受到影响。说了这么多,怎么用呢?一起来看看吧!2.服务安装2.1.Windows环境因为redis目前官方只支持LINUX系统,没有Windows版本的软件包,幸好微软团队维护了开源的windows版本。虽然更新不是很及时,但是对于一般的测试来说已经足够了。2.1.1.服务器安装若当前操作系统为Windows系统,请访问以下地址获取相应的下载链接。https://github.com/tporadowski/redis/releases根据系统平台实际情况选择。这里我们下载Redis-x64-xxx.zip压缩包到C盘。解压后,将文件夹重命名为redis。打开文件夹,内容如下:然后,打开一个cmd窗口,使用cd命令将目录切换到C:\redis,输入以下命令:redis-server.exeredis.windows.conf如上界面出现,说明redis服务器已成功启动。2.1.2.客户端测试如果你想用安装包中的客户端脚本来测试服务,你可以这样做。再开一个cmd窗口,不要关闭原来的窗口,否则将无法访问服务器。使用cd命令将目录切换到C:\redis,输入以下命令:redis-cli.exe-h127.0.0.1-p6379连接到服务器后,输入write命令和fetch命令。相关命令如下:#writedatatestsetmyKeyabc#GetdatatestgetmyKey2.2、Linux环境如果当前操作系统为Linux系统,请访问以下官方地址获取最新下载链接。http://redis.io/download2.2.1,服务器安装本教程使用的最新文档版本为6.2.6,下载安装:#wgethttps://download.redis.io/releases/redis-6.2.6.tar.gz#tarxzfredis-6.2.6.tar.gz#cdredis-6.2.6#make执行make命令后,会在redis-6.2.6目录下出现编译好的redis服务程序redis-server。有一个用于测试的客户端程序redis-cli,这两个程序位于安装目录的src目录下。执行以下脚本启动redis服务器。#cdsrc#./redis-server需要注意的是,这种方式使用默认配置启动redis,也可以通过参数告诉redis使用指定的配置文件来启动服务,其中redis.conf是一个默认的配置文件,我们可以根据需要使用自己自定义的配置文件。#cdsrc#./redis-server../redis.conf当出现Readytoacceptconnections时,表示服务启动成功。2.2.2.客户端测试同理,如果要用安装包中的客户端脚本测试服务,新建一个命令窗口,这样操作。#cdsrc#./redis-cliredis>setfoobarOKredis>getfoo"bar"2.2.3。参数配置可能有同学会问,如何把Redis改成后台服务?也就是说即使关闭窗口也可以正常提供服务。答案隐藏在redis.conf配置文件中。打开redis.conf文件,常用配置如下:#bindipbind0.0.0.0#startportport6379#是否运行远程访问protected-modeyes#是否允许后台运行,默认是no,改成yesdaemonizeyes#redis访问密码,根据需要设置,如果要开启,#remove#requirepassfoobared#数据库数databases16修改配置,然后重启服务生效,操作如下:#查找redis相关进程ps-ef|grepredis#killtheprocesskill-9#restartredis./redis-server../redis.conf2.2.3,配置详情redis.conf详细配置项说明如下:配置参数说明bind127.0.0.1如果是内网,可以直接bind127.0.0.1,或者忽略,0.0.0.0是外网端口6379指定Redis监听端口,默认端口为6379protected-modeyes是否运行远程访问,默认是yesdaemonizenoRedis默认不作为守护进程运行,可以通过该配置项修改,使用yes启用守护进程databases16设置数据库数量,默认数据库为0,可以使用SELECT命令指定databaseidrequirepassfoobared在连接上设置Redis连接密码,如果配置了连接密码,客户端连接Redis时需要通过AUTH密码命令提供密码,默认关闭超时。Timeout300是客户端空闲多长时间后关闭连接。如果指定为0,则表示关闭该功能。maxclients128设置同时最大客户端连接数。默认是无限的。连接数是Redis进程可以打开的最大文件描述符数。如果maxclients设置为0,则表示没有限制。当客户端连接数达到限制时,Redis将关闭新连接,并向客户端返回maxnumberofclientsreached错误信息。maxmemory指定Redis的最大内存限制,Redis会将数据加载到内存中,达到最大内存后,Redis会先尝试清除已经过期或即将过期的key。该方法处理后,仍然达到最大内存设置,将无法再进行写操作,但仍然可以进行读操作。Redis新的vm机制会将Key存放在内存中,Value存放在swap区pid文件/var/run/redis.pidRedis作为daemon进程运行时,Redis会将pid写入/var/默认运行/redis。pid文件,可以通过pidfile指定loglevelnotice来指定日志记录级别,Redis一共支持四种级别:debug、verbose、notice、warning,默认是noticelogfilestdout日志记录方式,默认是标准输出,如果配置Redis作为守护进程运行,这里配置日志记录方式为标准输出,那么日志会发送到/dev/nullsave指定多长时间和多少每次有更新操作,数据都会同步到数据文件中,可以结合多个条件,比如save9001,表示900秒内有1次变化。rdbcompressionyes指定数据存储到本地数据库时是否进行压缩。默认是yes,Redis使用LZF压缩,如果想节省CPU时间,可以关闭这个选项,但是会导致数据库文件变大dbfilenamedump.rdb指定本地数据库文件名,默认值就是dump.rdbdir./指定本地数据库存放目录slaveof设置当本机为slave服务时,设置master服务的IP地址和端口,当Redis启动时,会自动从master同步数据masterauth当master服务有密码保护时,slave服务连接master的密码appendonlyno指定每次更新操作后是否进行日志记录.默认情况下,Redis将数据异步写入磁盘。如果未启用,则可能会出现断电导致一段时间内数据丢失的情况。因为redis本身是按照上面的save条件来同步数据文件的,所以有些数据只会在内存中存在一段时间。默认为noappendfilenameappendonly.aof指定更新日志文件名,默认为appendonly.aofappendfsynceverysec指定更新日志条件,有3个可选值:no:表示等待操作系统将数据缓存同步到磁盘(快速地);always:表示每次更新操作后手动调用fsync()将数据写入磁盘(慢,安全);everysec:表示每秒同步一次(妥协,默认值)vm-enabledno指定是否启用虚拟内存机制,默认值为no,简单来说,VM机制将数据存储在页面中,Redis以less交换页面access,即冷数据到磁盘,访问多的page自动从磁盘换出到内存vm-swap-file/tmp/redis.swap虚拟内存文件路径,默认值/tmp/redis.swap,不能被多个Redis实例共享。vm-max-memory0将所有大于vm-max-memory的数据存储到虚拟内存中,不管vm-max-memory设置的有多小,所有的索引数据都存储在内存中(redis索引数据是keys),即也就是说,当vm-max-memory设置为0时,所有值实际上都存在于磁盘上。默认值为0vm-page-size32Redis交换文件分为很多页,一个对象可以存放在多个页上,但是一个页不能被多个对象共享,vm-page-size是根据的大小storeddata设置的话,作者建议如果存储的小对象比较多,页面大小设置为32或者64bytes;如果你存储非常大的对象,你可以使用更大的页面,如果你不确定,使用默认值vm-pages134217728设置交换文件中的页数,因为页表(一种位图表明pageisfreeorused)放在内存中,磁盘上每8页会消耗1byte内存vm-max-threads4设置访问交换文件的线程数不要超过机器的核心数。如果设置为0,所有对swap文件的操作都会序列化,可能会造成比较长的延迟。默认值为4glueoutputbuf是。响应客户端时,是否将较小的包合并成一个包发送。默认开启activerehashingyes指定是否开启resethashing。include/path/to/local.conf指定包含其他配置文件,可以在同一主机上的多个Redis实例之间使用同一个配置文件,并且每个实例都有自己特定的配置文件2.3、Mac环境如果当前操作系统是Mac系统,同样访问官方地址http://redis.io/download下载最新的安装包。然后在本地解压,后面的操作和linux一样,这里就不多介绍了!3、命令行客户端如果要对redis服务执行命令,就需要redis客户端,redis客户端已经在我们下载的redis安装包中。3.1.连接redisRedis客户端的基本语法为$./redis-cli例如连接本地redis服务器(前提是已经成功启动)。$./redis-cliredis127.0.0.1:6379>redis127.0.0.1:6379>PINGPONG如果redis设置了密码,通过AUTH命令输入密码进入,如下:$./redis-cliredis127.0.0.1:6379>AUTH"password"redis127.0.0.1:6379>PINGPONG如果我们想连接到远程redis服务器,我们可以使用下面的语法。$./redis-cli-hhost-pport-apassword例如连接192.168.121.1,命令如下:$redis-cli-h192.168.121.1-p6379-a"mypass"redis192.168.121.1:6379>redis192.168.121.1:6379>PINGPONG默认连接的数据库是0,如果我们要切换数据库,可以通过以下方法切换!#使用1号数据库redis192.168.121.1:6379>SELECT1如果要关闭当前连接,可以通过以下方式进行!redis192.168.121.1:6379>QUIT3.2。常用的CRUD操作以字符串为例。增删改查操作如下!1、设置指定键的值,设置操作成功完成后SET返回OK。redis127.0.0.1:6379>设置mykeyredisOK2。查询指定键的值。操作完成后,如果key不存在,则返回(nil)redis127.0.0.1:6379>GETmykey"redis"3。检查指定key的值是否存在,当操作完成,如果key存在,则返回1,否则返回0redis127.0.0.1:6379>EXISTSmykey(integer)14.删除指定key的值,并操作完成时返回删除键的数量。redis127.0.0.1:6379>DELmykey(integer)15.设置key的过期时间,单位秒,当操作完成时,成功返回1,否则返回0。#设置mykey在60秒后过期redis127.0.0.1:6379>EXPIREmykey60(integer)16.获取key剩余的过期时间,单位秒。操作完成后,如果key不存在,返回-2;当key存在但未设置剩余生存期时,返回-1;否则,以秒为单位返回密钥的剩余生命周期。redis127.0.0.1:6379>TTLmykey(integer)607.通过incr命令实现指定key的原子自增操作。每次执行Incr命令时,密钥中存储的数字值都会增加1。当操作完成后,如果key不存在,则先将key的值初始化为0,然后加1,返回最终结果。redis127.0.0.1:6379>INCRmykey(integer)1当然你也可以在setup阶段指定一个初始值编号,比如设置mykey的自增初始值为10。redis127.0.0.1:6379>INCRmykey10(整数)113.3。事务操作Redis也支持事务操作。Redis事务可以同时执行多个命令,有以下三个重要保证:1.批量操作在发送EXEC命令时,在放入队列缓存之前2.收到EXEC命令后,进入事务执行。事务中的任何命令执行失败,其余命令仍然执行。3、在事务执行过程中,其他客户端提交的命令请求不会被插入到事务执行中一个命令序列中的事务从开始到执行会经历以下三个阶段:1.启动事务2.将命令入队列3.执行事务以某个事务操作为例,我们先用MULTI启动一个事务,然后将多个命令入队到事务中,最后通过EXEC命令触发事务,执行所有事务中的命令放在一起,流程如下:redis127.0.0.1:6379>multiOKredis127.0.0.1:6379>setaaaaQUEUEDredis127.0.0.1:6379>setbbbbQUEUEDredis127.0.0.1:6379>setccccQUEUEDredis127.0.0.1:6379>exec1)OK2)OK3)OK特别注意的是:单个Redis命令的执行是原子的,但是Redis并没有在事务机制中加入任何原子性,所以Redistra的执行nsactions不是原子的。事务可以理解为封装好的批量执行脚本,但是批量指令不是原子操作,中间某条指令失败不会导致前面指令的回滚,也不会导致后面的指令不执行。也就是说如果setbbbb失败,setaaaa成功后不会回滚,setcccc会继续执行。当setbbbb失败时,事务不会回滚。但是如果执行过程中命令不存在或者命令参数不正确,此时redis事务执行会失败,并返回错误信息给客户端;如果命令逻辑执行失败,则无法感知redis事务,会继续往下执行。3.4.Lua脚本操作上面我们也介绍过,Redis事务的执行并不能完全保证原子性,那么如何实现一批命令操作的原子操作呢?Redis支持通过Lua脚本对一批命令进行原子操作,执行脚本的常用命令是EVAL。Eval命令的基本语法如下:redis127.0.0.1:6379>EVALscriptnumkeyskey[key...]arg[arg...]比如一个简单的赋值操作如下:redis127.0.0.1:6379>EVAL"return{KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"2key1key2firstsecond1)"key1"2)"key2"3)"first"4)"second”,例如我们指定的key设置指定的value值,并设置过期时间为60秒,实现原子操作。如果运行成功则返回1,否则返回0。内容如下:redis127.0.0.1:6379>EVAL"ifredis.call('setnx',KEYS[1],ARGV[1])==1thenreturnredis.call('expire',KEYS[1],ARGV[2])elsereturn0end"1key1hello60(integer)1获取指定key的值,存在则删除key,实现原子操作,操作成功返回1,否则返回0,内容如下:redis127.0.0.1:6379>EVAL"ifredis.call('get',KEYS[1])==ARGV[1]thenreturnredis.call('del',KEYS[1])elsereturn0end"1key1hello(integer)上面1是lua脚本,实现了常见的分布式加锁和解锁原子操作。4、可视化客户端对于开发者来说,使用客户端命令操作redis是非常不方便的,于是诞生了很多基于redis的可视化客户端。今天我们将了解一些免费且易于使用的客户端。工具。4.1.RedisDesktopManagerRedisDesktopManager应该是现在使用最广泛的可视化工具了。它已经存在了很长时间,并经历了数次迭代。基于Qt5开发,支持跨平台支持。以前是免费的,现在变成收费工具了。试用期可以持续半个月。最新版本访问地址如下!https://github.com/uglide/RedisDesktopManager/releases评价:界面看起来比较简洁,该有的功能都有,功能很齐全。键显示可以支持以冒号分隔的键名称空间。免费版下载地址如下!百度网盘:https://pan.baidu.com/s/1rMWR-OQnfsxJ3_HSqEE8xw提取码:tebu4.2,medis2medis2是mac系统中使用频率最高的redis可视化工具,布局简洁,界面美观,密钥是免费的,最新版本的访问地址如下!https://getmedis.com/评价:软件外观不错,功能满足日常使用需求。钥匙有颜色鲜艳的图标。查找密钥非常方便。您可以通过模糊的方式搜索匹配的键。扫描无明显滞后,搜索体验还是比较不错的,但对操作系统要求很高,需要安装MacOS11.0以上版本。如果您当前的操作系统低于上述版本,您只能升级或更换其他软件!4.3.AnotherRedisDesktopManagerAnotherRedisDesktopManager是一款比较稳定简单的redisUI工具,国人开发,支持跨平台,完全免费,最新版获取地址如下!https://github.com/qishibo/AnotherRedisDesktopManager评价:有基本功能,监控统计,支持深色主题,支持添加集群。这是一个非常好的可视化客户端。4.4.RedisInsightRedisInsight是目前官方推荐的redis可视化工具。功能丰富,支持跨平台,完全免费。最新版本访问地址如下!https://redis.com/redis-enterprise/redis-insight/Evaluation:与其他可视化工具相比,RedisInsight实现了更强大的功能,执行效率的变化,以及更好的通用性。除了支持CRUD基本功能外,还支持支持内存分析、指标监控、发布/订阅、慢命令日志查询等。五、总结本文主要针对redis的一些基础知识,做了一个简单的总结,包括软件安装、基本命令操作、可视化客户端介绍。