Redis高级

作者: 云三木 | 来源:发表于2020-05-15 16:05 被阅读0次

1. 安全性:为Redis添加密码

警告:因为redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K 次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

进入配置文件

vim /usr/local/redis/etc/redis.conf

requirepass 密码明文

重启redis服务

登录(两种)

./redis-cli auth 密码值

推荐,不会在history中遗留密码明文

./redis-cli -a 密码

2. 主从复制

Redis主从复制特点:

Master可以拥有多个slave
多个slave可以连接同一个master外,还可以连接到其它slave
主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
提高系统的伸缩性

Redis主从复制过程:

Slave与master建立连接,发送sync同步命令
Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。
后台完成保存后,就将此文件发送给slave
Slave将此文件保存到硬盘上

1. 不同服务器配置主从


修改从服务器redis配置文件

vim /usr/local/redis/etc/redis.conf

    slaveof <masterip> <masterport>
    #把此句开启,并指定主服务器ip和端口

    masterauth 主机密码明文
    #设定主服务器密码
重启从redis服务器

2. 同一台服务器实现主从配置

复制出从服务器目录

cp -r /usr/local/redis/ /usr/local/redis-slave1

修改redis-slave1配置文件

vim /usr/local/redis-slave1/etc/redis.conf

pidfile /usr/local/redis-slave1/redis.pid
#指定pid文件
port 63791
#指定端口号
dir /usr/local/redis-slave1/
#指定服务器目录
slaveof 127.0.0.1 6379
#指定主服务器IP和端口
masterauth 主机密码明文
#指定主服务器密码
启动redis服务

[root@localhost ~]# netstat -tlun
tcp     0      0 :::6379                     :::*                        LISTEN      
tcp     0      0 :::63791                    :::*                        LISTEN
#验证两个端口是否都启动
4.验证

主从两台数据是否能即时同步

3. 事务处理

 >multi   //开启一个事务
 >set age 10 //暂存指令队列
 >set age 20
 >exec    //开始执行(提交事务)
 或>discard //清空指令队列(事务回滚)

4. 乐观锁

  在事务前对被操作的属性做一个:
 > watch age
 >multi   //开启一个事务(在此期间有其他修改,则此处会失败)
 >set age 10 //暂存指令队列
 >set age 20
 >exec    //开始执行(提交事务)
 或>discard //清空指令队列(事务回滚)

5. 持久化机制(通过修改配置文件做设置)

1. snapshotting(快照)默认方式
  配置    save
    save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
    save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
    save 60 10000
2. Append-only file(aof方式)
  配置 appendonly on 改为yes
  会在bin目录下产生一个.aof的文件

关于aof的配置
appendonly yes //启用aof 持久化方式
# appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
appendfsync everysec //每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
# appendfsync no //完全依赖os,性能最好,持久化没保证

6. 发布及订阅消息

需要开启多个会话端口
会话1:>subscribe tv1      //监听tv1频道
会话2:>subscribe tv1 tv2  //监听tv1和tv2频道
会话3: >publish tv1 消息   //向tv1频道发送一个消息

7. 使用虚拟内存

在redis配置文件中设置
vm-enabled yes          #开启vm功能
vm-swap-file  /tmp/redis.swap   #交换出来的value保存的文件路径
vm-max-memory 1000000   #redis使用的最大内存上限
vm-page-size 32         #每个页面的大小32字节
vm-pages 134217728      #最多使用多少页面
vm-max-threads 4        #用于执行value对象换入患处的工作线程数量

8. 集群(>3.0.0 )

需求:三个主节点,三个从节点对应节点与端口关系如下

127.0.0.1:7000
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
  1. 创建集群(cluster)目录
mkdir -p /usr/local/cluster
cd /usr/local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
  1. 修改配置文件
cp /root/redis-3.0.0/redis.conf /usr/local/cluster/
vi redis.conf
修改配置文件下面选项
port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
修改完将此文件拷贝至每个子目录下
cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
cp /usr/local/cluster/redis.conf /usr/local/cluster/7001
cp /usr/local/cluster/redis.conf /usr/local/cluster/7002
cp /usr/local/cluster/redis.conf /usr/local/cluster/7003
cp /usr/local/cluster/redis.conf /usr/local/cluster/7004
cp /usr/local/cluster/redis.conf /usr/local/cluster/7005

