Redis入门基础详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis入门基础详解相关的知识,希望对你有一定的参考价值。

Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份;也可用作传递的消息队列服务器使用。


1.安装redis
2.redis集群

1.安装redis

环境准备:

centos 7.2
redis-3.2.12.tar

安装方式编译安装

cd /data

tar xzf redis-3.2.12.tar.gz

cd redis-3.2.12

yum -y install gcc-c++ tcl gcc

make

可能会出现的问题:

若出现如下提示,则将make改为make MALLOC=libc,推测是因为编译库的问题

[[email protected] redis-3.2.12]# make
cd src && make allmake[1]: Entering directory /root/redis-2.8.17/src‘ CC adlist.o<br/>In file included from adlist.c:34:<br/>zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory<br/>zmalloc.h:55:2: error: #error "Newer version of jemalloc required"make[1]: *** [adlist.o] Error 1make[1]: Leaving directory/root/redis-2.8.17/src‘make: *** [all] Error 2

make完后 redis目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

下面启动redis服务

cd src
./redis-server
注意这种方式启动redis 使用的是默认配置。也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。

redis.conf?是一个默认的配置文件。我们可以根据需要使用自己的配置文件。

在配置redis.conf中 如果需要在redis后台运行,把该项daemonize改为yes

2.redis集群

简介:redis集群搭建一共是6个节点 3主3从 手动新建6个配置文件一致 统一使用6300 6301 端口 每台机器上2个节点 (我使用的是2台机器搭建集群 也可以三台每台两个节点 或者一台上6节点)

cd /data
mkdir cluster
cd cluster
mkdir 6300 6301
cd 6300
touch redis-6300.conf

可根据自己需要对配置文件进行修改 下面是我的配置:

daemonize yes
port 6300
tcp-backlog 511
timeout 60
tcp-keepalive 0
loglevel notice
maxmemory 10gb
databases 16
dir "/home/data/cluster/6300"

slave-serve-stale-data yes

logfile "/home/data/cluster/6300/redis_6300.log"
#slave只读
slave-read-only yes
#not use default
repl-disable-tcp-nodelay yes
slave-priority 100
#打开aof持久化
appendonly yes
#每秒一次aof写
appendfsync everysec
#关闭在aof rewrite的时候对新的写操作进行fsync
no-appendfsync-on-rewrite yes
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
#打开redis集群
cluster-enabled yes
cluster-config-file "/home/data/cluster/6300/nodes-6300.conf"
#节点互连超时的阀值(单位毫秒)
cluster-node-timeout 15000
#一个主节点在拥有多少个好的从节点的时候就要割让一个从节点出来给其他没有从节点或者从节点挂掉的主节点
cluster-migration-barrier 1
#如果某一些key space没有被集群中任何节点覆盖,最常见的就是一个node挂掉,集群将停止接受写入
cluster-require-full-coverage no
#部署在同一机器的redis实例,把auto-aof-rewrite搓开,防止瞬间fork所有redis进程做rewrite,占用大量内存
auto-aof-rewrite-percentage 80
slowlog-log-slower-than 10000
slowlog-max-len 128
notify-keyspace-events "gxE"
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
#Generated by CONFIG REWRITE
maxclients 30000
bind 172.168.55.23

配置文件创建完成后复制到每个节点上 ip 和 端口注意修改

编辑完配置文件后逐一启动各个节点的redis

进入到 redis目录下的src

运行 ./redis-server +节点配置文件的路径

运行之后 在每台机器上查看运行状态 (请提前关闭防火墙和selinux)

或者防火墙开启6300 6300 端口
firewall-cmd?--zone=public?--add-port=6300/tcp?--permanent

firewall-cmd?--zone=public?--add-port=6301/tcp?--permanent

查看是否启动成功

ps -ef | grep redis

netstat -tnlp | grep redis #可以看到redis监听端口

lsof -i:6300 查看6300 6301 是否存在

开始创建集群

前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具:redis-trib.rb ,它是用ruby写的一个程序,所以我们还得安装ruby.

再用 gem 这个命令来安装 redis接口? ? gem是ruby的一个工具包.

通过yum安装

yum install centos-release-scl-rh 

yum install rh-ruby24

scl enable rh-ruby24 bash //必须执行

ruby -v //查看安装版本

注意:想要开机自动启动ruby 需要在家目录下配置环境变量

vim ~/.bash_profile

PATH=/opt/rh/rh-ruby24/root/usr/bin/:$PATH:$HOME/

