查看数据库中所有带的key
127.0.0.1:6379> keys *
1) "myk"
2) "k3"
3) "k1"
4) "zset1"
5) "key1"
6) "set2"
7) "list2"
8) "mykey"
9) "hset1"
10) "hash1"
11) "set3"
12) "k2"
13) "set4"
14) "set1"
15) "seta"
16) "set5"
17) "key2"
18) "list1"
支持模糊匹配
127.0.0.1:6379> keys my*
1) "myk"
2) "mykey"
判断一个key是否存在
127.0.0.1:6379> EXISTS key1
(integer) 1
存在返回1
127.0.0.1:6379> EXISTS sh
(integer) 0
不存在返回0
删除一个键
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> get key1
(nil)
给一个key设置过期时间
127.0.0.1:6379> EXPIRE key2 10
(integer) 1
127.0.0.1:6379> get key2
"linux"
127.0.0.1:6379> get key2
"linux"
127.0.0.1:6379> get key2
"linux"
127.0.0.1:6379> get key2
(nil)
查看key有多长时间过期
127.0.0.1:6379> EXPIRE k2 15
(integer) 1
127.0.0.1:6379> ttl k2
(integer) 12
127.0.0.1:6379> ttl k2
(integer) 7
127.0.0.1:6379> ttl k2
(integer) 4
127.0.0.1:6379> ttl k2
(integer) 1
127.0.0.1:6379> ttl k2
(integer) -2
127.0.0.1:6379> ttl k2
(integer) -2
127.0.0.1:6379> get k2
(nil)
#当key已经不存在时,返回-2
#当key存在但是没有设置失效时间时,返回-1
选择那一个数据库,默认数据是0,一共16个库
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
将一个key移动到其他数据库
127.0.0.1:6379> MOVE myk 1
(integer) 1
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> keys *
1) "myk"
取消key的过期时间
127.0.0.1:6379> EXPIRE mykey 1000
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) 994
127.0.0.1:6379> PERSIST mykey
(integer) 1
127.0.0.1:6379> ttl mykey
(integer) -1
随机返回一个key
127.0.0.1:6379> RANDOMKEY
"set5"
127.0.0.1:6379> RANDOMKEY
"zset1"
127.0.0.1:6379> RANDOMKEY
"set4"
重命名一个key
127.0.0.1:6379> keys set*
1) "set2"
2) "set3"
3) "set4"
4) "set1"
5) "seta"
6) "set5"
127.0.0.1:6379> RENAME seta set6
OK
127.0.0.1:6379> keys set*
1) "set2"
2) "set3"
3) "set4"
4) "set1"
5) "set6"
6) "set5"
查看key的类型
127.0.0.1:6379> TYPE set5
set
127.0.0.1:6379> TYPE set6
zset
redis操作(服务)
查看数据库中key的数目
127.0.0.1:6379> DBSIZE
(integer) 14
127.0.0.1:6379> keys *
1) "k3"
2) "k1"
3) "zset1"
4) "set2"
5) "list2"
6) "mykey"
7) "hset1"
8) "hash1"
9) "set3"
10) "set4"
11) "set1"
12) "set6"
13) "set5"
14) "list1"
查看数据库状态信息
127.0.0.1:6379> info
清空当前数据库中所有的key
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "myk"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
清空所有数据库中所有的键
127.0.0.1:6379[1]> flushall
保存数据到rdb文件中,在后台运行:
127.0.0.1:6379> bgsav
同上,在前台运行:
127.0.0.1:6379> save
获取所有的配置文件参数
127.0.0.1:6379[1]> CONFIG GET *
查看指定参数
127.0.0.1:6379[1]> config get port
1) "port"
2) "6379"
127.0.0.1:6379[1]> config get dir
1) "dir"
2) "/data/redis"
数据恢复
首先定义或确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录下面,重启Redis即可恢复数据。
redis漏洞:redis被黑导致系统被黑,redis服务监听全网IP,并且服务器没有做iptables规则,没有对6379端口进行限制,就能远程连接你的redis服务器。并且,你的redis没有设置密码,直接连进来,相当于获得了一个超级管理员的权限。这时候就可以给他设定dir和dbfilrname。将dir设定到/root/.ssh里,dbfilename设定/root/.ssh/authorized_keys,咋这个文件里放上它的公钥,进而可以使用对应的私钥登录到服务器上了。
解决这个漏洞有很多种方法,设置一个密码,监听内网IP,加防火墙规则,以普通用户的身份去启动redis。都可以解决。
设置监听IP
bind 127.0.0.1 2.2.2.2
#多个IP可以用空格分开
设置监听端口:
port 16000
#redis默认端口6379
设置密码登录:
打开配置文件
[root@shuai-01 ~]# vim /etc/redis.conf
找到requirepass,加上你的密码配置行
requirepass shuai>com
改完密码后,重启redis
[root@shuai-01 ~]# killall redis-server
[root@shuai-01 ~]# redis-server /etc/redis.conf
不使用密码登录使用
[root@shuai-01 ~]# redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
使用密码登录能正常使用
[root@shuai-01 ~]# redis-cli -a 'shuai>com'
127.0.0.1:6379> keys *
1) "set3"
2) "set5"
3) "set1"
4) "list2"
5) "zset1"
6) "k3"
7) "set2"
8) "set4"
9) "hset1"
10) "mykey"
11) "hash1"
12) "list1"
13) "set6"
14) "k1"
将config命令改名或禁用config命令
[root@shuai-01 ~]# vim /etc/redis.conf
rename-command CONFIG shuai
#将“config”命令改为shuai
rename-command CONFIG ""
即,把config的名字改为空
redis的慢查询日志于MySQL的慢查询日志存储地方不同,redis是存储在内存中,而MySQL是存在文件里。
针对慢查询日志,可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。
编辑配置文件/etc/redis.conf
slowlog-log-slower-than 1000 //单位ms,表示慢于1000ms则记录日志
slowlog-max-len 128 //定义日志长度,表示最多存128条
查看慢日志的命令,要在redis下用命令查看。几条查询慢查询日志的命令
slowlog get //列出所有的慢查询日志
slowlog get 2 //只列出2条
slowlog len //查看慢查询日志条数
进入到/usr/local/src目录下,下载phpredis包
[root@shuai-01 src]# wget https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip
进入解压包,生成configure文件
[root@shuai-01 phpredis-develop]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
编译参数,把php-config编译进去
[root@shuai-01 phpredis-develop]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
编辑配置文件
[root@shuai-01 phpredis-develop]# vim /usr/local/php-fpm/etc/php.ini
增加一行配置
extension=redis.so
保存退出后,检查一下有没有redis模块
[root@shuai-01 phpredis-develop]# /usr/local/php-fpm/sbin/php-fpm -m
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
编辑php.ini文件
[root@shuai-01 phpredis-develop]# vim /usr/local/php-fpm/etc/php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
当然,这个也有三种方法
为了方便测试,还需要把redis密码关掉
保存退出后重启redis服务和php-fpm服务
[root@shuai-01 default]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@shuai-01 default]# killall redis-server
[root@shuai-01 default]# redis-server /etc/redis.conf
测试:
[root@shuai-01 default]# curl localhost/1.php
1524533052
1524533052
ra198tjlbnssofi29jp4jn7a33
[root@shuai-01 default]# curl localhost/1.php
1524533053
1524533053
0nr6on1dveqtj0shf2outlng81
[root@shuai-01 default]# curl localhost/1.php
1524533054
1524533054
q9bmpddtbp4is877rs4n7npct7
[root@shuai-01 default]# curl localhost/1.php
1524533055
1524533055
76giv1qbjth0jt10qcdj6hcjf6
[root@shuai-01 default]# curl localhost/1.php
1524533056
1524533056
p9o0cs7lld8pvdv3a3njnth1v6
[root@shuai-01 default]# redis-cli
127.0.0.1:6379> keys *
1) "k1"
2) "PHPREDIS_SESSION:76giv1qbjth0jt10qcdj6hcjf6"
3) "set2"
4) "set5"
5) "PHPREDIS_SESSION:p9o0cs7lld8pvdv3a3njnth1v6"
6) "list2"
7) "set3"
8) "hset1"
9) "list1"
10) "hash1"
11) "PHPREDIS_SESSION:0nr6on1dveqtj0shf2outlng81"
12) "mykey"
13) "PHPREDIS_SESSION:ra198tjlbnssofi29jp4jn7a33"
14) "set6"
15) "zset1"
16) "set4"
17) "k3"
18) "set1"
19) "PHPREDIS_SESSION:q9bmpddtbp4is877rs4n7npct7"