前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 的安装与拓展操作指导(Windows+Linux)

Redis 的安装与拓展操作指导(Windows+Linux)

作者头像
泥豆芽儿 MT
发布2018-09-11 11:32:49
7020
发布2018-09-11 11:32:49
举报
文章被收录于专栏:木头编程 - moTzxx

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1333801

(一)背景

  • Redis 作为面试的重点对象,总是被拿来各种提问,就是为了以后不被同行鄙视,所以自己进行学习一番
  • 而此过程总不会一帆风顺,所以将自己的经验进行整理,一方面锻炼自己的文字表达能力,可以帮助小白们少走弯路,另一方面自然是为了强化自己的记忆,避免遗忘
  • 内容难以详尽概括,仅此而已,欢迎指摘 …
  • 系统: windows10 、PHP7.0.12 centos7、PHP7

(二)概述

建议阅读一下文章:【为什么要誓死学好 Redis ?】

①. Redis 介绍

  • Redis 是当前比较热门的 NOSQL 系统之一,它是一个 key-value 存储系统,非关系型数据库
  • Memcache 类似,但很大程度补偿了 Memcache 的不足,它支持存储的 value 类型相对更多,包括 string、list、set、zset和hash
  • 这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作。在此基础上,Redis 支持各种不同方式的排序

②. 基础知识

  • 1、Redis 的数据类型:

字符串、列表(lists)、集合(sets)、有序集合(sorts sets)、哈希表(hashs)

  • 2、Redis 和 memcache 相比的独特之处:

(1) redis 可以用来做存储(storge)、而 memcache 是来做缓存(cache)。这个特点主要是因为其有“持久化”功能 (2) 存储的数据有“结构”,对于 memcache 来说,存储的数据,只有一种类型——“字符串”,而 redis 则可以存储字符串、链表、集合、有序集合、哈序结构

  • 3、持久化的两种方式:

Redis 将数据存储于内存中,或被配置为使用虚拟内存。

实现数据持久化的两种方式:

(1) 使用截图的方式,将内存中的数据不断写入磁盘(性能高,但可能会引起一定程度的数据丢失) (2) 使用类似mysql的方式,记录每次更新的日志

  • 4、Redis 的主从同步:对提高读取性能非常有益
  • 5、Redis 服务端的默认端口是 6379

③. Redis 的使用场景

●缓存 ●任务队列 ●应用排行榜 ●网站访问统计 ●数据过期处理 ●分布式集群架构中的session分离

(三)windows 下的安装操作

  • 注意自己安装环境的异同之处,按实际情况进行处理.

①. 下载对应软件

②. 压缩包处理

  • 因为我的 PC 机为 win10(64位),可以选择其中的对应版本,然后解压放置于自定义的目录文件夹,比如,我放在了常用的 D 盘:

③. redis 的安装

  • windows运行(快捷键:windows+R键),输入【cmd】命令,进入DOS 操作系统窗口
  • 然后切换到 redis 文件解压的目录下,直接输入命令,启动 redis 服务
代码语言:javascript
复制
redis-server.exe  redis.windows.conf

④. 简单测试

  • 然后直接打开安装目录下的 redis-cli.exe 文件,进行简单的测试

模式 —— 数据的设置和获取: set key value get key

【备注】:

  1. 网上的部分参考信息表示,在进行 Redis 服务使用的时候,不要关闭该窗口,以免受到影响
  2. 个人测试了一下,发现:在进行 PHP代码提示的时候,双击打开安装目录下的 redis-server.exe 文件就可以,【但不建议】
  3. 因为此处不带任何参数的情况,采用的是默认的配置文件,而我们自己的配置文件并不能生效,这个只适用于简单的测试环境,生成环境需要自己制定一个配置文件,所以下面的存在一个警告提示【或者根据一些网上的建议,需要将 redis 安装路径配置在环境变量中,此处未做处理…】

5. redis 扩展实现

  • ① 打印 phpinfo 信息 - –phpinfo();,可直接搜索关键词 “Extension”

