Redis 开源缓存数据库

   Redis 是一个开源的,高性能的 key-value 系统,能够用来缓存或存储数据。Redis 数据能够持久化,而且支持多种数据类型:字符串(string),列表 (list),哈希(hash),集合(set)和有序集合(sorted set)。可以对关系型数据库起到很好的补充做用。它还提供了多种客户端 Python,Ruby,Erlang,PHP ,能够方便调用。mysql

持久化:redis

      Redis 是一种内存数据库(跟 memcache 相似),在数据存取效率方面很优秀,因为内存中的数据时刻面临丢失的危险,Redis 提供了两种持久化机制,及时将内存中的数据写入磁盘。sql

    RDB 利用存储快照的方式把内存数据按期写入磁盘,半持久化数据库

    AOF 利用写日志的方式(相似 mysql 的 binlog),每执行一条更改 Redis 数据的命令,就写入到磁盘的一个 aof 文件中vim

    Redis 默认开启 RDB 模式,关闭 AOF 模式,由于 AOF 更耗资源,可是对数据安全极高,称为全持久化,按需选择哪一种模式。缓存

主从功能:安全

    为了防止 Redis 磁盘损坏,致使数据丢失,Redis 提供了复制功能,将一个主数据库的数据自动同步到从数据库,防止数据丢失。服务器

主从原理:app

一、从数据库启动后,向主数据库发送 SYNC 命令tcp

二、主数据库收到 SYNC 命令后开始保存快照,在此期间全部发给主数据库的命令都被缓存起来

三、快照保存完后,主数据库把快照和缓存的命令一块儿发给从数据库

四、从数据库保存主数据发来的快照文件,并依次执行主数据库发来的缓存命令

     在同步过程当中,从数据库不会阻塞,它默认使用同步以前的数据继续响应客户端发来的命令

下载地址:https://code.google.com/p/redis/downloads/list

1、安装 Redis

[root@study src]# tar zxf redis-2.6.10.tar.gz

[root@study src]# cd redis-2.6.10

[root@study redis-2.6.10]# make

[root@study redis-2.6.10]# make install

2、调整 Redis

[root@study ~]# mkdir /usr/local/redis

[root@study ~]# cd !$

[root@study redis]# cp ../src/redis-2.6.10/redis.conf .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-cli .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-server .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-sentinel .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-benchmark .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-check-aof .

[root@study redis]# cp ../src/redis-2.6.10/src/redis-check-dump .

## redis.conf 主配置文件

## redis-cli 命令行操做工具

## redis-server 启动程序

## redis-sentinel 集群管理工具

## redis-benchmark 性能测试工具,测试 redis 在当前系统配置下的读写性能

## redis-check-aof 更新日志检查,--fix 能够修复 log 文件

## redis-check-dump 检查本地数据文件

3、编辑 redis.conf

[root@study redis]# mv redis.conf redis.conf.bak

[root@study redis]# vim redis.conf

daemonize yes

## 以守护进程方式启动

pidfile /usr/local/redis/logs/redis.pid

## 定义 pid 文件存放路径

port 6379

## 监听端口

timeout 300

## 请求超时时间

loglevel debug

## 定义日志级别

logfile /usr/local/redis/logs/redis.log

## 定义日志文件路径

databases 16

## 启动数据库实例数,默认链接的数据库为 0 ,能够经过 select N 来链接不一样的数据库

save 900 1

save 300 10

save 60 10000

## 从内存保存数据到磁盘的策略

## 当有 1 条 keys 数据改变时,900 秒刷新到磁盘一次

## 当有 10 条 keys 数据改变时,300 秒刷新到磁盘一次

## 当有 1W 条 keys 数据改变时,60 秒刷新到磁盘一次

rdbcompression yes

## dump .rdb 数据库时,是否压缩数据对象

dbfilename dump.rdb

## dump 数据库时,数据库保存的文件名

dir /usr/local/redis/data/

## dump 时数据库保存的路径

#-----------------------------------------------------------------------------------------------------

appendonly no

## 是否开启日志功能,若是开启每次操做都会记录一条日志,至关于 mysql 的 binlog ,可是会影响效率

#appendfilename appendonly.aof

## AOF 文件名称,默认为 ppendonly.aof

#appendfsync everysec

## 同步数据到磁盘的规则,

## no 不主动写入磁盘,依赖与系统的写入,通常 30 秒左右写入一次,性能最好,可是持久化没有保证。

## everysec 每秒强制写入磁盘一次,在性能跟持久化方面折中,推荐使用。

## always 每次收到写操做就当即强制写入磁盘,是最有保证的彻底持久化,可是速度慢。

#no-appendfsync-on-rewrite yes

## 在日志重写时,不进行命令追加操做,而只是将其放在缓冲区里,避免与命令的追加形成磁盘 IO 上的冲突

#auto-aof-rewrite-percentage 100

## 当前 AOF 文件的大小是上第二天志重写获得的 AOF 文件大小的两倍时,自动启动新的日志重写过程

#auto-aof-rewrite-min-size 64mb

## 当前 AOF 文件启动新的日志重写过程的最小值,避免刚启动 redis 时因为文件较小致使频繁重写

#-----------------------------------------------------------------------------------------------------

4、启动 Redis

[root@study ~]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

[root@study ~]# sysctl vm.overcommit_memory=1

## 调整内核参数,若是不调整 redis 会报一个警告信息

[root@study ~]# mkdir /usr/local/redis/data # 建立 data 目录

[root@study ~]# mkdir /usr/local/redis/logs # 建立 logs 目录

[root@study ~]# redis-server /usr/local/redis/redis.conf # 启动 redis ,须要指定配置文件路径

[root@study ~]# netstat -anpt | grep redis

tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1176/redis-server

5、测试 Redis

-----------------------------------------------------------------------------------------------------

[root@study ~]# redis-cli

redis 127.0.0.1:6379> set password 123

OK

redis 127.0.0.1:6379> get password

"123"

redis 127.0.0.1:6379> quit

## 登录本机的 redis ,写入 keys/value ,读取 keys

[root@study ~]# ls /usr/local/redis/data/

## 没有生成 dump.rdb ,由于半持久化的 save 规则没有触发

[root@study ~]# redis-cli shutdown

[root@study ~]# ls /usr/local/redis/data/

dump.rdb

## 当关闭 redis 的时候,会将内存中的数据保存为 dump.rdb

[root@study ~]# redis-server /usr/local/redis/redis.conf

[root@study ~]# redis-cli

redis 127.0.0.1:6379> get password

"123"

redis 127.0.0.1:6379> quit

## redis 启动后从 dump.rdb 文件中读取数据,因此数据依然存在

-----------------------------------------------------------------------------------------------------

[root@study ~]# rm -rf /usr/local/redis/data/*

[root@study ~]# redis-cli

redis 127.0.0.1:6379> set password abcdef

OK

redis 127.0.0.1:6379> get password

"abcdef"

redis 127.0.0.1:6379> quit

[root@study ~]# kill -9 `cat /usr/local/redis/logs/redis.pid`

## 当不是正常关闭 redis 时,如 kill -9 、redis 服务器忽然宕机等

[root@study ~]# ls /usr/local/redis/data/

## 是不会将内存中的数据同步到磁盘的,也就是说不会生成 dump.rdb 文件

[root@study ~]# redis-server /usr/local/redis/redis.conf

[root@study ~]# redis-cli

redis 127.0.0.1:6379> get password

(nil)

redis 127.0.0.1:6379> quit

## 这时启动 redis ,发现数据丢失了 。若是不能忍受这种丢失能够启动 AOF 全持久化

相关文章
相关标签/搜索