redis非关系型数据库+redis集群

软件包提取码:w5hy
redis: 非关系型数据库,基于键值对形式的数据库,查询效率高没有表之间的约束查询起来比较方便
特点:

  • 支持多种的数据类型
  • 支持分布式存储
  • 功能集比较丰富
  • 开源
  • 缓存:缓存动态数据 提高客户端的访问速度减轻数据库的压力读redis 在mysq|上写入数据
    redis和memcache区别
  • redis能够将数据持久化memcache所有的数据都是存放在内存中的 不能进行持久化memcache宕机或者重启,其中的数据将会全部丢失。
  • redis能够支持多种数据类型memcache只能支持 字符串
  • redis单进程单线程的访问memcache是多线程的工作模式
  • redis虽然是单线程的工作模式,但是redis使用了线程多路复用的功能,提高了redis的性能redis —多个进程— 单个线程
  • redis的缓存数据尽量小一-些, memcahe数据块可以比较大- -些
    redis的持久化: 有周期性 需要时间
    redis先将数据缓存在内存中,可以通过周期,把缓存的内容中的内容通过aof和rdb的方式写入硬盘当中(数据不会丢失)需要更新
    redis中缓存的数据:
  • 不经常修改的数据 例如:用户信息 商品简介 商品分类
  • 查询效率比较高的 提高用户的访问速度
    不适合缓存的数据:
  • 需要和数据库强一致性
    redis的穿透:
  • 当请求为不正常的请求,redis查询不到对应的数据 直接去数据库上请求,会让数据不太安全
    解决方式:拒绝空连接或不正常的数据
    redis的雪崩:
  • 当请求过大,查询时间长积压了很多请求,redis宕机对于redis的请求会全部转移到MySQL
    解决方法:设置最大连接
    reids的常用的命令:
  • select 切换数据库 redis默认有16个数据库 (0-15)
  • set 创建键值对 如果键对存在,会直接覆盖掉
    set key value
  • get 查看指定的键值对get key
  • mset 批量创建键值对
    mset key1 value key2 value
  • append 对于指定的键的值的内容进行追加
    append key append value
  • keys * 查看所有数据库中的键
  • dbsize 统计数据库中的键的个数
  • move 对于键值对进行迁移
    move key db
  • del 删除指定的键值对 可以有多个
    del key1 key2
  • flushall 清空数据库中所有的键值对
    整合lnmp
[root@CentOS2 ~]# vim /usr/local/nginx/conf/nginx.conf
fastcgi_pass   192.168.1.2:9000;

安装redis

[root@CentOS2 ~]# tar zxf redis-4.0.6.tar.gz 
[root@CentOS2 ~]# mv redis-4.0.6 /usr/local/redis
[root@CentOS2 ~]# cd /usr/local/redis/
[root@CentOS2 redis]# make && make install
[root@CentOS2 redis]# vim redis.conf
 69 bind 192.168.1.2
 136 daemonize yes
[root@CentOS2 redis]# redis-server /usr/local/redis/redis.conf	#启动服务
[root@CentOS2 redis]# netstat -anput | grep redis
tcp        0      0 192.168.1.2:6379        0.0.0.0:*               LISTEN      26803/redis-server  
[root@CentOS2 redis]# redis-cli -h 192.168.1.2 -p 6379	#登录redis
#php打模块
[root@CentOS1 ~]# unzip phpredis-develop.zip
[root@CentOS1 ~]# cd phpredis-develop/
[root@CentOS1 phpredis-master]# phpize
[root@CentOS1 phpredis-master]# ./configure --with-php-config=/usr/local/php/bin/php-config && make && make install
[root@CentOS1 phpredis-master]# vim /usr/local/php/php.ini
#末尾处添加
extension = redis.so
[root@CentOS1 phpredis-master]# mysql -uroot -p123.com
create database abc;
use abc
create table test(id int,name varchar(10));
insert into test values(1,"one"),(2,"two"),(3,"three"),(4,"four"),(5,"five");
grant all on abc.test to "root"@"192.168.1.2" identified by "123.com";
grant all on abc.test to "root"@"主机名" identified by "123.com";
flush privileges;
exit

7版本页面

[root@CentOS2 ~]# vim /usr/local/nginx/html/index.php
<?php
$redis=new Redis;
$redis->connect("192.168.1.2",6379) or die ("could not connect");
$query="select * from abc.test limit 5";
for ($key=1;$key<=5;$key++) {
        if (!$redis->get($key)) {
                $conn=mysqli_connect("192.168.1.2","root","123.com");
                $result=mysqli_query($conn,$query);
                while ($row=mysqli_fetch_assoc($result)) {
                        $redis->set($row["id"],$row["name"]);
                }
                break;
        }
        else {
                $name="redis";
                $data[$key]=$redis->get($key);
        }
}
echo $name;
echo "<br>";
for ($key=1;$key<=5;$key++) {
        echo "id is $key";
        echo "<br>";
        echo "name is $data[$key]";
        echo "<br>";
}
?>

