码迷,mamicode.com
首页 > 其他好文 > 详细

redis(-)

时间:2019-10-31 18:38:07      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:example   command   prot   https   server   进程   cluster   str   direct   

redis 下载不通版本

解压安装即可
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make

官网给的这个操作,执行完之后make test半路报错了,只生成部分可执行程序,没有完全配置好,其余可执行程序没有生成,最好执行 make install
安装报错就看着连接
我遇到的报错:couldn‘t execute "src/redis-benchmark": no such file or directory
后续还有一个报错也是没有安装成功的原因
redis-trib.rb:6: syntax error, unexpected ‘:‘, expecting ‘}‘

测试是否成功
$ src/redis-server
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

常见的工具清单

redis-benchmark : 用于测试redis的性能。
redis-check-aof : 当aof备份文件被损坏,可通过该工具对aof文件进行修复,
使用方式:redis-check-aof --fix 要修复的aof文件。
redis-check-rdb : 修复损坏的rdb备份文件。
redis-cli : redis客户端,用于连接服务端。
redis-server : redis服务器端,用于启动redis服务器。
redis-sentinel : 哨兵模式(实际使用较多) 在master-slave模式下(slave默认不支持写),当master出现异常时,自动在slave中选择一台作为master。

连接上redis服务器后,可通过指令“info”查看redis服务器信息,也可查看服务器知道内容信息,例如:info replication 查看主从相关信息

下面介绍几个redis常用配置项(redis.cnf配置文件中配置)
1、bind 127.0.0.1 配置redis服务器接受链接的网卡(非客户端ip,而是服务器端ip,服务器可能包含多个网卡)
2、protected-mode yes redis以保护模式运行,只接受本地链接
3、port 6379 redis接受链接端口
4、daemonize no redis是否后台运行,若为yes,客户端窗口将被锁定
重要配置项
5、maxmemory redis最大使用内存
6、maxmemory-policy 内存达到最大值时的驱逐策略

redis数据持久化支持两种模式:RDB和AOF
RDB:rdb方式的持久化是通过快照完成的,当符合一定条件时redis会自动将内存中的所有数据执行快照操作并存储到硬盘上。默认存储在redis根目录的dump.rdb文件中。(文件名在配置文件中dbfilename)

redis进行快照的时机(在配置文件redis.conf中)
  save 900 1:表示900秒内至少一个键被更改则进行快照。
  save 300 10
  save 60 10000

dbfilename dump.rdb 快照保存文件名
dir ./ 快照保存地址

也可通过redis客服端执行命令save或者bgsave保存快照:
 两个命令的区别在于,save是由主进程进行快照操作,会阻塞其它请求。bgsave是由redis执行fork函数复制出一个子进程来进行快照操作。
文件修复:redis-check-dump
rdb的优缺点
优点:由于存储的有数据快照文件,恢复数据很方便。
缺点:会丢失最后一次快照以后更改的所有数据。

AOF:
aof方式的持久化是通过日志文件的方式,记录下redis服务器的每一条修改指令。默认情况下redis没有开启aof,可以通过参数appendonly参数开启。
appendonly yes
aof文件的保存位置和rdb文件的位置相同,都是dir参数设置的,默认的文件名是appendonly.aof,可以通过 appendfilename参数修改
appendfilename appendonly.aof
redis写命令同步的时机:
   appendfsync always 每次都会执行
  appendfsync everysec 默认 每秒执行一次同步操作(推荐,默认)
  appendfsync no不主动进行同步,由操作系统来做,30秒一次

redis服务器启动时会读取appendonly.aof中的指令,进行执行,这样便保证了重启后数据不会丢失。

注意:当redis启动时,如果rdb持久化和aof持久化都打开了,那么程序会优先使用aof方式来恢复数据集,因为aof方式所保存的数据通常是最完整的。

最后记录下redis服务器的启动与关闭指令:
  [root@localhost src]# ./redis-server …/redis.conf 启动redis
  [root@localhost src]# ./redis-cli shutdown 关闭redis
————————————————

redis的两种方式
redis-cluster
redis-sentinel

本着测试的目的:
基于不同端口进行的
官网下载redis,安装完成之后,
make dir redis-cluster
在这个目录copy 一个redis.conf 重命名成7001.conf 7002.conf 7003.conf 7004.conf 7005.conf 7006.conf

7001.conf配置 基本上更改这些东西,其余都是默认配置没有更改
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
appendonly yes
port 7001
daemonize yes
pidfile /var/run/redis_7001.pid
别的配置文件同样更改,将7001更换成对应的端口即可

