redis基本安装与使用

上一篇文章我写了关于安装subversion的相关配置方法,不过从这里开始我打算画风再次转变,开始进行写redis的一切。不过这一篇博客主要写redis的安装与基本使用。

什么是redis?

Redis 于2009年发布,是一个开源的,存储在内存中的数据结构KV(键值)级存储系统(也可以同步到磁盘上进行持久化),它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如:字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询。更多关于redis请看redis官网的手册!

redis与membercache有什么不同?

membercache和redis有一个相同的功能,那就是数据写入读取都在内存中完成,但是现在企业更倾向于使用redis!

虽然redis与membercache都有使用内存来存储数据和提供数据的功能,但是redis有数据持久化的功能而membercache没有,也就是说redis在被存储数据到内存时也会定期将数据同步到磁盘上面,保证存入内存的数据大部分得以保留。一旦出现最恶劣的情况;比如:断电(UPS电池耗尽)、人为清理内存等情况都会保证大部分数据存在,关于redis的数据持久化打算在下面再说。

虽然membercache运行的速度与效率比redis高出一截,但是membercache只是一个缓存并不能当作存储来使用。唯一的功能只是给后端服务器、数据库(一些非隐私数据)作为缓存来减少服务器压力。但是由于membercache的先天缺陷(数据无法持久化)导致一旦过度依赖membercache的用户一旦发生危险情况将会导致“雪崩效应”,所有的请求membercache缓存消失压至后端服务器上后果可想而知!

如何安装redis?

安装redis其实非常,一共有两种安装方式:第一种就是使用yum、apt-get的包管理器安装,那么第二种还是编译安装。其实我更推荐的就是使用编译安装,因为redis的编译安装实在是太简单了!先贴出官网下载的界面,点这里。本文也是使用编译安装的方式来安装redis的:

#先下载redis
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
#安装依赖包,redis官方已经帮我们弄好了jemalloc所以无需画蛇添足使用包管理器再安装
yum install -y gcc
#解压并添加软链接
tar -xf redis-4.0.1.tar.gz -C /usr/local/
cd /usr/local/
ln -s redis-4.0.1/ redis
#编译与安装
cd redis
make
#添加环境变量
vim /etc/profile.d/redis.sh
export PATH=/usr/local/redis/src:$PATH
source /etc/profile.d/redis.sh

如果中间没有报错,那就说明已经安装成功了!

关于redis的配置文件redis.conf说明:

在启动redis之前还得先看看配置文件才行,光不能使用默认配置来满足要求吧?并且里面还能配置关于持久化的相关信息。使用vim打开配置文件后来看第一个参数:

  • bind: 监听地址,默认是127.0.0.1而0.0.0.0代表监听所有地址,根据需要进行设定此配置段不支持网段。
  • protected-mode: 保护模式,默认为yes开启我感觉保护模式应该是新版本新添加的选项。这个模式有点奇怪其实主要的作用就是不让外部主机没有密码认证的情况下访问,不过如果使用bind配置参数指定好监听地址也就没啥问题了。如果想要监听所有地址最好添加redis访问密码!
  • port: 顾名思义,监听端口
  • daemonize: 是否以守护进程方式运行,默认竟然为no
  • pidfile: linux pid文件存放位置
  • loglevel: 日志级别,默认为notice一共有四个级别可以选择,详细看配置文件的解释。
  • logfile “/usr/local/redis/logs/redis.log”  : 日志防止位置,我这边填写的是自己的举例路径,如果想要按照我的来填写,那么请创建好目录和文件。
  • databases : redis数据库最大限制,从0算起默认为16,到底几个自己算吧!
  • tcp-backlog: tcp连接请求队列大小,默认值为511,不过这个得看版本的内核参数somaxconn如果内核参数值小于tcp-backlog那就会在日志中出现警告信息。
  • maxclients: 最大客户端并发数,默认为10000这个根据需要进行调节。
如何启动、停止redis:

启动redis非常的简单,如果是包管理器安装的话直接使用systemctl | service命令启动即可。编译安装最好向我上面一样添加好环境变量后使用redis-server <你的配置文件路径>即可启动redis

redis-server redis.conf
#启动可以使用相对路径指明配置文件位置

停止redis在编译安装的情况下有两种解决方案:

  1. 使用ps -aux | grep “redis-server”查看redis的进程PID然后kill
  2. 使用redis-cli通过交互接口来停止redis的运行。比如:redis-cli -h 192.168.1.50 -p 6379 shutdown就能关闭当前redis的进程。
关于redis-cli的交互接口与命令:

关于redis的交互接口是非常重要滴,但是本博客并不会详细讲解只是拿出一下较为常用的命令进行讲解,首先使用redis-cli进入交互接口语法:

  • redis-cli -h <ip | domain> -p <port> -a <authentication >  [command]

其实这些选项都可以省略,那么这样默认的命令为找到127.0.0.1地址端口为6379没有认证密码并且不直接输入命令进入交互模式,如果最后更上命令那么就不进入交互式模式而是直接执行命令后退出。

进入交互式模式后可以使用help来查看帮助,帮助分文很多类型,有组帮助、命令帮助等如下所示:

To get help about Redis commands type:
“help @<group>” to get a list of commands in <group>
“help <command>” for help on <command>
“help <tab>” to get a list of possible help topics
“quit” to exit

help@<group>就是组帮助,这个组的意思可以想象为命令的分类。比如使用help @CONNECTION会出现关于认证、切换数据库、连接等相关操作的命令帮助,关于命令的集合组可以去官网查看相关解释由于命令太多就不在博客详细写了。