export LD_LIBRARY_PATH=/opt/rh/rh-ruby24/root/usr/lib64:${LD_LIBRARY_PATH}

下一步
gem install redis

进到redis的src目录下

创建集群

./redis-trib.rb create --replicas 1 172.16.54.23:6300 172.16.54.24:6300 172.16.54.25:6300 172.16.54.23:6301 172.16.54.24:6301 172.16.54.25:6301

中间会有提示 输入yes即可

集群搭建后可以通过

查看cluster状态 redis-trib.rb check 172.16.54.23:6300
查看cluster信息 redis-trib.rb info 172.16.54.23:6300

测试集群是否搭建成功

进入到redis界面

输入 set hello world
Ok

去任意一台从机

执行
./redis-cli -c -p 6300 -h 172.16.54.24
输入
get hello
出现
world
集群搭建成功

还有一种方法 redis 集群如果出现一台master宕机 会自动推选出一台新的主节点
Kill -9 **** 杀掉其中的一台主节点的进程

通过 redis-trib.rb check 172.16.54.23:6300

查看是否有新的master生成

redis cluster命令行

//集群(cluster)??
CLUSTER?INFO? 打印集群的信息??
CLUSTER?NODES? 列出集群当前已知的所有节点(node),以及这些节点的相关信息。???
??
//节点(node)??
CLUSTER?MEET?<ip>?<port>?将?ip?和?port? 所指定的节点添加到集群当中,让它成为集群的一份子。??
CLUSTER?FORGET?<node_id>? 从集群中移除?node_id?指定的节点。??
CLUSTER?REPLICATE?<node_id>? 将当前节点设置为?node_id?指定的节点的从节点。??
CLUSTER?SAVECONFIG? 将节点的配置文件保存到硬盘里面。???
??
//槽(slot)??
CLUSTER?ADDSLOTS?<slot>?[slot?...]? 将一个或多个槽(slot)指派(assign)给当前节点。??
CLUSTER?DELSLOTS?<slot>?[slot?...]? 移除一个或多个槽对当前节点的指派。??
CLUSTER?FLUSHSLOTS? 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。??
CLUSTER?SETSLOT?<slot>?NODE?<node_id>? 将槽?slot?指派给?node_id?指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。??
CLUSTER?SETSLOT?<slot>?MIGRATING?<node_id>? 将本节点的槽?slot?迁移到?node_id?指定的节点中。??
CLUSTER?SETSLOT?<slot>?IMPORTING?<node_id>? 从?node_id?指定的节点中导入槽?slot?到本节点。??
CLUSTER?SETSLOT?<slot>?STABLE?取消对槽?slot?的导入(import)或者迁移(migrate)。???
??
//键?(key)??
CLUSTER?KEYSLOT?<key>? 计算键?key?应该被放置在哪个槽上。??
CLUSTER?COUNTKEYSINSLOT?<slot>? 返回槽?slot?目前包含的键值对数量。??
CLUSTER?GETKEYSINSLOT?<slot>?<count>?返回?count?个?slot?槽中的键。
CLUSTER?RESET?[HARD|SOFT] 集群重置

这些命令都是集群独有的,执行命令得通过redis-cli登录

./redis-cli -c -p 6300 -h 172.16.54.23???//登录??

不同的机器环境会出现不同的问题 下面是我出现过的问题 可用做参考

技术分享图片

这个问题解决可以有两种方法解决:
1.修改配置文件redis.conf的权限参数设置为no,就是不需要权限验证

protected-mode no

2.修改配置文件redis.conf的权限设置安全密码(密码自定义设置)

requirepass “111111”?? #权限密码

我这里是第一解决方法,不需要权限,先kill启动的6个redis进程,在修改配置文件。在继续进行集群搭建

技术分享图片

解决方法:相关文件都在src

1.停止所有redis进程,将需要新增的节点下aof、rdb等本地备份文件删除;
2.同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件,一般为nodes.conf;
3)、再次添加新节点如果还是报错,则登录新Node,./redis-cli –p 端口 对数据库进行清除:
flushdb????? #清空当前数据库
启动redis进程重新执行集群命令

redis基础讲解到此结束 谢谢 有问题可以私信我 我会第一时间回复

以上是关于Redis入门基础详解的主要内容,如果未能解决你的问题,请参考以下文章

Redis入门详解

redis入门详解

Redis详解入门篇

❤ 超强超详细 | Redis入门详解

入门详解MyBatis入门基础详解

redis入门到精通系列:redis的事务详解