前言:今天我要写一个秒杀功能 为了应对高并发 我决定使用redis队列技术 之前也用过redis队列 但由于时间过久 忘记了如何配置 也因为对Laravel框架的不熟悉 导致产生很多问题 下面就记录一下Lavarel框架下 redis的配置与使用
1:在生产环境安装Redis (一定要记得安装redis 我就是忘了这一步 导致怎么也不成功 … 是不是很无语…唉…控制不住的对自己翻白眼…)
首先 如果是Linux环境 查看是否安装redis 运行下service redis start 如果提示服务已经运行或服务启动,就表示已经安装Redis
windows环境下安装redis:下载安装包 下载地址:https://github.com/MSOpenTech/redis/releases。
打开cmd 进到redis下载的目录下
如输入 D:进入D盘
然后cd Redis 进到Redis目录后
运行redis-server redis.windows.conf
出现这种图案 表示安装运行成功
如果出现 redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error错误
解决方法:在命令行中运行 redis-cli.exe
127.0.0.1:6379>shutdown
not connected>exit
然后重新运行redis-server.exe redis.windows.conf,启动成功!
设置开机自动启动
Linux下安装(这部分我是直接复制别人的 因为我还没在Linux环境下安装过 粘出来是因为万一你们需要呢 如果有坑不许喷 趟过去就是成长 哈哈哈哈哈 )—(嗯我成长了我已经在Linux环境下安装成功了 )
1、下载源码,解压缩后编译源码。
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
2、编译完成后,安装
$ make FREFIX=/usr/local/redis install
其中 FREFIX=/usr/local/redis 为指定的安装路径
3 复制redis.conf文件到安装目录 /usr/local/redis
回到root根目录
$ cd ~
进入redis
$ cd redis-5.0.5
复制
$ cp redis.conf /usr/local/redis
修改配置文件 redis后台启动
$ vim redis.conf
$ i // 进入编辑模式
修改daemonize 参数为yes
保存并退出
Esc :wq
Vim文件时 系统会自动备份出一份文件 ..swp,如果在编辑时未正常退出,该文件会一直存在 执行vim时会提示swap file "..swp" already exists! 这时我们需要手动删除该备份文件 rm . *.swp 删除后再执行vim
Vim编辑模式下 ,不可以用小键盘输入数字
启动redis
$ ./bin/redis-server ./redis.conf
启动时报错 出现了三个警告
解决方法:
考虑到redis一般都是部署在服务器上作为服务存在的。所以,本文的解决方案都是持久性配置,不是临时配置。
第一个警告
将net.core.somaxconn = 1024添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置。
第二个警告
将vm.overcommit_memory = 1添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置。该配置为了redis重启时不丢失数据
第三个警告
将echo never > /sys/kernel/mm/transparent_hugepage/enabled添加到/etc/rc.local中,然后执行source /etc/rc.local生效配置。
然后启动redis
$ ./bin/redis-server ./redis.conf
查看是否启动成功:
$ ps -ef | grep -i redis
关闭redis:
$ ./bin/redis-cli shutdown
设置自动启动
- 设置redis.conf中daemonize为yes,确保守护进程开启
- 编写开机自启动脚本
系统开机启动时会去加载/etc/init.d/下面的脚本,通常而言每个脚本文件会自定义实现程序的启动;若想将新的程序开机自启动,只需在该目录下添加一个自定义启动程序的脚本,然后设置相应规则即可。
如在这里我们在/etc/init.d/下新建一个 redis 的脚本,开机启动时会去加载执行该脚本。
新建脚本
$ vim /etc/init.d/redis
将下面内容粘贴到文件中
#!/bin/sh
#chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379 #端口号,这是默认的,如果你修改了redis.config中的port ,则需要修改
REDISPATH=/usr/local/redis/bin #redis-server启动脚本的所在目录,你如果忘了可以用find / -name redis-server 或whereis redis-server找到
EXEC=${REDISPATH}/redis-server
CLIEXEC=${REDISPATH}/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid #在redis.conf中可找到该路径
CONF="/usr/local/redis/redis.conf" #redis.conf的位置, 如果不和redis-server在同一目录要修改成你的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
退出并保存
Esc
:wq
设置可执行权限
$ chmod 777 /etc/init.d/redis
启动redis
$ /etc/init.d/redis start
查看是否启动成功:
$ ps -ef | grep -i redis
设置开机启动:
$ chkconfig redis on
关机重启测试:
$ reboot
predis/predis 包:** composer require predis/predis
一般larav