help <command>就是查看单个命令的帮助,其实这个帮助无需使用,在你输入命令的时候也会出现相关的帮助信息。并且命令也可以使用TAB补充与查看还能看到所属组,所以命令的帮助信息还是非常详细的。

设置redis的持久化:

其实默认redis已经开启的持久化功能,但是在redis中一共有两种持久化方式可以选择:①RDB ②AOF。默认redis使用的是RDB机制的持久化,那么先来说说RDB机制吧!

RDB机制:其实类似于snapshot,二进制格式保存。按照实现定制的策略,周期性地将数据保存并送给硬盘,数据文件默认名字为dump.rdb。不过除了在配置文件中进行定义让其自定保存之外还能手动使用命令方式来进行手动保存,可以使用两种命令进行手动保存:

①SAVE: 同步在主线程中保存快照,此时会阻塞所有客户端请求。

②BGSAVE: 异步保存,不会阻塞客户端请求,但数据不会与时间同步,也就说只是保存你当前输入命令时间以及之前时间的内容,而在保存进行的时间段以及以后的数据不会保存。

当然没有遇到什么紧急情况是不可能使用手动保存这种无聊方案的,一般都是在配置文件中进行对保存方案的配置后自动进行保存,下面看看配置文件中RDB机制的参数,不过首先寻找SNAPSHOTTING关键字进行定位:

save 900 1
save 300 10
save 60 10000
#save配置是默认一共有三个,分别定义的内容是:save 900 1表示在15分钟内如果有1次key进行改动就发动进行快照。save 300 10表示在5分钟内如果有10个key改动就发动快照,那么最后一个save 60 1000在一分钟内如果有10个key改动那么进行快照。这个选项可以根据您对备份的要求进行修改,比如您对数据保存要求并不高只是拿redis做为缓存,并且并发量比较大不想消耗太多磁盘资源可以选择”save 300 10000″其中300表示300秒换算为分钟那么就是5分钟后面的10000表示有10000个key插入、删除、改动的时候发生快照。

dbfilename “dump.rdb”
#设置ROF持久化文件存储的名字,默认为dump.rdb,其实也不用修改默认就行。

dir “/opt/redis-4.0.1/data”
#ROF的文件放置位置,记得建立好文件夹,否则默认的话编译安装直接存在redis根目录这样以后会看到很多快照文件,如果喜欢整理的童鞋可以修改!

stop-writes-on-bgsave-error yes
#是否报告访问错误?这个保持默认开启还是别动为好。

rdbcompression yes
#rdb文件是否执行压缩扩大磁盘存储?这个看cpu负载,redis对资源要求低所以开启可以节约磁盘空间。其实没啥用如果并发量大了直接关闭即可。

rdbchecksum yes
#是否对rdb的镜像文件做检验码测试?看资源使用情况如果资源不紧张需要开启。不过还是建议开启。

AOF机制:记录每一次写操作至指定文件尾部实现持久化方式,当redis重启时,可通过重新执行文件中的命令在内存重建数据库。也就是说有点像mysql的二进制日志类似,但是恢复起来如果数据量较大可能会速度有点慢。接下来看看AOF的配置参数,首先找到APPEND ONLY MODE的关键词然后:

appendonly
#默认该功能选项为no如果启动改为yes就能打开AOF持久化机制

appendfilename “appendonly.aof”
#AOF机制持久化文件名,这个可以自定义

appendfsync
#每隔多少时间段进行写入数据到磁盘上?一共有三个选项everysec、no、always 其中everysec 最平衡的选项,每秒钟进行数据同步!如果服务器宕机也只会损失1秒钟的数据。no 让内核自己决定什么时候同步数据,基本都是内核较为空闲的时候同步。那么可以节约资源但是增加了服务器宕机之后数据损失的数量。no 让内核自己决定什么时候同步数据,基本都是内核较为空闲的时候同步。那么可以节约资源但是增加了服务器宕机之后数据损失的数量。

注意:redis默认采用的是RDB机制,如果需要使用AOF机制的话可以直接让appendonly选项为yes就可以直接采用AOF机制,虽然会造成两个持久化机制都打开但是redis会优先使用AOF,因为AOF默认是关闭的。还有一点即使开启了持久化并不代表就不用将持久化文件进行备份,如果里面的数据只要有一丁点重要建议还是写个脚本进行定期备份。

如何选择持久化机制?

其实这个问题确实得看你的线上情况才能做出决定,不过我这里提供一个大概的方向(纯建议,如有不对可以留言给我及时指正)。

RDB持久化机制比较合适与让redis作为缓存时进行使用,当redis宕机内存数据清空时并不会像membercache那样什么缓存都没了从而导致“雪崩效应”,使用RDB既可以持久化数据也不会太占用磁盘资源。

如果你的redis是用来存储数据的,并且里面数据还比较重要的话建议使用AOF机制了,该机制在主机宕机后内存数据消失的情况下恢复数据上有些缓慢但是保存的数据量肯定比RDB要多的多不会过多的损失数据,即使有所损失也只是少了1秒的写入数据(默认appendfsync使用everysec选项)。但是这样会对磁盘的压力会非常严重(如果appendfsync采用的是always选项则压力更大会对redis造成不必要的性能瓶颈),如果你的redis并发量很大并且还得讲数据做到精确持久化的话建议还是采用分片集群的redis。

总结:

redis是一个高性能NOSQL类的存储应用,不但能解决企业缓存方面的解决方案,还能解决一些高性能键值存储的解决方案。现在的企业中是经常会用到的一个存储工具,虽然单台redis的性能很高,但是总有宕机的时候。如果让redis能自动备份数据并且作高可用解决方案,请看更新的下一篇文章!

Comments

Leave a Reply

Your email address will not be published. Name and email are required