【注意】: 要根据自己的PHP版本搜索对应的 redis 扩展文件,个人理解以“ php_redis-3.1.5-7.0-nts-vc14-x64.zip” 命名为例: 3.1.5 代表 redis 扩展的版本 7.0 代表 PHP 版本 nts-vc14 代表PHP 解析服务版本xxxx 非线程安全 x86 代表系统要求(tip:我用的是phpStudy 集成环境)

  • ③ 将下载的压缩包进行解压

将下载解压后的 php_redis.pdb 和 php_redis.dll 文件放入php 的 ext 目录下

  • ④ 同理,搜索并下载对应的 igbinary 文件【这一步即便不操作,有时也不影响!】

将下载解压后的 php_igbinary.dll 和 php_igbinary.pdb 文件也放入php 的 ext 目录下

  • ⑤ 在 php.ini 文件中,添加如下的配置信息,然后重启服务.
代码语言:javascript
复制
[Redis]
; php-redis
extension=php_igbinary.dll
extension=php_redis.dll
  • ⑥ 此时进行页面刷新【尽量重新打开页面,有时会因为缓存看不到信息】,可以看到 redis 扩展信息,即说明安装成功.

备注

(四)PHP 简单代码测试

  • 前提是:当前的系统已经配置了 php-redis 扩展,不然代码是无法生效的哦 !

① 代码编写

代码语言:javascript
复制
$redis = new \Redis();
$redis->connect('127.0.0.1', '6379');
$redis->set('say','moTzxx say hello !');
echo $redis->get('say');
phpinfo();
die;

我遇到过一种情况,两个虚拟机安装配置按照相同的操作进行,最后两者打印 phpinfo()时都显示了 redis的扩展,但是,一个可以访问其他虚拟机的服务器,而另一个就是不能执行 $redis->get()/set() 操作。毕竟这台服务器是可以被其他访问的,几乎排除了所有阻碍的可能性,真真是找不到原因,在此牢骚一番…

② 进行配置信息添加

  • 可视情况而判断添加与否!

1>. 若不是用框架,无需此步 2>. 如果以ThinkPHP3.2.3 框架为例,需要进行下面的配置

代码语言:javascript
复制
 /* 数据缓存设置 */
 'DATA_CACHE_PREFIX' => 'Redis_',//缓存前缀
 'DATA_CACHE_TYPE'=>'Redis',//默认动态缓存为Redis
 'REDIS_RW_SEPARATE' => true, //Redis读写分离 true 开启
 'REDIS_HOST'=>'127.0.0.1', //redis服务器ip,多台用逗号隔开;读写分离开启时,第一台负责写,其它[随机]负责读;
 'REDIS_PORT'=>'6379',//端口号
 'REDIS_TIMEOUT'=>'300',//超时时间
 'REDIS_PERSISTENT'=>false,//是否长连接 false=短连接
 'REDIS_AUTH'=>'',//AUTH认证密码

3>. 如果以 Laravel5.5 框架为例,也可直接运行,因为框架本身已做了默认信息的配置:

代码语言:javascript
复制
'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

    ],

③ 得到的结果如下:

(五)Linux 下的安装操作

  • 提示,操作指导为 Centos7 下的步骤,所以很难保证满足其他版本的正常指导,但是可以借鉴… 补充:最近发现了一个指导视频,针对于Centos6.5,也可以参照一下 —— Redis 的安装

①. 下载 redis 源文件

  • 运行下面的命令
代码语言:javascript
复制
[root@bogon download]# wget http://download.redis.io/releases/redis-3.2.8.tar.gz
[root@bogon download]# tar xzf redis-3.2.8.tar.gz
[root@bogon download]# cd redis-3.2.8
  • 如果提示没有 wget 命令,需要先运行yum install wget 安装 wget 工具,比如我的操作
  • 可以看到有如下的文件
  • 其实,英语好些的,强烈建议你去读读他们所提供的 README.md 文件,如果按照他们的指导,基本就能完成安装过程,当然我是那种一读就犯困的种族,下面继续指导步骤好了…

②. 编译源程序

  • 编译执行
代码语言:javascript
复制
[root@bogon redis-3.2.8]# make
  • 一般会有如下的提示信息:

