目录
一、单机部署
1、下载Redis
1-1、Windows下载
http://download.redis.io/releases/redis-3.0.7.tar.gz
1-2、Linux下载
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
1-3、最新版本下载
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
2、安装Redis
# 解压下载的文件
tar -zxvf redis-3.0.7.tar.gz
# 移动文件到特定目录
mv redis-3.0.7 /app/redis/
# 进入/app/redis/
cd /app/redis/
# 预编译
make
# 执行安装
make install
# 新建一个文件夹昨晚存放日志和redis配置(为以后扩展集群使用)
mkdir /app/redis/cluster
# 进入redis-3.0.7文件目录下
cd /app/redis/redis-3.0.7
# 然后复制文件到指定的路径
cp redis.conf /app/redis/cluster/
3、配置Redis参数
# 进入/app/redis/cluster/路径,编辑文件redis.conf
vim redis.conf
## ############# 修改配置文件中的下面选项(单机) #############
# 端口号
port 6379
# 是否作为后台运行,yes表后台运行
daemonize yes
# 配置日志存储地址
logfile "/app/redis/cluster/logs/redis_6379.log"
# 是否以集群的方式运行,如果是,则取消注释【#】,目前是单击
# cluster-enabled yes
# cluster-config-file nodes.conf
# 节点不能被访问的间隔,超过就说明这个节点失败了
# cluster-node-timeout 5000
# 是否开启日志,默认为no,开启为yes
appendonly no
# 可以启动redis密码配置
# requirepass 123456
4、启动服务
# 进入目录
cd /app/redis/cluster
# 执行程序(配置了redis的环境变量时,可以直接用redis-server,不需要进入特定目录)
redis-server redis.conf
# 进入特定目录的启动方式
/app/redis/redis-3.0.7/src/redis-server /app/redis/cluster/redis.conf
# 使用命令进入redis环境中
/app/redis/redis-3.0.7/src/redis-cli -c -p 6379
5、未授权漏洞访问测试
说明:通过测试如果不设置密码就会被攻击,所以配置好redis后,必须设定一个比较复杂的密码,防止被暴力破解
5-1、攻击者、被攻击者都安装了redis
5-2、攻击者使用:./redis-cli -h ip(被攻击者的ip)登录;然后用ping,判断是否已登录成功,提示PONG说明是通的
5-3、关于漏洞复现与利用(转载):https://www.cnblogs.com/bmjoker/p/9548962.html
6、常用口令
6-1、连接操作相关的命令
exit:退出
quit:关闭连接(connection)
auth:简单密码认证
6-2、对value操作的命令
exists (key):确认一个key是否存在
del (key):删除一个key
type (key):返回值的类型
keys (pattern):返回满足给定pattern的所有key,pattern为*时,表示所有
randomkey:随机返回key空间的一个key
rename (oldname, newname):将key由oldname重命名为newname,若newname存在则删除newname表示的key
dbsize:返回当前数据库中key的数目
expire key time:设定一个key的活动时间(秒)
ttl key:获得一个key的活动时间(秒)
select (index):按索引查询(进入不同的数据库0,1,2,3,4,5,6...15等等)
move (key, dbindex):将当前数据库中的key转移到有dbindex索引的数据库
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
6-3、对String操作的命令
set (key, value):给数据库中名称为key的string赋予值value
get (key):返回数据库中名称为key的string的value
getset (key, value):给名称为key的string赋值,并返回上一次的value
mget (key1, key2,…, key N):返回库中(名称为key1,key2…)对应的value
setnx (key, value):如果不存在名称为key的string,则向库中添加string,名称为key,值为value
setex (key, time, value):向库中添加string(名称为key,值为value)同时,设定过期时间time
mset (key1, value1, key2, value2,…key N, value N):同时给多个string赋值,名称为key N 的string赋值value N(key N表示任意符合key的字符串)
msetnx (key1, value1, key2, value2,…key N, value N):如果所有名称为key i的string都不存在,则向库中添加string,名称key i赋值为value i
incr (key):名称为key的string增1操作,并返回变更后的值
incrby(key, integer):名称为key的string增加integer,并返回变更后的值
decr (key):名称为key的string减1操作,并返回变更后的值
decrby (key, integer):名称为key的string减少integer,并返回变更后的值
append (key, value):名称为key的string的值附加value,并返回字符串的长度(会把值从尾部拼接)
substr (key, start, end):返回名称为key的string的value的子串(不会改变key的值);start从0开始,end最大长度len - 1,若大于len - 1,结果不受影响。
6-4、对List操作的命令
rpush (key, value):在名称为key的list尾添加一个值为value的元素
lpush (key, value):在名称为key的list头添加一个值为value的 元素
llen (key):返回名称为key的list的长度
lrange (key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同),用于查看list的值
ltrim (key, start, end):截取名称为key的list,保留start至end之间的元素,会改变值
lindex (key, index):返回名称为key的list中index位置的元素
lset (key, index, value):给名称为key的list中index位置的元素赋值为value
lrem (key, count, value):删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素。
lpop (key):返回并删除名称为key的list中的首元素 rpop(key):返回并删除名称为key的list中的尾元素
blpop (key1, key2,… key N, timeout):lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作。
brpop (key1, key2,… key N, timeout):rpop的block版本。参考上一命令。
rpoplpush (srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
6-5、对Set操作的命令
sadd (key, member):向名称为key的set中添加元素member
srem (key, member) :删除名称为key的set中的元素member
spop (key) :随机返回并删除名称为key的set中一个元素
smove (srckey, dstkey, member) :将member元素从名称为srckey的集合移到名称为dstkey的集合
scard (key) :返回名称为key的set的基数
sismember (key, member) :测试member是否是名称为key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore (dstkey, key1, key2,…key N) :求交集并将交集保存到dstkey的集合
sunion (key1, key2,…key N) :求并集
sunionstore (dstkey, key1, key2,…key N) :求并集并将并集保存到dstkey的集合
sdiff (key1, key2,…key N) :求差集
sdiffstore (dstkey, key1, key2,…key N) :求差集并将差集保存到dstkey的集合
smembers (key) :返回名称为key的set的所有元素
srandmember (key) :随机返回名称为key的set的一个元素
6-6、对zset(sorted set)操作的命令
zadd (key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。score和member必须是数字格式
zrem (key, member) :删除名称为key的zset中的元素member
zincrby (key, increment, member) :如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
zrank (key, member) :返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
zrevrank (key, member) :返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
zrange (key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
zrevrange (key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素
zrangebyscore (key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素
zcard (key):返回名称为key的zset的基数 zscore(key, element):返回名称为key的zset中元素element的
6-7、对Hash操作的命令
hset (key, field, value):向名称为key的hash中添加元素field<—>value,如果存在field,会改变value值,但是返回0,不存在则添加,返回1
hget (key, field):返回名称为key的hash中field对应的value
hmget (key, field1, …,field N):返回名称为key的hash中field i对应的value
hmset (key, field1, value1,…,field N, value N):向名称为key的hash中添加元素field i<—>value i
hincrby (key, field, integer):将名称为key的hash中field的value增加integer
hexists (key, field):名称为key的hash中是否存在键为field的域
hdel (key, field):删除名称为key的hash中键为field的域
hlen (key):返回名称为key的hash中元素个数
hkeys (key):返回名称为key的hash中所有键
hvals (key):返回名称为key的hash中所有键对应的value
hgetall (key):返回名称为key的hash中所有的键(field)及其对应的value