memcached

數據結構模型:php

結構化數據:關係型數據庫;mysql、mariadb、oracledbpython

半結構化數據:xml、json、nosqlmysql

非結構化數據:文件系統;算法

 

緩存系統的種類:sql

代理式緩存;數據庫

旁路式緩存;json

 

memcached的特性:緩存

k/v緩存:可序列化數據;存儲項:key/value,標誌,過時時間;安全

功能的實現一半依賴於服務端,一半依賴客戶端;服務器

分佈式緩存;互不通訊的分佈式集羣;

O(1)的執行效率;

清理過時數據:LRU(最近最少使用算法):a、緩存項過時;b、緩存空間用盡;

分佈式系統主機路由:一、取模法;二、一致性hash;

 

安裝memcached:監聽端口:11211/tcp, 11211/udp

# yum install memcached

service unit: /var/lib/systemd/systemd/memcached.service 其配置文件/etc/sysconfig/memcached

 

命令:

存儲類命令:set, add, replace(從新定義), append(後插), prepend(前插)

獲取數據類命令:get, delete, incr(增長几個值)/decr(減小几個值)

統計類命令:stats,  stats items, stats slabs, stats sizes

清空:flush_all

 

memcached程序的經常使用選項:

-l  IP:監聽的IP地址;

-m <num>:用於緩存數據的內存空間大小,單位爲MB,默認爲64;

-c <num>:最大併發鏈接數;默認爲1024;

-p PORT:tcp端口

-U PORT:UDP端口;0爲關閉;

-t <num>:用於處理請求的最大線程數;

-M:內存耗盡時返回錯誤信息,而不是LRU算法清理;

-f <num>: growth factor, 增加因子;默認爲1.25倍;

-n <num>:指明最小的slab大小,默認是96;

-S:藉助sasl認證

 

php鏈接memcached服務器的擴展:memcache:php-pecl-memcache;

libmemcached:提供了相關的memcached管理工具

python-memcache:python鏈接memcached服務的擴展

 

默認沒有認證功能,但可藉助於sasl實現認證

sasl:simple authentication layer簡單認證安全層

 

 

 

 

示例:lamp基於memcached作php的會話保持;

前提:
一、配置各php支持使用memcache;
二、安裝配置好memcached服務器,這裏假設其地址爲172.16.200.11,端口爲11211;

1、配置php將會話保存至memcached中

編輯php.ini文件,確保以下兩個參數的值分別以下所示:
session.save_handler = memcache
session.save_path = "tcp://172.16.200.11:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

2、測試

新建php頁面setsess.php,爲客戶端設置啓用session:
<?php
session_start();
if (!isset($_SESSION['www.MageEdu.com'])) {
$_SESSION['www.MageEdu.com'] = time();
}
print $_SESSION['www.MageEdu.com'];
print "<br><br>";
print "Session ID: " . session_id();
?>

新建php頁面showsess.php,獲取當前用戶的會話ID:
<?php
session_start();
$memcache_obj = new Memcache;
$memcache_obj->connect('172.16.200.11', 11211);
$mysess=session_id();
var_dump($memcache_obj->get($mysess));
$memcache_obj->close();
?>

<?php
// Generating cookies must take place before any HTML.
// Check for existing "SessionId" cookie
$session = $HTTP_COOKIE_VARS["SessionId"];
if ( $session == "" ) {
// Generate time-based unique id.
// Use user's IP address to make more unique.
$session = uniqid ( getenv ( "REMOTE_ADDR" ) );
// Send session id - expires when browser exits
SetCookie ( "SessionId", $session );
}
?>
<HTML>
<HEAD><TITLE>Session Test</TITLE></HEAD>
<BODY> <br> 16 Current session id: <?php echo $session ?>
</BODY></HTML>

 

 

 

 

示例:LNMMP,反代ha1和ha2作keepalived高可用;負載均衡rs1和rs2,利用memcached作php session保持;如圖

1

memcached、mariadb-server、nfs:ip  192.168.71.40

#

相關文章
相關標籤/搜索