redis

Redis实现分布式锁思路

    思路很简单,主要用到的redis函数是setnx(),这个应该是实现分布式锁最主要的函数。首先是将某一任务标识名(这里用Lock:order作为标识名的例子)作为键存到redis里,并为其设个过期时间,如果是还有Lock:order请求过来,先是通过setnx()看看是否能将Lock:order插入到redis里,可以的话就返回true,不可以就返回false。当然,在我的代码里会比这个思路复杂一些,我会在分析代码时进一步说明。

Redis实现任务队列

    这里的实现会用到上面的Redis分布式的锁机制,主要是用到了Redis里的有序集合这一数据结构。例如入队时,通过zset的add()函数进行入队,而出对时,可以用到zset的getScore()函数。另外还可以弹出顶部的几个任务。

  以上就是实现 分布式锁 和 任务队列 的简单思路,如果你看完有点模棱两可,那请看接下来的代码实现。      

redis漏洞

解决方案

临时解决方案

配置bind选项, 限定可以连接Redis服务器的IP, 并修改redis的默认端口6379.

配置AUTH, 设置密码, 密码会以明文方式保存在redis配置文件中.

配置rename-command CONFIG “RENAME_CONFIG”, 这样即使存在未授权访问, 也能够给攻击者使用config指令加大难度

好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config

安装

wget http://download.redis.io/redis-stable.tar.gz

tar xvzf redis-stable.tar.gz

cd redis-stable

make (安装失败可能是因为一些依赖包没有安装,自行根据报错解决)

make test 测试redis是否正确安装

将src下面的redis-server和redis-cli放到/usr/local/bin下面(不用进入src就可以运行命令,很方便)

建立redis配置目录

mkdir /etc/redis

mkdir /var/redis

mkdir /var/redis/log

mkdir /var/redis/run

mkdir /var/redis/6379

复制配置模板文件 cp redis.conf /etc/redis/6379.conf

修改配置项

bind 0.0.0.0

daemonize yes

pidfile /var/redis/run/redis_6379.pid

logfile /var/redis/log/redis_6379.log

dir /var/redis/6379

redis-server /etc/redis/6379.conf(这是启动redis相应配置的命令,很重要切记切记)

(这里的配置项和上面创建的文件夹有关,思考下理解应该没有什么问题)

zhang dong wechat
关注我的微信来交流技术问题吧!