• 21.16 redis操作键值

  • 21.17 redis安全设置

  • 21.18 redis慢查询日志

  • 21.19 php安装redis扩展模块

  • 21.20 redis存储session


21.16 Redis常用操作(键值) 

  • 查看redis的键值,支持模糊匹配,例如:#key k*

127.0.0.1:6379> keys *
1) "h1"
2) "key"
3) "list1"
4) "key2"
5) "key3"
6) "zseta"
7) "11"
8) "set1"
9) "key1"
10) "set2"
11) "set3"


  • keys *    //取出所有key

  • keys my* //模糊匹配

  • exists name  //有name键 返回1 ,否则返回0;

  • del  key1 // 删除一个key    //成功返回1 ,否则返回0;

  • EXPIRE key1 100  //设置key1 100s后过期

  • ttl key // 查看键 还有多长时间过期,单位是s,当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,返回 key 的剩余生存时间。

  • select  0  //代表选择当前数据库,默认进入0 数据库

  • move age 1  // 把age 移动到1 数据库

示例:

127.0.0.1:6379> SMEMBERS set2
1) "3"
2) "2"
3) "4"
4) "c"
5) "b"
6) "5"
127.0.0.1:6379> MOVE set2 1
(integer) 1
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> keys *
1) "set2"


  • persist key1   //取消key1的过期时间

示例:

127.0.0.1:6379> EXPIRE 11 1000
(integer) 1
127.0.0.1:6379> TTL 11
(integer) 996
127.0.0.1:6379> PERSIST 11
(integer) 1
127.0.0.1:6379> TTL 11
(integer) -1
#key值存在,但是没有过期时间


  • randomkey //随机返回一个key

127.0.0.1:6379> RANDOMKEY
"key3"
127.0.0.1:6379> RANDOMKEY
"set1"
127.0.0.1:6379> RANDOMKEY
"set3"
127.0.0.1:6379> RANDOMKEY
"set1"
  • rename oldname newname //重命名key

127.0.0.1:6379> RENAME 11 key11
OK
127.0.0.1:6379> keys key11

1) "key11"

  • type key1 //返回键的类型

示例:

127.0.0.1:6379> TYPE h1
hash
127.0.0.1:6379> TYPE key11
string
127.0.0.1:6379> TYPE set3
zset


Redis常用操作(服务) 

  • dbsize  //返回当前数据库中key的数目

127.0.0.1:6379> keys *
1) "key11"
2) "h1"
3) "key"
4) "list1"
5) "key2"
6) "key3"
7) "zseta"
8) "set1"
9) "key1"
10) "set3"
127.0.0.1:6379> DBSIZE
(integer) 10
  • info  //返回redis数据库状态信息

  • flushdb //清空当前数据库中所有的键

127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> keys *
1) "set2"
127.0.0.1:6379[1]> FLUSHDB
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
  • flushall    //清空所有数据库中的所有的key

  • bgsave //保存数据到 rdb文件中,在后台运行

    适用环境:内存写入redis数据量庞大,需要迁移到后台rdb文件操作。

    响应速度:取决于数据量的多少。 

  • save //作用同上,但是在前台运行

    操作环境:当前窗口

  • config get * //获取所有配置参数

127.0.0.1:6379[1]> CONFIG GET *
.
.
.
164) ""
165) "notify-keyspace-events"
166) ""
167) "bind"
168) "127.0.0.1"


  •  config get dir  //获取配置参数

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/data/redis"
127.0.0.1:6379> CONFIG GET bind
1) "bind"
2) "127.0.0.1"
127.0.0.1:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "dump.rdb"
  • config set dir  //更改配置参数

127.0.0.1:6379> CONFIG SET timeout 100
OK
127.0.0.1:6379> CONFIG GET timeout
1) "timeout"
2) "100"
  • 数据恢复: 首先定义或者确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录下面,重启redis服务即可恢复数据

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/data/redis"
127.0.0.1:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "dump.rdb"
#dump.rdb的名字可以自定义更改

21.17 Redis安全设置

iptables设置对6379端口的保护,以免涉外操控。

  • 设置监听ip

bind 127.0.0.1  2.2.2.2
#可以是多个ip,用空格分隔
  • (如果不设置这个配置,默认监听所有,公网ip,内网ip。。。)

    设置监听端口  

