Pages

Sunday, 20 October 2024

redis入门

 (1)---安装、配置、启动 

redis简介

Redis是一个开源、支持网络、基于内存、键值对存储数据库,使用ANSI C编写。从 2015 年 6 月开始,Redis 的开发由RedisLabs赞助,在2013年5月至2015年6月期间,其开发由Pivotal赞助。在2013年5月之前,其开发由VMware赞助。根据月度排行网站DB-Engines.com的数据显示,Redis是最流行的键值对存储数据库。
维基百科)

由于redis基于内存、键值对存储等特点,加上它的5种数据类型,使得redis能够在缓存、消息队列、高并发应用、排行榜相关领域大展身手。

安装(以ubuntu为例)

wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
sudo make install

配置redis

开发环境,无须配置。手工启动

redis-server --port 6379

生产环境,设置随系统自动启动(以监听6380端口为例)

1、复制启动脚本
sudo cp utils/redis_init_script /etc/init.d/redis_6380
2、创建配置文件所在目录
sudo mkdir /etc/redis
3、创建PIDFILE文件所在目录

PID FILE的作用,见pid file的作用

sudo mkdir -p /var/redis/6380
4、修改启动脚本

修改第6行的端口号 REDISPORT=6380

sudo vim /etc/init.d/redis_6380
5、复制该实例redis配置文件
sudo cp redis.conf /etc/redis/6380.conf
6、修改配置文件
sudo vim /etc/redis/6380.conf

修改以下参数

daemonize yes #以守护进程运行
PIDFILE /var/run/redis_6380.pid #设置pid文件位置(要跟 /etc/init.d/redis_6380 里的PIDFILE一致)
port 6380
dir /var/redis/6380 # 设置持久化文件存放位置
7、设置开机启动
sudo update-rc.d redis_6380 defaults

提示:centos下使用如下方法

a. 修改/etc/init.d/redis_6380,在首行#!/bin/sh下添加两行

sudo vim /etc/init.d/redis_6380
/*添加这两行:(保留#号)
chkconfig: 2345 10 90
description: redis blabla ....
*/

启动与关闭

(开启,生产环境):

sudo /etc/init.d/redis_6380 start

(开启,开发环境):

redis-server --port 6380

(关闭):

redis-cli -h 127.0.0.1 -p 6380 SHUTDOWN

参考

官方文档

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

 (2) 管理与维护 

涉及 持久化_、_主从服务_、_安全_、_监控 等设置或管理。

持久化

redis虽然是基于内存的,但是作为一个比较成熟的数据库,仍然提供了持久化的功能,并且默认是开启的。

redis有两种持久化的方式:RDB 与 AOF

RDB(默认)

在一定时间内改动的键的数量超过则写回到磁盘

配置

默认写到 dump.rdb 文件,可以在配置文件中通过参数 dbfilename 修改
可以在配置文件 redis.conf 中按照如下格式添加自定义规则(默认已有三条规则)

# save time count
save 90 1
save 300 10
文件格式

RDB文件是以二进制形式存储的。

适用场景

由于需要达到一定的改动次数,如果中间出现异常崩溃,最后的那些改动会丢失。如果对可靠性要求不是很高,可以采用。

关闭RDB持久化

删除原有规则,并添加规则:

save ""

AOF (append only file)

每出现一个改动就写回到文件

开启AOF持久化

修改配置文件参数, appendonly yes
默认写到 appendonly.aof 文件中,可以在配置文件中修改 appendfilename 参数
数据格式采用文本文件格式,存储的是每一步的操作,形式如下:

*3 #行数
$3 #字符串长度
set
$3 #字符串长度
foo
$3 #字符串长度
bar

表示的是命令 set foo bar
由于系统默认的写机制存在缓存,延迟回写(30s),如果掉电,缓存中内容会丢失。可以设置自动同步到磁盘,参数 appendfsync,默认时每秒回写一次

适用场景

AOF可靠性更高,但是也更影响性能(好在redis占用资源则不多),适用于对数据可靠性要求很高,对丢失0容忍的应用

注意

可以同时使用RDB和AOF两种持久化方式,不会存在冲突

设置主从服务器

redis-server --port 6380 --slaveof 127.0.0.1 6379

开启6380端口的redis服务器实例A,作为6379实例B的从服务器,随后A会自动向B 报告 ,请求镜像,此后每次B变动,都会通知A更改。A与B的数据交换格式类似于AOF文件,从服务器的数据默认是 只读(readonly),可以通过参数 slave-read-only 参数进行修改,但是从服务器的变化不会影响到主服务器,并且会被下一次的同步覆盖

安全

关闭外部网络访问权限

修改配置文件参数

bind 127.0.0.1

最新版3.2.0 已经默认如此配置了

设置密码

配置文件添加参数

requirepass <password>

以后连接服务器时,都要先输入

AUTH <password>

命令验证,才能正常使用
个人认为没有必要,redis不提供输入次数限制,暴力破解的难度不大,除非是非常高强度的密码。况且已经关闭外部访问,能连上主机的直接看程序代码就知道密码了。

重命名/禁止命令

重命名
rename-command command newCommandName
禁止

禁用某些命令

rename-command command ""

通信协议

redis提供了两种通信协议支持:简单协议 和 统一请求协议

简单协议(SET foo bar)

输入跟在redis-cli 中输入的命令一致

二进制安全的统一请求协议

输入的格式与输出一致,跟AOF文件格式相似
例如 SET foo bar 写为 *3\r\n$3\r\nSET\r\n$3foo\r\n$3bar\r\n

两种协议的输出格式对比

类型 示例数据
错误 -ERR blabla\r\n
状态 +OK\r\n
整数 :3\r\n
字符串 $3\r\nbar\r\n
多行回复 *3\r\n$3\r\nSET\r\n$3foo\r\n$3bar\r\n

管理工具

redis自带工具

在 redis-cli 中输入
slowlog get 慢日志查询,时间阈值在配置文件中修改,默认为10000
monitor 实时显示服务器的每一个请求(所有客户端)

phpRedisAdmin

跟phpmyadmin相似,用网页方式管理 (查看演示)

git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git
cd phpRedisAdmin
//下载predis依赖
git clone https://github.com/nrk/predis.git vendor

cp includes/config.sample.inc.php includes/config.inc.php
//在 config.inc.php 中修改redis服务器连接参数
rdbtools
地址 rdbtools
快照文件解析器,根据快照文件导出json文件,分析redis中每个键的占用空间情况等。

 

No comments:

Post a Comment