
## memcached
### 什么是memcached
1.memcached之前是danga的一個項目,最早是為LiveJournal服務的,當初設計師為了加速LiveJournal訪問速度而開發的,后來被很多大型項目采用。官網是www.danga.com或者是memcached.org。
2.Memcached是一個高性能的分布式的內存對象緩存系統,全世界有不少公司采用這個緩存項目來構建大負載的網站,來分擔數據庫的壓力。Memcached是通過在內存里維護一個統一的巨大的hash表,memcached能存儲各種各樣的數據,包括圖像、視頻、文件、以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然后從內存中讀取,從而大大提高讀取速度。
3.哪些情況下適合使用Memcached:存儲驗證碼(圖形驗證碼、短信驗證碼)、登錄session等所有不是至關重要的數據。
### memcache特性
1.保存內存中
2.重啟服務,數據會丟失
3.LRU算法,根據最近使用的變量,將長時間沒有使用的變量刪除
4.memcache服務端是不安全的,
5.不適合單機使用,對內存的消耗比較大
6.格式簡單,不支持list數據格式
### 安裝和啟動memcached
```
windows:
安裝:memcached.exe -d install。
啟動:memcached.exe -d start。
linux(ubuntu):
安裝:sudo apt install memcached
啟動:
cd /usr/bin/memcached/
memcached -d start
```
### 可能出現的問題:
```
1.提示你沒有權限:在打開cmd的時候,右鍵使用管理員身份運行。
2.提示缺少pthreadGC2.dll文件:將pthreadGC2.dll文件拷貝到windows/System32.
3.不要放在含有中文的路徑下面
```
### 啟動memcached:
```
-d:這個參數是讓memcached在后臺運行。
-m:指定占用多少內存。以M為單位,默認為64M。
-p:指定占用的端口。默認端口是11211。
-l:別的機器可以通過哪個ip地址連接到我這臺服務器。如果是通過service memcached start的方式,那么只能通過本機連接。如果想要讓別的機器連接,就必須設置-l 0.0.0.0
```
如果想要使用以上參數來指定一些配置信息,那么不能使用service memcached start,而應該使用/usr/bin/memcached的方式來運行。比如/usr/bin/memcached -u memcache -m 1024 -p 11222 start。
### telnet操作memcached
telnet ip地址 [11211]
#### 添加數據
```
set
set key flas(是否壓縮) timeout value_length
value
set username 0 60 5
juran
add
add key flas(0) timeout value_length
value
add username 0 60 5
juran
```
set和add的區別:add是只負責添加數據,不會去修改數據。如果添加的數據的key已經存在了,則添加失敗,如果添加的key不存在,則添加成功。而set不同,如果memcached中不存在相同的key,則進行添加,如果存在,則替換。
#### 獲取數據
```
get key
get username
```
#### 刪除數據
```
delete key
delete username
flush_all:刪除memcached中的所有數據。
```
#### 自增自減
```
incr key nums
decr key nums
```
**查看memcached的當前狀態**
```
stats
```
### 通過python操作memcached
安裝:python-memcached:pip install python-memcached
建立連接
```
import memcache
mc = memcache.Client(['127.0.0.1:11211','192.168.174.130:11211'],debug=True)
```
設置數據
```
mc.set('username','hello world',time=60*5)
mc.set_multi({'email':'xxx@qq.com','telphone':'111111'},time=60*5)
```
獲取數據
```
mc.get('telphone')
```
刪除數據
```
mc.delete('email')
```
自增自減
```
mc.incr('read_count')
mc.decr('read_count')
```
**分布式**
```
mc = memcache.Client(["192.168.164.137:11211","192.168.164.137:11212"],debug=True)
mc.set_multi({"pwd":'123',"age":18},time=60)
```
memcached盡管是“分布式”緩存服務器,但服務器端并沒有分布式功能。各個memcached不會互相通信以共享信息,這完全取決于客戶端的實現.
### memcached的安全性
memcached的操作不需要任何用戶名和密碼,只需要知道memcached服務器的ip地址和端口號即可。因此memcached使用的時候尤其要注意他的安全性。這里提供兩種安全的解決方案。
1.使用-l參數設置為只有本地可以連接:這種方式,就只能通過本機才能連接,別的機器都不能訪問,可以達到最好的安全性。
2.使用防火墻,關閉11211端口,外面也不能訪問。
```
ufw enable # 開啟防火墻
ufw disable # 關閉防火墻
ufw default deny # 防火墻以禁止的方式打開,默認是關閉那些沒有開啟的端口
ufw deny 端口號 # 關閉某個端口
ufw allow 端口號 # 開啟某個端口
```
### 在Django中使用memcached
首先需要在settings.py中配置好緩存
```
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
```
如果想要使用多臺機器,那么可以在LOCATION指定多個連接
```
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
```
配置好memcached的緩存后,以后在代碼中就可以使用以下代碼來操作memcached了:
```
from django.core.cache import cache
def index(request):
cache.set('abc','juran',60)
print(cache.get('abc'))
response = HttpResponse('index')
return response
```
需要注意的是,django在存儲數據到memcached中的時候,不會將指定的key存儲進去,而是會對key進行一些處理。比如會加一個前綴,會加一個版本號。如果想要自己加前綴,那么可以在settings.CACHES中添加KEY_FUNCTION參數:
```
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'KEY_FUNCTION': lambda key,prefix_key,version:"django:%s"%key
}
}
```
memcached 常用命令及使用說明:https://www.cnblogs.com/wayne173/p/5652034.html
- 空白目錄
- 1-Django前導知識
- 1-1-虛擬環境
- 1-2-Django框架介紹與環境搭建
- 2-URL與視圖
- 2-1-URL與視圖
- 3-模板
- 3-1-模板介紹
- 3-2-模板變量
- 3-3-常用標簽
- 3-4-模板常用過濾器
- 3-5-模板結構優化
- 3-6-加載靜態文件
- 4-數據庫
- 4-1-操作數據庫
- 4-2-圖書管理系統
- 4-3-ORM模型介紹
- 4-4-ORM模型的增刪改查
- 4-5-模型常用屬性
- 4-6-外鍵和表
- 4-7-查詢操作
- 4-8-QuerySet的方法
- 4-9-ORM模型練習
- 4-10-ORM模型遷移
- 5-視圖高級
- 1-Django限制請求method
- 2-頁面重定向
- 3-HttpRequest對象
- 4-HttpResponse對象
- 5-類視圖
- 6-錯誤處理
- 6-表單
- 1-用表單驗證數據
- 2-ModelForm
- 3-文件上傳
- 7-session和cookie
- 1-session和cookie
- 8-memcached
- 1-memcached
- 9-阿里云部署
- 阿里云部署