port 16000

 

设置密码 

修改参数(如果无该参数,手动追加)

格式:requirepass 密码

vim /etc/redis.conf
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
protected-mode yes
requirepass 1616>1616      
#添加requirepass参数定义登录密码

修改参数后,重启redis服务并连接redis数据库

killall redis-server
redis-server /etc/redis.conf
redis-cli -a "1616>1616"

登录命令:

# redis-cli -a '1616>1616'
127.0.0.1:6379> keys *
1) "key11"
2) "h1"
3) "key"
4) "list1"
5) "key2"
6) "key3"
7) "zseta"
8) "set1"
9) "key1"
10) "set3"


将config命令改名

config命令在redis的效果 

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/data/redis"

这是修改前的效果,config能获取很多数据,如果×××***会获取核心数据内容。

 

修改参数(如果无该参数,手动追加): rename-command CONFIG aming

vim /etc/redis.conf
# security of read only slaves using 'rename-command' to shadow all the
# administrative / dangerous commands.
slave-read-only yes
rename-command CONFIG kevin
#添加参数,修改config的命令符为"kevin",意思就是键入kevin相当于键入config的效果
修改参数后,重启redis服务并连接redis数据库
killall redis-server
redis-server /etc/redis.conf
redis-cli -a "1616>1616"

可以看到"kevin"命令已经生效

127.0.0.1:6379> kevin get dir
1) "dir"
2) "/data/redis"
而"config"命令已经失效
127.0.0.1:6379> CONFIG GET dir
(error) ERR unknown command 'CONFIG'

禁掉config命令 

#把“”引用部分的内容改空即可

rename-command CONFIG “”



21.18 redis慢查询日志

开启慢查询日志功能

编辑配置文件/etc/redis.conf

vim /etc/redis.conf
slowlog-log-slower-than 10000
slowlog-max-len 128

解释:

针对慢查询日志,可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。 

slowlog-log-slower-than 1000
#单位ms,表示慢于1000ms则记录日志
slowlog-max-len 128
#定义日志长度,表示最多存128条


 

修改慢查询的参数为10ms进行测试(其实正常执行的命令都>10ms)

slowlog-log-slower-than 10000

改成

slowlog-log-slower-than 10

修改后重启redis

killall redis-server
redis-server /etc/redis.conf
redis-cli -a "1616>1616"

键入任意执行命令进行测试

127.0.0.1:6379> SLOWLOG get
1)  1) (integer) 0
   2) (integer) 1534932088
   3) (integer) 1035
   4) 1) "COMMAND"
   5) "127.0.0.1:44242"
   6) ""
127.0.0.1:6379> keys *
1) "key2"
2) "key11"
3) "key1"
4) "h1"
5) "set1"
6) "zseta"
7) "list1"
8) "key3"
9) "set3"
10) "key"
127.0.0.1:6379> keys set3
1) "set3"



 slowlog get //列出所有的慢查询日志

127.0.0.1:6379> SLOWLOG get
1)   1) (integer) 3
   2) (integer) 1534932157
   3) (integer) 23
   4) 1) "keys"
      2) "set3"
   5) "127.0.0.1:44242"
   6) ""
2)   1) (integer) 2
   2) (integer) 1534932144
   3) (integer) 61
   4) 1) "keys"
      2) "*"
   5) "127.0.0.1:44242"
   6) ""
3)   1) (integer) 1
   2) (integer) 1534932130
   3) (integer) 18
   4) 1) "SLOWLOG"
      2) "get"
   5) "127.0.0.1:44242"
   6) ""
4)   1) (integer) 0
   2) (integer) 1534932088
   3) (integer) 1035
   4) 1) "COMMAND"
   5) "127.0.0.1:44242"
   6) ""


slowlog get 1  //列出最近的1条慢查询

127.0.0.1:6379> SLOWLOG get 1
1)   1) (integer) 4
   2) (integer) 1534932175
   3) (integer) 389
   4) 1) "SLOWLOG"
      2) "get"
   5) "127.0.0.1:44242"
   6) ""


slowlog get 2 //只列出最近的2条

 127.0.0.1:6379> SLOWLOG get 2

1)  1) (integer) 5
   2) (integer) 1534932261
   3) (integer) 43
   4)   1) "SLOWLOG"
      2) "get"
      3) "1"
   5) "127.0.0.1:44242"
   6) ""