注意:拷贝完后,修改每个文件的端口号,与目录名对应。

  1. 启动6个redis服务
cd /usr/local/cluster/7000/
redis-server redis.conf
cd /usr/local/cluster/7001/
redis-server redis.conf
cd /usr/local/cluster/7002/
redis-server redis.conf
cd /usr/local/cluster/7003/
redis-server redis.conf
cd /usr/local/cluster/7004/
redis-server redis.conf
cd /usr/local/cluster/7005/
redis-server redis.conf
  1. 执行redis命令创建集群
cd /installpath/src/
./redis-trib.rb create --replicas 1 127.0.0.1:7000 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

切换至src目录执行创建集群命令
排错,ruby脚本无ruby环境。
yum -y install ruby rubygems        //软件包分别在两个镜像盘中
gem install redis

再次执行步骤4
交互输入yes
  1. 登陆
redis-cli -c -p 7000
7000 和 7003 为主从
7001 和 7004 为主从
7002 和 7005 为主从

主与主之间随机分配主

PHP操作Redis数据库

Redis扩展安装

常见redis客户端扩展http://redis.io/clients#php,选用最流行的phpredis。

Linux环境安装
下载模块:
wget https://github.com/nicolasff/phpredis/archive/master.zip
下载后模块文件名为master(使用file master查看zip类型,用unzip解压)

解压  
$ unzip master
或
$ unzip phpredis-master.zip

安装

cd phpredis-master
/usr/local/php/bin/phpize 
建立php外挂模块文件
./configure --with-php-config=/usr/local/php/bin/php-config 
make && make install

修改配置
vi /usr/local/php/etc/php.ini 
添加extension=“redis.so”

重启apache

phpinfo可见redis模块

<?php
    $redis=new Redis();
    $redis->connect('127.0.0.1',6379);      //连接
    $redis->auth('youpassword');            //如果没有配置密码,则不需这步
    $redis->set('test','hello redis');      
    echo $redis->get('test');
wamp环境安装
phpinfo检测是否开启

php扩展目录 extension_dir
    php_redis.dll放置到php扩展目录下

php配置文件修改

    extension=php_redis.dll

重启服务
PHP操作Redis
$redis=new Redis();  创建Redis对象
$redis->connect("localhost"); 连接Redis服务器    
$redis->auth("123");   使用密码做登陆验证

Redis的数据应用设计

个人推荐:
Hash类型:适合做数据缓存
List类型:适合做数组搜索
集合类型:适合做好友推送
有序集合类型:适合商品排序

相关文章

  • 一、Redis基础与高级数据结构

    Redis基础与高级数据结构 一、Redis基础与高级数据结构[https://www.jianshu.com/p...

  • Redis在项目上的常用操作【二】

    Redis的高级用法 redis集群 redis 主从复制 概念:持久化保证了即使redis服务重启也不会丢失数据...

  • Redis

    Redis 高级用法 本文旨在介绍一些 Redis 的高级用法。中央缓存结合本地缓存 - 本地缓存数据刷新方案 互...

  • Redis高级

    Redis高级 发布订阅 Redis提供了发布订阅功能,可以用于消息的传输 Redis的发布订阅机制包括三个部分,...

  • Redis高级

    1. 安全性:为Redis添加密码 警告:因为redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可...

  • Redis高级

    Redis高级 事务 redis事务本质:一组命令的集合,一个事务的所有命令都会被序列化,在事务执行的过程中,会按...

  • redis主从、事务与锁、持久化

    分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)

  • redis 介绍和常用命令

    redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-v...

  • 【SpringBoot DB 系列】Redis 高级特性之 Hy

    【SpringBoot DB 系列】Redis 高级特性之 HyperLoglog hyperloglog 算法,...

  • Redis高可用策略与集群方案

    前面几篇Redis的文章《Redis基础与入门实战》《Redis性能优化和高级用法》都是从开发的角度来介绍其在缓存...

网友评论

    本文标题:Redis高级

    本文链接:https://www.haomeiwen.com/subject/ahwcohtx.html