21.16-21.20 redis:操做鍵值,安全設置,慢查詢日誌,php模塊,存儲session

  • 21.16 redis操做鍵值php

  • 21.17 redis安全設置linux

  • 21.18 redis慢查詢日誌git

  • 21.19 php安裝redis擴展模塊github

  • 21.20 redis存儲sessionweb


21.16 Redis經常使用操做(鍵值) 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 *    //取出全部keyapache

  • keys my* //模糊匹配vim

  • exists name  //有name鍵 返回1 ,不然返回0;centos

  • 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

相關文章
相關標籤/搜索