redis集群
redis来缓存mysql的数据的
因为mysql的数据随着用户不断的增加,导致redis的空间不够缓存mysql的数据,那么就可以使用多台redis组成一个组,形成一个集群,来扩大redis的缓存数据量
redis集群 最少3个节点,为了保证数据的安全,3个节点还需要3个备份
每个3个主节点之间的地位都是平等的,他们之间不分主从,每个上面都会有连接
redis是通过hash槽点来进行分配数据的
redis总共有16384个槽点(0-16383)
redis集群中数据是在槽点上的 槽点在哪里 数据就在哪里
将这些槽点分配平均到每一个主节点上,只有槽点的节点才会进行工作,主节点上有槽点,从节点是没有槽点的,当主节点宕机,从节点会接收槽点,保存数据,并从节点会变为主节点,当主修好之后,添加回集群,会变成从节点
当在实际生产环境当中 要注意 备份节点和主节点不要部署在同一台主机上 要交叉排放
数据算法 crc16(key)%16383=100
缓存流程
客户端发送请求(key) redis(集群)crc16算法,将当前的请求交给合适的redis,比如是第一个主节点,如果第一个主节点上没有匹配到数据,则去后端mysql上获取数据,mysql会直接返回给客户端,在客户端的同时,也会给redis发送一份,做为缓存,如果客户端再次访问同样的数据,则还是会将请求交给第一个的节点,这样redis将会把数据直接返回给客户端
通过多个端口实现redis集群

[root@CentOS2 html]# killall -9 redis-server
[root@CentOS2 html]# netstat -anput | grep redis-server
[root@CentOS2 ~]# mkdir /usr/local/cluster
[root@CentOS2 ~]# cd /usr/local/cluster/
[root@CentOS2 cluster]# mkdir {7000..7005}
[root@CentOS2 cluster]# cp /usr/local/redis/redis.conf 7000/
[root@CentOS2 cluster]# vim 7000/redis.conf
69 bind 192.168.1.2  #监听的ip
92 port 7000     #端口
136 daemonize yes   #后台运行
672 appendonly yes   #开启持久化
676 appendfilename "appendonly-7000.aof"    #持久化文件
814 cluster-enabled yes   #开启集群功能
822 cluster-config-file nodes-7000.conf   #集群节点的配置文件
828 cluster-node-timeout 5000   #节点连接超时时间
[root@CentOS2 cluster]# cp 7000/redis.conf 7001/
[root@CentOS2 cluster]# cp 7000/redis.conf 7002/
[root@CentOS2 cluster]# cp 7000/redis.conf 7003/
[root@CentOS2 cluster]# cp 7000/redis.conf 7004/
[root@CentOS2 cluster]# cp 7000/redis.conf 7005/
[root@CentOS2 cluster]# sed -i "s/7000/7001/g" 7001/redis.conf 
[root@CentOS2 cluster]# sed -i "s/7000/7002/g" 7002/redis.conf 
appendfilename "appendonly-7002.aof"
cluster-config-file nodes-7002.conf
[root@CentOS2 cluster]# sed -i "s/7000/7003/g" 7003/redis.conf 
[root@CentOS2 cluster]# sed -i "s/7000/7004/g" 7004/redis.conf 
[root@CentOS2 cluster]# sed -i "s/7000/7005/g" 7005/redis.conf 
[root@CentOS2 cluster]# redis-server 7000/redis.conf
[root@CentOS2 cluster]# redis-server 7001/redis.conf
[root@CentOS2 cluster]# redis-server 7002/redis.conf
[root@CentOS2 cluster]# redis-server 7003/redis.conf
[root@CentOS2 cluster]# redis-server 7004/redis.conf
[root@CentOS2 cluster]# redis-server 7005/redis.conf
[root@CentOS2 cluster]# yum -y install ruby
[root@CentOS2 cluster]# cd
[root@CentOS2 ~]# gem install redis-3.3.0.gem 
[root@CentOS2 ~]# ln -s /usr/local/redis/src/redis-trib.rb /usr/bin/
[root@CentOS2 ~]# redis-trib.rb create --replicas 1 192.168.1.2:7000 192.168.1.2:7001 192.168.1.2:7002 192.168.1.2:7003 192.168.1.2:7004 192.168.1.2:7005
[root@CentOS2 ~]# redis-trib.rb check 192.168.1.2:7000

–replicas 1 指定主节点上面从节点节点的个数
多台主机 请写对应的ip 主节点是随机的 如果需要设置交叉排放 需要搭建好之后自己调整
如果想一次成功 前三台 一般为主节点 后面为从节点
验证

[root@CentOS2 ~]# redis-cli -h 192.168.1.2 -p 7000 -c
192.168.1.2:7000> set name jskdljfslkdjfosilkjfndlskfj
-> Redirected to slot [5798] located at 192.168.1.2:7001
OK
192.168.1.2:7001> set qqqqqqsafkjasjkg   rrrr
-> Redirected to slot [12773] located at 192.168.1.2:7002
OK
192.168.1.2:7000> set gsjdkfhisdkhfkajdfhjkldsfhajlkhfldasjkhfhj llll
-> Redirected to slot [13396] located at 192.168.1.2:7002
OK