然后启动
redis-server 7001.conf
redis-server 7002.conf
redis-server 7003.conf
redis-server 7004.conf
redis-server 7005.conf
redis-server 7006.conf
[root@hack redis-cluster]# ps -ef |grep redis
root 1503 1 1 07:48 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster]
root 1508 1 0 07:48 ? 00:00:00 redis-server 127.0.0.1:7002 [cluster]
root 1513 1 0 07:48 ? 00:00:00 redis-server 127.0.0.1:7003 [cluster]
root 1518 1 0 07:48 ? 00:00:00 redis-server 127.0.0.1:7004 [cluster]
root 1523 1 0 07:48 ? 00:00:00 redis-server 127.0.0.1:7005 [cluster]
root 1532 1 1 07:48 ? 00:00:00 redis-server 127.0.0.1:7006 [cluster]
服务已经起来了可以看到

查了一下网上的方法,用的redis-trib.rb,还要将这个文件copy到哪儿哪儿,
其实这个报错之后应该用哪个命令操作结果就已经显示出来了

Use the following syntax:
redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]
Example:
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

执行这个就可以创建

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7003 127.0.0.1:7005 127.0.0.1:7002 127.0.0.1:7004 127.0.0.1:7006 --cluster-replicas 1

这个顺序我调整了一下,因为5.0这个不让你重新选择哪个是master,哪个是slave
这个需要注意一点,创建的时候redis 必须是起来的,如果没有起,会提示一个Conneted 拒绝报错,
配置参数不能开启replicaof 那个参数,
<br>
配置完之后的结果
[root@hack redis-cluster]# redis-cli -p 7001
127.0.0.1:7001> keys a
(empty list or set)
127.0.0.1:7001> get a
(error) MOVED 15495 127.0.0.1:7005
127.0.0.1:7001> set foo bar
(error) MOVED 12182 127.0.0.1:7005
127.0.0.1:7001> quit
[root@hack redis-cluster]# redis-cli -p 7005
127.0.0.1:7005> set foo bar
OK
127.0.0.1:7005> get foo
"bar"
127.0.0.1:7005> cluster nodes
e3e272978598930bf253acc36421572b3527e776 127.0.0.1:7003@17003 master - 0 1567641325000 3 connected 5461-10922
6282e9c39ef069b2b93f55c988cc60d990d68035 127.0.0.1:7001@17001 master - 0 1567641328000 1 connected 0-5460
f106f2f12b2bafb53f897726fe43732679530cf9 127.0.0.1:7004@17004 slave e3e272978598930bf253acc36421572b3527e776 0 1567641328158 4 connected
e777b3a5c5d49f13d96677ff1bbe06963cbd466f 127.0.0.1:7002@17002 slave 6282e9c39ef069b2b93f55c988cc60d990d68035 0 1567641326138 2 connected
261627d86286e11c5190d0a4e811629a09677655 127.0.0.1:7005@17005 myself,master - 0 1567641324000 5 connected 10923-16383
f92dbe2ab1f1f98f6927e6b430740a0ed585559b 127.0.0.1:7006@17006 slave 261627d86286e11c5190d0a4e811629a09677655 0 1567641326000 7 connected

因为redis-cluster是基于ruby的,当时用yum安装的ruby,版本过低,一直提示错误,在一个报错就是下边这个,虚拟机时间不对,也会报错,
make: Warning: File `common.mk‘ has modification time 7.6e+06 s in the futur
更改时间 date -s ‘20160727 18:51:56

至此 基于ruby的redis-clster已经配置完了,
这个连接有后续创建nodes的回显,但是跟5.0还是有点差别
https://www.cnblogs.com/chanAndy/p/9851512.html

如果已经存在cluster nodes了,重新配置需要删除cluster reset,然后在删除,
[root@hack redis-cluster]# redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN
--cluster-replicas <arg>
check host:port
--cluster-search-multiple-owners
info host:port
fix host:port
--cluster-search-multiple-owners
reshard host:port
--cluster-from <arg>
--cluster-to <arg>
--cluster-slots <arg>
--cluster-yes
--cluster-timeout <arg>
--cluster-pipeline <arg>
--cluster-replace
rebalance host:port
--cluster-weight <node1=w1...nodeN=wN>
--cluster-use-empty-masters
--cluster-timeout <arg>
--cluster-simulate
--cluster-pipeline <arg>
--cluster-threshold <arg>
--cluster-replace
add-node new_host:new_port existing_host:existing_port
--cluster-slave
--cluster-master-id <arg>
del-node host:port node_id
call host:port command arg arg .. arg
set-timeout host:port milliseconds
import host:port
--cluster-from <arg>
--cluster-copy
--cluster-replace
help

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

踩过的坑https://blog.csdn.net/lsxf_xin/article/details/79442198

redis(-)

标签:example   command   prot   https   server   进程   cluster   str   direct   

原文地址:https://blog.51cto.com/aklaus/2446635

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!