redis安装使用和数据持久化

一、redis介绍

redis是一个key-value存储系统。和Memcached类似,它支持存储的values类型相对更多,包括字符串、列表、哈希散列表、集合,有序集合。

与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。


本质:将数据保存在内存中

用途:redis可以做缓存;redis可以做消息队列

特性:

    可以做持久化:在配置文件设置,如果你要保存到文件,可添加设置,就算电脑不小心关机了,数据还是在的。这个是自己来定的。支持存放数据的格式多(5种格式)

实现数据持久化的两种方式:

    (1)使用截图的方式,将内存中的数据不断写入磁盘(性能高,但可能会引起一定程度的数据丢失)

    (2)使用类似mysql的方式,记录每次更新的日志


二、redis优势

1、为什么要使用redis?使用redis有哪些好处?

(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

(2) 支持丰富数据类型,支持string,list,set,sorted set,hash

(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

2、redis相比memcached有哪些优势?

(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型

(2) redis的速度比memcached快很多

(3) redis可以持久化其数据

三、redis安装配置

cd /usr/local/src/
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
tar xzf redis-3.0.6.tar.gz
cd redis-3.0.6
make && make install PREFIX=/usr/local/redis-3.0.6
cd utils/
cp redis_init_script /etc/init.d/redis
sed -i 's%/usr/local/%/usr/local/redis/%g' /etc/init.d/redis
ln -s  /usr/local/redis-3.0.6/  /usr/local/redis
ln -s  /usr/local/redis/redis.conf  /etc/redis.conf
chmod +x /etc/init.d/redis
sed -i '/^daemonize no/cdaemonize yes' /etc/redis.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
echo never > /sys/kernel/mm/transparent_hugepage/enabled
/etc/init.d/redis start


Redis的配置:

  daemonize:如需要在后台运行,把该项的值改为yes

  pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址

  bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项

  port:监听端口,默认为6379

  timeout:设置客户端连接时的超时时间,单位为秒

  loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice

  logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上

  database:设置数据库的个数,默认使用的数据库是0

  save:设置redis进行数据库镜像的频率

  rdbcompression:在进行镜像备份时,是否进行压缩

  dbfilename:镜像备份文件的文件名

  dir:数据库镜像备份的文件放置的路径

  slaveof:设置该数据库为其他数据库的从数据库

  masterauth:当主数据库连接需要密码验证时,在这里设定

  requirepass:设置客户端连接后进行任何其他指定前需要使用的密码

  maxclients:限制同时连接的客户端数量

  maxmemory:设置redis能够使用的最大内存

  appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态

  appendfsync:设置appendonly.aof文件进行同步的频率

  vm_enabled:是否开启虚拟内存支持

  vm_swap_file:设置虚拟内存的交换文件的路径

  vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0

  vm_page_size:设置虚拟内存页的大小

  vm_pages:设置交换文件的总的page数量

  vm_max_thrrads:设置vm IO同时使用的线程数量


四、redis常用命令


redis-cli -h host -p port -a password
AUTH password                  #验证密码是否正确
CONFIG GET port               #获取端口信息
select 6                      #选择数据库
CONFIG GET timeout            #获取timeout超时时间
CONFIG SET timeout 5000        #设置timeout超时时间为5000
keys *                        #查看所有的key,生产环境不要用
flushdb                       #清空redis
type key                      #判断key的类型
EXISTS key                    #检查给定的key是否存在
dbsize                         # 数据库中key的数量
monitor                       #redis正在做什么
slowlog get
slowlog get 10               #查看日志
info                         #查看服务器信息
sort price                   #排序
sort price desc              ## 逆序排序
set key value                #设置key的值,若存在则覆盖
get key                     #获取key对应的值
EXISTS key                  #查看是否存在该元素
del key                     #删除元素

HMSET user name "张三" age 18    #存多个哈希值
HGET user age                     #取哈希值
HGETALL user                       #获取在哈希表中指定 user 的所有字段和值
HDEL user name                     #删除user的哈希表name字段
INCR key                    #将 key 中储存的数字值增一
INCRBY key increment        #将 key 所储存的值加上给定的增量值(increment)
INCRBYFLOAT key increment   #将 key 所储存的值加上给定的浮点增量值(increment)
DECR key                    #将 key 中储存的数字值减一
DECRBY key decrement        #key 所储存的值减去给定的减量值(decrement)

LPUSH key value1 [value2]    #将一个或多个值插入到列表头部
LPUSHX key value              #将一个值插入到已存在的列表头部
RPUSH key value1 [value2]     #在列表中添加一个或多个值
RPUSHX key value              #为已存在的列表添加值
LLEN key                      #获取列表长度
LPOP key                       #移出并获取列表的第一个元素
RPOP key                       #移除并获取列表最后一个元素

SADD key member1 [member2]     #向集合添加一个或多个成员
SCARD key                      #获取集合的成员数
SMEMBERS key                    #返回集合中的所有成员
SISMEMBER key member            #判断 member 元素是否是集合 key 的成员
SDIFF key1 [key2]               #返回给定所有集合的差集
SINTER key1 [key2]               #返回给定所有集合的交集

五、redis的持久化

redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时 dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)

1、持久化方式说明

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

1.png

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

2.png

2、两种持久化方式的优势和劣势

RDB存在哪些优势呢?

(1). 一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数 据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。

(2). 对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。

(3). 性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。

(4). 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。


RDB又存在哪些劣势呢?

(1). 如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。

(2). 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。


AOF的优势有哪些呢?

(1). 该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其 效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变 化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。

(2). 由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操 作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据 一致性的问题。

(3). 如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创 建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。

(4). AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。


AOF的劣势有哪些呢?

(1). 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

(2). 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。


二者选择的标准,就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(aof),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份(rdb)。rdb这个就更有些 eventually consistent的意思了。


3、两种持久化方式的配置

(1).RDB持久化配置

Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开配置文件之后,我们搜索save,可以看到下面的配置信息:


save 900 1              #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。

save 300 10             #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。

save 60 10000           #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。


(2).AOF持久化配置

在Redis的配置文件中存在三种同步方式,它们分别是:


appendfsync always      #每次有数据修改发生时都会写入AOF文件。

appendfsync everysec    #每秒钟同步一次,该策略为AOF的缺省策略。

appendfsync no          #从不同步。高效但是数据不会被持久化。


猜你喜欢

转载自blog.51cto.com/qidian510/2296292