第三十四課預習任務
阿新 • • 發佈:2018-11-26
1. nosql介紹
- 非關係型資料庫也叫Nosql資料庫,全稱是not noly sql。
- 2009年初,Johan Oskarsson舉辦了一場關於開源分散式資料庫的討論,Eric Evans在這次討論中提出了NoSQL一詞,用於指代那些非關係型的,分散式的,且一般不保證遵循ACID原則的資料儲存系統。Eric Evans使用NoSQL這個詞,並不是因為字面上的“沒有SQL”的意思,他只是覺得很多經典的關係型資料庫名字都叫“**SQL”,所以為了表示跟這些關係型資料庫在定位上的截然不同,就是用了“NoSQL“一詞。
- 非關係型資料庫提出另一種理念,例如,以鍵值對儲存,且結構不固定,每一個元組可以有不一樣的欄位,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會侷限於固定的結構,可以減少一些時間和空間的開銷。使用這種方式,使用者可以根據需要去新增自己需要的欄位,這樣,為了獲取使用者的不同資訊,不需要像關係型資料庫中,要對多表進行關聯查詢。僅需要根據id取出相應的value就可以完成查詢。
1.2關係型資料庫與非關係型資料庫的區別:
- 關係型資料庫通過外來鍵關聯來建立表與表之間的關係,非關係型資料庫通常指資料以物件的形式儲存在資料庫中,而物件之間的關係通過每個物件自身的屬性來決定。
2.memrcached介紹
MemCache是一個開源的高效能的分散式的記憶體物件快取系統,用於各種動態應用以減輕資料庫負擔。它通過在記憶體中快取資料和物件,來減少讀取資料庫的次數,從而提高動態、資料庫驅動應用速度。MemCache會在記憶體中開闢一塊空間,建立一個統一的巨大的hash表,hash表能夠用來儲存各種格式的資料,包括影象、視訊、檔案以及資料庫檢索的結果等。
通常在訪問量高的Web網站和應用中使用MemCache,用來緩解資料庫的壓力,並且提升網站和應用的響應速度。
在應用程式中,我們通常在以下節點來使用MemCached:
- 訪問頻繁的資料庫資料(身份token、首頁動態)
- 訪問頻繁的查詢條件和結果
- 作為Session的儲存方式(提升Session存取效能)
- 頁面快取
- 更新頻繁的非重要資料(訪客量、點選次數)
- 大量的hot資料
3.安裝memcached
[[email protected] ~]# yum install -y memcached libmemcached libevent Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/x86_64/metalink | 8.4 kB 00:00:00 * base: centos.01link.hk * epel: mirrors.aliyun.com * extras: centos.01link.hk * updates: centos.01link.hk
啟動memcached
[[email protected] ~]# systemctl start memcached
[[email protected] ~]# systemctl status memcached
● memcached.service - Memcached
Loaded: loaded (/usr/lib/systemd/system/memcached.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2018-10-30 06:47:45 EDT; 6s ago
編輯配置檔案
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="127.0.0.1" //這裡是ip地址
其中-m指定memcached分配記憶體
-c指定最大併發數
-u指定執行memcached服務的使用者
4. 檢視memcachedq狀態
[[email protected] ~]# memcached-tool 127.0.0.1:11211 stats
Usage: memcached-tool <host[:port] | /path/to/socket> [mode]
memcached-tool 10.0.0.5:11211 display # shows slabs
memcached-tool 10.0.0.5:11211 # same. (default is display)
memcached-tool 10.0.0.5:11211 stats # shows general stats
memcached-tool 10.0.0.5:11211 dump # dumps keys and values
5.memcached命令列
可以用telnet命令連線:
[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set key2 0 30 2
aa
STORED
get key2
VALUE key2 0 2
aa
END
<flags> 是一個16位的無符號的整數(以十進位制的方式表示)。該標誌將和需要儲存的資料一起儲存,並在客戶端get資料時返回。客戶端可以將此標誌用做特殊用途,此標誌對伺服器來說是不透明的。
<exptime> 為過期的時間。若為0表示儲存的資料永遠不過期(但可被伺服器演算法:LRU 等替換)。如果非0(unix時間或者距離此時的秒數),當過期後,伺服器可以保證使用者得不到該資料(以伺服器時間為標準)。
<bytes> 需要儲存的位元組數,當用戶希望儲存空資料時<bytes>可以為0
<data block>需要儲存的內容,輸入完成後,最後客戶端需要加上\r\n(直接點選Enter)作為結束標誌。
6. memcached資料匯出和匯入
6.1資料匯出
[[email protected] ~]# memcached-tool 127.0.0.1:11211 dump > data.txt
Dumping memcache contents
Number of buckets: 1
Number of items : 1
Dumping bucket 1 - 1 total items
6.2資料匯入
[[email protected] ~]# cat data.txt
add key4 3 1540907680 5
knigh
add key3 3 1540907557 4
adbc
[[email protected] ~]# systemctl restart memcached
[[email protected] ~]# nc 127.0.0.1 11211 < data.txt
STORED
STORED
[[email protected] ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key3
VALUE key3 3 4
adbc
END
注意:匯出的資料是帶有一個時間戳的,這個時間戳就是該條資料過期的時間點,如果當前時間已經超過該時間戳,那麼是匯入不進去的
7. php連線memcached
編譯之前檢視擴充套件模組
[[email protected] php-5.6.32]# /usr/local/php-fpm/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
7.2 開始編譯安裝:
先安裝php的memcache擴充套件
cd /usr/local/src/
wget http://pecl.php.net/get/memcache-2.2.3.tgz
tar zxf memcache-2.2.3.tgz
cd memcache-2.2.3
[[email protected] memcache-2.2.3]# /usr/local/php-fpm/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
..........................................................
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20131226/
開始編譯安裝完成後,會出現這樣一個提示“Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20131226/”這樣就表示成功了。
[[email protected] memcache-2.2.3]# vim /usr/local/php-fpm/etc/php.ini
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
//在這個地方加入以下這行就可以
extension=memcache.so
[[email protected] memcache-2.2.3]# /usr/local/php-fpm/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mcrypt
memcache
mysql
mysqli
openssl
這裡我們就可以看到memcache這個模組加進來了。
7.3測試php連線memcache是否成功
//這裡我們有一段試例程式碼下載下來,如果出現以下資料那就可以編譯成功了!
[[email protected] memcache-2.2.3]# curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null
[[email protected] memcache-2.2.3]# /usr/local/php-fpm/bin/php 1.php
Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array
(
[0] => aaa
[1] => bbb
[2] => ccc
[3] => ddd
)
<br>Get key1 value: <br>Get key2 value: <br>
8. memcached中儲存sessions
[[email protected] memcache-2.2.3]# 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