Redis

2019-01-08  本文已影响0人  GGarrett

1. Redis介绍

1.1 Redis概述

Redis是一个开源的内存数据结构存储,用作数据库,缓存和消息代理。它支持五种数据类型来存储值,如:字符串类型、散列类型、列表类型、集合类型、有序集合类型。它是NoSQL数据库。

1.2 NoSQL

NoSQL的全称是Not Only Sql,泛指非关系型数据库,NoSQL数据库是为了解决高并发、高可用、高可扩展、大数据存储问题产生的数据库解决方案,是关系型数据库的一个很好的补充。NoSQL数据库有多种分类,它的分类如下:

1.3 Redis应用场景

2. Redis单机版安装及命令介绍

2.1 Redis下载

Redis官网地址:https://redis.io/或者http://www.redis.cn/(中文网)
Redis下载地址:http://download.redis.io/releases/
Redis Windows版下载地址:https://github.com/ServiceStack/redis-windows/tree/master/downloads

2.2 Redis安装

Redis安装环境:建议在Linux上运行,这里使用CentOS 7作为安装环境。(搞个云服务器或者VMware都可以)

2.3 Redis启动

  # 将daemonize由no改为yes
  daemonize yes
  
  # 默认不能被其他机器访问 ,要在‘bing 127.0.0.1‘’前面加‘#’,这样所有机器就可以访问了
  # bind 127.0.0.1
  
  # 是否开启保护模式,由yes该为no
  protected-mode no  

2.4 关闭服务

./redis-cli shutdown

2.5 其他命令说明

2.6 Redis命令行客户端

3. Redis数据类型

Redis官网命令大全
Redis菜鸟教程
Redsi是key-value形式存储数据的,其中value可以定义五种数据类型:
String、Hash、List、Set、SortedSet(有序集合类型,简称:zset)
注意:在redis命令语句中,命令时可以忽略大小写的,key是不忽略大小写的。

String类型(字符串类型)

hash类型(散列类型)

list类型(队列类型)

set类型(集合类型)

zset类型(有序集合类型、sortedset)

4. Redis事务

4.1 Redis事务介绍

4.2 Redis事务命令

4.3 演示

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set s1 111
QUEUED
127.0.0.1:6379> hset set1 name zhangsan
QUEUED
127.0.0.1:6379> exec
1) OK
2) (integer) 1
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set s2 222
QUEUED
127.0.0.1:6379> hset set2 age 20
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> exec
(error) ERR EXEC without MULTI

127.0.0.1:6379> watch s1    
OK
127.0.0.1:6379> multi 
OK
127.0.0.1:6379> set s1 555
QUEUED
127.0.0.1:6379> exec         # 此时在没有exec之前,通过另一个命令窗口对监控的s1字段进行修改
(nil)
127.0.0.1:6379> get s1
111

4.4 事务失败

5. Redis持久化

5.1 RDB方式

5.1.1 RDB介绍

  1. Redis启动后会读取RDB快照文件,将数据从硬盘再入到内存。
  2. 根据数据量的大小与结构和服务器的性能的不同,快照的需要的条件也是不同的。通常,记录一千万个字符串类型键、大小为1GB的快照文件载入到内存中需要花费20~30秒钟。

5.1.2 设置快照规则

  1. RDB持久化条件
    格式:save <seconds> <changes>
    实例:redis.conf(可以配置多个条件(每行配置一个条件),每个条件之间是“或”的关系)
save 900 1  : 表示15分钟(900秒钟)内至少1个键被更改则进行快照。
save 300 10 : 表示5分钟(300秒)内至少10个键被更改则进行快照。
save 60 10000 :表示1分钟内至少10000个键被更改则进行快照。
  1. 配置dir指定rdb快照文件的位置
# Note that you must specify a directory here, not a file name.   
dir   ./   
  1. 配置dbfilename指定rdb快照文件的名称
# The filename where to dump the DB
dbfilename dump.rdb

5.1.3 快照过程(原理)

  1. Redis`调用系统中的fork函数复制一份当前进程的副本(子进程)
  2. 父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件。
  3. 当子进程写入完所有是数据后,会用该临时文件替换旧文件的RDB文件。


  1. redis在进行快照的过程中不会修改rdb文件,只有快照结束后才会把旧的rdb文件替换掉。
  2. 通过定时备份rdb文件来实现reids数据库的备份,rdb文件是经过压缩的二进制文件,占用空间会小于内存中的数据,利于传输。

5.1.4 RDB的优缺点

5.2 AOF(append only file)方式

5.2.1 AOF方式介绍

如果开启AOF持久化后,每执行一条更改redis中的数据的命令,redis就会将该命令写入硬盘中的AOF文件中,这一过程会降低redis的性能,但大部分这个情况下是可以接受的,使用比较快的硬盘可以提高AOF的性能。

redis.conf:

# 可以通过修改redis.conf配置文件中的appendonly参数开启
appendonly yes   

# AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的。
dir   ./   

# 默认的文件名是appendonly.aof,可以通过appendfilename参数修改
appendfilename   appendonly.aof

5.2.2 同步磁盘数据

redis每次更改数据,AOF机制每次都会将命令记录在aof文件中,但是,实际上有操作系统的缓存机制,每次数据并没有实时写入到硬盘,而是写入硬盘缓存,在通过缓存机制保存到文件中。

参数说明

# 每次执行写入都会进行同步, 这个是最安全但是是效率比较低的方式
appendfsync always  

# 每一秒执行(默认)
appendfsync everysec    

# 不主动进行同步操作,由操作系统去执行,这个是最快但是最不安全的方式
appendfsync no      

5.2.3 AOF重写

Redis可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写。重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合

整个重写操作时绝对安全的的,因为redis在创建新的aof文件过程中,会继续将命令追加到现有的aof文件中,即使重写过程中发生了停机,现有的aof文件也不会丢失。一旦新的aof文件创建完毕,reids就会从旧文件切换到新的aof文件,并开始对新的aof文件进行追加操作。

aof文件有序的保存了对数据库执行的写入操作,这些写入操作以redis协议保存,因此aof文件内容非常容易被人读懂,对文件分析也很轻松。

参数说明

# 表示当前aof文件大小超过上一次aof文件大小的百分之多少的时候会进行重写。如果之前没有重写过,以启动时aof文件大小为准
auto-aof-rewrite-percentage 100

# 限制允许重写最小aof文件大小,也就是文件大小小于64mb的时候,不需要进行优化
auto-aof-rewrite-min-size 64mb

5.2.4 AOF文件损坏后修复

5.3 RDB和AOF的选择

上一篇下一篇

猜你喜欢

热点阅读