版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1333801
Redis
作为面试的重点对象,总是被拿来各种提问,就是为了以后不被同行鄙视,所以自己进行学习一番建议阅读一下文章:【为什么要誓死学好 Redis ?】
Redis
是当前比较热门的 NOSQL
系统之一,它是一个 key-value
存储系统,非关系型数据库
Memcache
类似,但很大程度补偿了 Memcache
的不足,它支持存储的 value
类型相对更多,包括 string、list、set、zset和hash
push/pop、add/remove
及取交集并集和差集及更丰富的操作。在此基础上,Redis
支持各种不同方式的排序字符串、列表(lists)、集合(sets)、有序集合(sorts sets)、哈希表(hashs)
(1)
redis
可以用来做存储(storge)、而memcache
是来做缓存(cache)。这个特点主要是因为其有“持久化”功能 (2) 存储的数据有“结构”,对于memcache
来说,存储的数据,只有一种类型——“字符串”,而redis
则可以存储字符串、链表、集合、有序集合、哈序结构
Redis 将数据存储于内存中,或被配置为使用虚拟内存。
实现数据持久化的两种方式:
(1) 使用截图的方式,将内存中的数据不断写入磁盘(性能高,但可能会引起一定程度的数据丢失) (2) 使用类似
mysql
的方式,记录每次更新的日志
●缓存 ●任务队列 ●应用排行榜 ●网站访问统计 ●数据过期处理 ●分布式集群架构中的session分离
PC
机为 win10(64位)
,可以选择其中的对应版本,然后解压放置于自定义的目录文件夹,比如,我放在了常用的 D 盘: windows
运行(快捷键:windows
键+R
键),输入【cmd】命令,进入DOS 操作系统窗口redis
文件解压的目录下,直接输入命令,启动 redis 服务
redis-server.exe redis.windows.conf
redis-cli.exe
文件,进行简单的测试模式 —— 数据的设置和获取: set key value get key
【备注】:
redis
安装路径配置在环境变量中,此处未做处理…】 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
文件中,添加如下的配置信息,然后重启服务.[Redis]
; php-redis
extension=php_igbinary.dll
extension=php_redis.dll
redis
扩展信息,即说明安装成功.备注
$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 框架为例,需要进行下面的配置
/* 数据缓存设置 */
'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 框架为例,也可直接运行,因为框架本身已做了默认信息的配置:
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
Centos7
下的步骤,所以很难保证满足其他版本的正常指导,但是可以借鉴…
补充:最近发现了一个指导视频,针对于Centos6.5
,也可以参照一下 —— Redis 的安装[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
文件,如果按照他们的指导,基本就能完成安装过程,当然我是那种一读就犯困的种族,下面继续指导步骤好了…[root@bogon redis-3.2.8]# make
src
目录,并进行编译安装[root@bogon redis-3.2.8]# cd src
[root@bogon src]# make install
/usr/local
下,如 apache
等)[root@bogon redis-3.2.8]# mkdir -p /usr/local/redis/etc
[root@bogon redis-3.2.8]# mkdir -p /usr/local/redis/bin
【提示】:
p
是递归创建。redis-3.2.8
文件夹下的 redis.conf
复制到 /usr/local/redis/etc/
目录redis-3.2.8/utils
文件夹下的 redis_init_script
也复制到 /usr/local/redis/etc/
目录
【参考附录3,此文件可用于开机启动的设置】src
目录下多生成的那几个文件,移动到 /usr/local/redis/bin/
目录[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/
/usr/local/redis/bin
,要指定配置文件启动 Redis
服务
【提示】:其实跟 windows
中的启动方式一致,如果不指定配置文件,那么配置文件中的信息是不会生效的[root@bogon bin]# redis-server ../etc/redis.conf
你会注意到,如果不做修改,当用这种方式开启
Redis
服务后,就无法进行其他操作了,所以应该将Redis
服务放置到后台运行
usr/local/redis/etc/redis.conf
文件,将其中的 daemonize
配置项更改为 yes
,然后再进行 Redis
服务的启动,此时可以查看一下 Redis
服务的运行情况.ps -ef | grep redis #或者:ps aux|grep redis-server
注:
daemonize
表示配置的Redis
是前台还是后台启动,yes
表示后台启动port
默认是6379
,建议生产环境可以进行修改,因为可能会出现多例或安全性的问题
Redis
客户端[root@bogon bin]# redis-cli
[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
一行,注释掉 systemctl stop firewalld
windows
系统中打开 cmd
输入telnet 192.168.236.131 6379
(telnet ip port
)测试是否可以正常连接,如果能连通则表示可以正常连接usr/local/redis/etc/redis.conf
的问题: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.
Redis
从 3.2
开始加强了安全管理保护机制的设置,那么可以进行下面的更改修改
redis
的守护进程为no
【不启用 】 ,搜索protected-mode
,进行修改:
192.168.1.114
): 此时,即可以满足已安装
php-redis
扩展的项目远程或本地使用Redis
服务的操作了,快去深入学习Redis
的实战使用技巧吧 … 注意 :阿里云服务器
,需要在安全组
中进行端口设置 坑了我好半天!-2018-03-30 记
php-redis
扩展yum -y install php-pecl-redis
1 vim /etc/php.ini
2 加入:
3 extension=redis.so
php-redis
扩展安装成功. 【提示】:
Redis
服务ps -ef | grep redis
6379
端口是否在监听netstat -lntp | grep 6379
Redis
服务pkill redis-server # 也可以使用命令:redis shutdown
[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]#
systemctl disable firewalld.service
systemctl startfirewalld.service
systemctl stop firewalld.service
此为 Centos7 下的操作指导 参考文章:linux centOS7 设置 redis 开机启动
redis.conf
文件中的 daemonize
改为 yes
;redis 源码
里的初始化脚本文件,如果参照了我的步骤,此时的文件即为 /usr/local/redis/redis/etc/redis_init_script
,打开可以看到其中的内容: chkconfig
和 description
两行 ,不然会提示 "服务 redisd 不支持 chkconfig"
,同时已经根据自己的配置路径修改了配置信息,修改后的源码如下:#!/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/
目录下,此时可以随意命名cp redis_init_script /etc/init.d/redis
chkconfig redis on
打开服务 : service redis startundefined 关闭服务 : service redis stop
Redis 服务
#reboot
Redis
服务的查看命令,即可注意到该服务自行开启了,并且之前存入的key值
并未消失.