NoSQL——2

1.memcached命令行

yum install -y telnet 

telnet 127.0.0.1 11211  //進入到nosql

set命令用來存儲數據

set key2 0 30 2   // key2是key的名字(memcached屬於key valcue所以要一個key和value),最後一個2表示 要寫(存)的數值是2位的

image.png

第一個key2寫入 12兩位,stored保存,第二個key1要寫3位的,寫了12兩位沒反應是錯誤的。後面再寫三位也出錯了

所以指定了3位 就要寫三位。

雖然已經顯示stored,但是不知道是否保存了。用get key1查看

image.png

顯示END 並沒有數據,是因爲中間的20意義爲20秒後過期,數據已經過期了自然就看不到了。


memcached語法規則:

輸入錯誤時候清空ctrl+u,退格要加ctrl鍵

  <command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n

 注:\r\n在windows下是Enter鍵 

 <command name> 可以是set, add, replace

 set表示按照相應的<key>存儲該數據,沒有的時候增加,有的時候覆蓋

 add表示按照相應的<key>添加該數據,但是如果該<key>已經存在則會操作失敗

 replace表示按照相應的<key>替換數據,但是如果該<key>不存在則操作失敗。

 <key> 客戶端需要保存數據的key

<flags> 是一個16位的無符號的整數(以十進制的方式表示)。該標誌將和需要存儲的數據一起存儲,並在客戶端get數據時返回。客戶端可以將此標誌用做特殊用途,此標誌對服務器來說是不透明的。

 <exptime> 爲過期的時間。若爲0表示存儲的數據永遠不過期(但可被服務器算法:LRU 等替換)。如果非0(unix時間或者距離此時的秒數),當過期後,服務器可以保證用戶得不到該數據(以服務器時間爲標準)。

 <bytes> 需要存儲的字節數,當用戶希望存儲空數據時<bytes>可以爲0

 <data block>需要存儲的內容,輸入完成後,最後客戶端需要加上\r\n(直接點擊Enter)作爲結束標誌。


試驗例:

注意替換的時候如果出現NOT_STORED 那就是數據已經過期了,替換失敗。

image.png



2.memcached數據導出和導入

比如重啓服務時最好導出一下,重啓結束後導入。

存儲幾條數據作爲實驗:

image.png

退出telenet,ctrk+】,然後quit

image.png

memstat --servers=127.0.0.1:11211 查狀態,有13個項目等等,之前的操作

image.png

導出:

memcached-tool 127.0.0.1:11211 dump > data.txt

image.png

image.png

只導出來三個,其他都過期了,可以重定向到其他文件裏。

導入:

 nc 127.0.0.1 11211 < data.txt

image.png

失敗,因爲是add裏面已經有了不會去覆蓋。只能重啓memcached把數據清空。

systemctl restart memcached //重啓服務

image.png

再導入就成功了。

再進入telent發現name等值沒了,因爲導出的數據是帶有一個時間戳的,意思是過這個時間點就會過期,所以導入前可以vim data.txt把時間戳的值改大一點( 注意:導出的數據是帶有一個時間戳的,這個時間戳就是該條數據過期的時間點,如果當前時間已經超過該時間戳,那麼是導入不進去的)

image.png

在data.txt裏 加一個小時的時間戳 就可以成功了。



3.php連接memcached

image.png

裏還沒有memcache的模塊

先安裝php的memcache擴展

cd /usr/local/src/

weget http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz //安裝

tar zxf memcache-2.2.3.tgz  //解壓

cd memcache-2.2.3 

/usr/local/php-fpm/bin/phpize  //生成config文件

./configure --with-php-config=/usr/local/php-fpm/bin/php-config  

make && make install  //編譯

image.png

安裝完後會有類似這樣的提示:Installing shared extensions: /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/

image.png

然後修改php.ini添加一行extension="memcache.so“,放到擴展模塊的區域比較好

image.png

檢查/usr/local/php-fpm/bin/php -m

image.png

裏面已經出現了


下載測試腳本 

curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null

1.php內容也可以參考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/1.php

執行腳本

/usr/local/php-fpm/bin/php 1.php

或者將1.php放到某個虛擬主機根目錄下面,在瀏覽器訪問,即可看到效果

最終可以看到數據如下:

 [0] => aaa

 [1] => bbb

 [2] => ccc

 [3] => ddd


4.Memcached中存儲session


本實例是在lamp/lnmp環境下實現

編輯php.ini添加兩行

session.save_handler = memcache session.save_path = "tcp://192.168.0.9:11211"  

或者httpd.conf中對應的虛擬主機中添加

php_value session.save_handler "memcache" php_value session.save_path "tcp://192.168.0.9:11211"  

或者php-fpm.conf對應的pool中添加

php_value[session.save_handler] = memcache

php_value[session.save_path] = " tcp://192.168.0.9:11211 "

wget http://study.lishiming.net/.mem_se.txt

mv .mem_se.txt  /usr/local/apache2/htdocs/session.php

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

curl localhost/session.php 

類似於1443702394<br><br>1443702394<br><br>i44nunao0g3o7vf2su0hnc5440

telnet 127.0.0.1 11211

get i44nunao0g3o7vf2su0hnc544





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章