1. 程式人生 > >第三十四課預習任務

第三十四課預習任務

 

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:

  1. 訪問頻繁的資料庫資料(身份token、首頁動態)
  2. 訪問頻繁的查詢條件和結果
  3. 作為Session的儲存方式(提升Session存取效能)
  4. 頁面快取
  5. 更新頻繁的非重要資料(訪客量、點選次數)
  6. 大量的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