③. 编译安装

  • 编译成功之后,进入src 目录,并进行编译安装
代码语言:javascript
复制
[root@bogon redis-3.2.8]# cd src
[root@bogon src]# make install
  • 此时会有如下的提示信息,无伤大雅
  • 如果你的界面比较清晰,可以注意到此时生成了几个文件【颜色加深的文件

④. 移动文件

  • 移动文件,便于管理:(所有源代码安装的软件都安装在 /usr/local 下,如 apache 等)
代码语言:javascript
复制
[root@bogon redis-3.2.8]# mkdir -p /usr/local/redis/etc
[root@bogon redis-3.2.8]# mkdir -p /usr/local/redis/bin

【提示】:

  1. p 是递归创建。
  2. redis-3.2.8 文件夹下的 redis.conf 复制到 /usr/local/redis/etc/ 目录
  3. redis-3.2.8/utils 文件夹下的 redis_init_script 也复制到 /usr/local/redis/etc/ 目录 【参考附录3,此文件可用于开机启动的设置】
  4. src 目录下多生成的那几个文件,移动到 /usr/local/redis/bin/ 目录
  5. 执行操作命令
代码语言:javascript
复制
[root@bogon redis-3.2.8]# cp redis.conf /usr/local/redis/etc/redis.conf
[root@bogon redis-3.2.8]# cp utils/redis_init_script /usr/local/redis/etc/redis_init_script
[root@bogon src]# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb  /usr/local/redis/bin/

⑤. 启动 Redis 服务

  • 进入移动文件后的目录 /usr/local/redis/bin,要指定配置文件启动 Redis 服务 【提示】:其实跟 windows 中的启动方式一致,如果不指定配置文件,那么配置文件中的信息是不会生效的
代码语言:javascript
复制
[root@bogon bin]# redis-server ../etc/redis.conf 

你会注意到,如果不做修改,当用这种方式开启 Redis 服务后,就无法进行其他操作了,所以应该将 Redis 服务放置到后台运行

  • 此时,你可以修改 usr/local/redis/etc/redis.conf 文件,将其中的 daemonize 配置项更改为 yes ,然后再进行 Redis 服务的启动,此时可以查看一下 Redis 服务的运行情况.
代码语言:javascript
复制
ps -ef | grep redis #或者:ps aux|grep redis-server

注: daemonize 表示配置的 Redis 是前台还是后台启动, yes 表示后台启动 port 默认是 6379,建议生产环境可以进行修改,因为可能会出现多例或安全性的问题

⑥. 客户端测试

  • 启动 Redis 客户端
代码语言:javascript
复制
[root@bogon bin]# redis-cli
  • 也可以创建软链接
代码语言:javascript
复制
[root@bogon bin]# ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis

⑦. 远程访问

【注意】:

每次修改完配置文件后,需要重启 Redis 服务,且要求使用指定配置文件路径的方式,才能生效。以我的执行操作为例,则为 : [root@bogon bin]# redis-server ../etc/redis.conf

  • 一般要将 redis.conf 配置文件中的 bind 127.0.0.1 一行,注释掉
  • 并且关闭防火墙
代码语言:javascript
复制
systemctl stop firewalld 
  • windows 系统中打开 cmd 输入telnet 192.168.236.131 6379telnet ip port)测试是否可以正常连接,如果能连通则表示可以正常连接
  • 如果测试出现下面的信息,说明是配置文件 usr/local/redis/etc/redis.conf 的问题:
代码语言:javascript
复制
DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
  • 根据广大网友的提示,因为 Redis3.2 开始加强了安全管理保护机制的设置,那么可以进行下面的更改

修改 redis 的守护进程为 no 【不启用 】 ,搜索 protected-mode ,进行修改:

  • 继续上面的操作,可以得到如下效果,说明可以远程访问(注:我的本机 IP 为 192.168.1.114):

此时,即可以满足已安装 php-redis 扩展的项目远程或本地使用 Redis 服务的操作了,快去深入学习 Redis 的实战使用技巧吧 … 注意 : 阿里云服务器,需要在安全组中进行端口设置 坑了我好半天!- 2018-03-30 记