2)  1) (integer) 4
   2) (integer) 1534932175
   3) (integer) 389
   4) 1) "SLOWLOG"
      2) "get"
   5) "127.0.0.1:44242"
   6) ""

slowlog len //查看慢查询日志条数

127.0.0.1:6379> SLOWLOG len
(integer) 7



21.19 php安装redis扩展模块

PHP中使用redis – 安装扩展模块

cd /usr/local/src
wget https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip
unzip phpredis.zip
cd phpredis-develop
/usr/local/php-fpm/bin/phpize
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make 
make install
vim /usr/local/php.ini 
##增加extension=redis.so
##看是否有redis模块
/usr/local/php-fpm/bin/php -m|grep redis
redis
##重启php-fpm服务

 

21.20 redis存储session

PHP中使用redis – 存储session

vim /usr/local/php-fpm/etc/php.ini
#更改或增加
session.save_handler = "redis" 
session.save_path = "tcp://127.0.0.1:6379"

或者apache虚拟主机配置文件中也可以这样配置:

php_value session.save_handler " redis" php_value session.save_path " tcp://127.0.0.1:6379"

(本次测试)或者php-fpm配置文件对应的pool中增加:

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
php_value[session.save_handler] = redis
php_value[session.save_path] = " tcp://127.0.0.1:6379 "
#顺便也可以把redis.conf的密码给删掉或者注释掉
vim /etc/redis.conf
#requirepass 1818.1818

下载测试文件

进入localhost的目录

cd /data/web/kevin.com/
wget http://study.lishiming.net/.mem_se.txt
mv .mem_se.txt  11.php

其中11.php内容可以参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php

或者手动添加php测试参数

vim 11.php  
<?php
session_start();
if (!isset($_SESSION['TEST'])) {
$_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print "<br><br>";
print $_SESSION['TEST3'];
print "<br><br>";
print session_id();
?>

多次curl 取key-value数据

[root@AliKvn kevin.com]# curl localhost/11.php
1535016218<br><br>1535016218<br><br>mh2404u6koq5s7q8lvmothf385
[root@AliKvn kevin.com]# curl localhost/11.php
1535016219<br><br>1535016219<br><br>nsvpsvca8kgg0ars2gpjavm5g2
[root@AliKvn kevin.com]# curl localhost/11.php
1535016219<br><br>1535016219<br><br>gvus9tekjoaac0i2d9lu0g12d1
[root@AliKvn kevin.com]# curl localhost/11.php
1535016220<br><br>1535016220<br><br>mp9rmfj0f0simu450hp1gkh090
[root@AliKvn kevin.com]# curl localhost/11.php
1535016220<br><br>1535016220<br><br>jorriqau86qu9t9appjg94m4f2

进入数据库

查key值

[root@AliKvn kevin.com]# redis-cli
127.0.0.1:6379> keys *
1) "key1"
2) "PHPREDIS_SESSION:jorriqau86qu9t9appjg94m4f2"
3) "key2"
4) "PHPREDIS_SESSION:mh2404u6koq5s7q8lvmothf385"
5) "list1"
6) "PHPREDIS_SESSION:nsvpsvca8kgg0ars2gpjavm5g2"
7) "PHPREDIS_SESSION:mp9rmfj0f0simu450hp1gkh090"
8) "set3"
9) "list11"
10) "set1"
11) "zseta"
12) "PHPREDIS_SESSION:sm284t8p6bsdraovvkildjt1a0"
13) "hash1"
14) "seta"
15) "key10"
16) "key3"
17) "set2"
18) "PHPREDIS_SESSION:gvus9tekjoaac0i2d9lu0g12d1"

查看key的value

127.0.0.1:6379> get "PHPREDIS_SESSION:sm284t8p6bsdraovvkildjt1a0"
"TEST|i:1535016167;TEST3|i:1535016167;"
解释:
get "PHPREDIS_SESSION:sm284t8p6bsdraovvkildjt1a0"
#这个是key
"TEST|i:1535016167;TEST3|i:1535016167;"
#这个是value

 针对redis集群

  • 如果想用php连接redis cluster,需要使用predis扩展

  • 安装方法类似phpredis,predis扩展地址https://github.com/nrk/predis