当随意停掉一 个主接点时,从节点将会变成主节点
178 netstat -anput| grep 7000
179 kill -9 58869
181 redis-trib.rb check 192.168.1.2:7001
重新启动之后没有槽点了(如果是高版本 当这个节点再次启动会自动加入到集群中成为从节点)
182 redis-server /usr/local/cluster/7000/redis.conf
183 redis-trib.rb check 192.1 68.2.20:7000
redis-trib.rb
create创建集群–replicas 指定从节 点的个数
reshard槽点重新分配
check
检查集群
info查看集群的详情信息
add-node添加节点默认为主节点
add-node --slave 添加从节点–master-id 指定主节点
del-node删除节点删除没有槽点的节点可以删除有槽点的节点不能删除
redis-trib.rb

  • create 创建集群
  • –replicas 指定从节点个数
  • reshard槽点重新分配
  • check检查集群
  • info查看集群的详情信息
  • add-node添加节点默认为主节点
  •  --slave添加从节点 
     --master-id 指定主节点 
    
  • del-node删除节点删除没有槽点的节点可以删除有槽点的节点不能删除

添加从节点

[root@CentOS2 ~]# cd /usr/local/cluster/
[root@CentOS2 cluster]# mkdir 7006 
[root@CentOS2 cluster]# cp 7000/redis.conf 7006/
[root@CentOS2 cluster]# sed -i "s/7000/7006/g" 7006/redis.conf 
[root@CentOS2 cluster]# cat 7006/redis.conf | grep 7006
port 7006
appendfilename "appendonly-7006.aof"
cluster-config-file nodes-7006.conf
[root@CentOS2 cluster]# redis-server 7006/redis.conf 
[root@CentOS2 cluster]# redis-trib.rb check 192.168.1.2:7000
e6e0230df1df53941ddee974ba788b16a04d748a
 192  redis-trib.rb add-node --slave --master-id e6e0230df1df53941ddee974ba788b16a04d748a 192.168.1.2:7006 192.168.1.2:7003     主节点的id    从节点的ip    主节点的ip
  193  redis-trib.rb check 192.168.1.2:7000
[root@CentOS2 cluster]# redis-trib.rb info 192.168.1.2:7000
192.168.1.2:7000 (f6a5cc79...) -> 2 keys | 5462 slots | 1 slaves.
192.168.1.2:7003 (e6e0230d...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.2:7005 (8d33a34c...) -> 1 keys | 5461 slots | 1 slaves.

添加新节点

[root@CentOS2 cluster]# mkdir 7006
[root@CentOS2 cluster]# cp 7000/redis.conf  7006/
[root@CentOS2 cluster]# sed -i "s/7000/7006/g" 7006/redis.conf 
[root@CentOS2 cluster]# cat 7006/redis.conf | grep 7006
[root@CentOS2 cluster]# redis-server 7006/redis.conf 

添加主节点

[root@CentOS2 cluster]# mkdir 7007
[root@CentOS2 cluster]# cp 7000/redis.conf 7007
[root@CentOS2 cluster]# sed -i "s/7000/7007/g" 7007/redis.conf 
[root@CentOS2 cluster]# redis-server 7007/redis.conf 
[root@CentOS2 cluster]# redis-trib.rb add-node 192.168.1.2:7007 192.168.1.2:7000
[root@CentOS2 cluster]# redis-trib.rb check 192.168.1.2:7000	#查看集群信息
#找到7007节点复制他的uuid
eb64891fb57ee8bf2bd29460faf5a0e0c0debfd2
#重新分配槽点
[root@CentOS2 cluster]# redis-trib.rb reshard 192.168.1.2:7000	#重新分配集群的槽点
How many slots do you want to move (from 1 to 16384)? 4096
What is the receiving node ID? eb64891fb57ee8bf2bd29460faf5a0e0c0debfd2(7007的uuid)	#要给那个主节点移动
Source node #1:all	#从所有节点总共移动4096
Do you want to proceed with the proposed reshard plan (yes/no)? yes
[root@CentOS2 cluster]# redis-trib.rb check 192.168.1.2:7000	#查看群集
#会发现7007有了槽点而且是其他几个主节点都有分配

删除从节点

[root@CentOS2 cluster]# redis-trib.rb check 192.168.1.2:7000
#找到要删除从节点的uuid
[root@CentOS2 cluster]# redis-trib.rb del-node 192.168.1.2:7000 0d5668f1af10b650346f612e0644be750ce6f82a	#从节点的uuid

删除整个集群

[root@CentOS2 cluster]# cd /usr/local/cluster/
[root@CentOS2 cluster]# rm -rf nodes-700*
[root@CentOS2 cluster]# rm -rf appendonly-700*
[root@CentOS2 cluster]# ls
[root@CentOS2 cluster]# killall -9 redis-server
[root@CentOS2 cluster]# netstat -anput | grep redis-server
[root@CentOS2 cluster]# redis-server 7000/redis.conf 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值