⑧. php 中使用 redis

  • 安装 php-redis 扩展
代码语言:javascript
复制
yum -y install php-pecl-redis 
  • php 中开启 redis 模块
代码语言:javascript
复制
1 vim /etc/php.ini
2 加入:
3 extension=redis.so
  • 重启apache, 查看phpinfo(),如果有以下信息,说明 php-redis 扩展安装成功.

【提示】

  1. 建议可以参考一个 慕课网视频 — php 的 redis 扩展安装
  2. 基本命令请见 附录

(六)附录

①. 推荐文章

②. 补充基本命令

  • 检测后台进程是否存在 Redis 服务
代码语言:javascript
复制
ps -ef | grep redis
  • 检测 6379 端口是否在监听
代码语言:javascript
复制
netstat -lntp | grep 6379
  • 关闭 Redis 服务
代码语言:javascript
复制
pkill redis-server   # 也可以使用命令:redis shutdown
  • 检测是否有安装 redis-cli 和 redis-server
代码语言:javascript
复制
[root@bogon bin]# whereis redis-cli
redis-cli: /usr/local/bin/redis-cli
[root@bogon bin]# whereis redis-server
redis-server: /usr/local/bin/redis-server
[root@bogon bin]# 
  • 对于自己测试的虚拟机,经常需要关闭防火墙测试,可建议下面的命令,实现 开机默认关闭防火墙
代码语言:javascript
复制
systemctl disable firewalld.service  
  • 开启防火墙
代码语言:javascript
复制
systemctl startfirewalld.service 
  • 关闭防火墙
代码语言:javascript
复制
systemctl stop firewalld.service 

③. Linux 下的另一种推荐安装方式

④. Linux 添加开机启动 Redis 服务

此为 Centos7 下的操作指导 参考文章:linux centOS7 设置 redis 开机启动

  • 首先,我们要把 redis.conf 文件中的 daemonize 改为 yes
  • 打开前面我们所下载的 redis 源码 里的初始化脚本文件,如果参照了我的步骤,此时的文件即为 /usr/local/redis/redis/etc/redis_init_script,打开可以看到其中的内容:
  • 注意其中不同的是,我增加了 chkconfigdescription两行 ,不然会提示 "服务 redisd 不支持 chkconfig",同时已经根据自己的配置路径修改了配置信息,修改后的源码如下:
代码语言:javascript
复制
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database

REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/etc/redis.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac
~
  • 拷贝启动文件到 /etc/init.d/ 目录下,此时可以随意命名
代码语言:javascript
复制
cp redis_init_script /etc/init.d/redis
  • 设置为开机自启动服务器
代码语言:javascript
复制
chkconfig redis on 

打开服务 : service redis startundefined 关闭服务 : service redis stop

  • 重启系统,可以查看是否自行启动了 Redis 服务
代码语言:javascript
复制
#reboot
  • 输入 Redis 服务的查看命令,即可注意到该服务自行开启了,并且之前存入的key值 并未消失.
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年02月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (一)背景
  • (二)概述
    • ①. Redis 介绍
      • ②. 基础知识
        • ③. Redis 的使用场景
        • (三)windows 下的安装操作
          • ①. 下载对应软件
            • ②. 压缩包处理
              • ③. redis 的安装
                • ④. 简单测试
                  • 5. redis 扩展实现
                  • (四)PHP 简单代码测试
                    • ① 代码编写
                      • ② 进行配置信息添加
                        • ③ 得到的结果如下:
                        • (五)Linux 下的安装操作
                          • ①. 下载 redis 源文件
                            • ②. 编译源程序
                              • ③. 编译安装
                                • ④. 移动文件
                                  • ⑤. 启动 Redis 服务
                                    • ⑥. 客户端测试
                                      • ⑦. 远程访问
                                        • ⑧. php 中使用 redis
                                        • (六)附录
                                          • ①. 推荐文章
                                            • ②. 补充基本命令
                                              • ③. Linux 下的另一种推荐安装方式
                                                • ④. Linux 添加开机启动 Redis 服务
                                                相关产品与服务
                                                云数据库 Redis®
                                                腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档