網站首頁 編程語言 正文
什么是memcached:
- memcached之前是danga的一個項目,最早是為LiveJournal服務的,當初設計師為了加速LiveJournal訪問速度而開發的,后來被很多大型項目采用。官網是www.danga.com或者是memcached.org。
- Memcached是一個高性能的分布式的內存對象緩存系統,全世界有不少公司采用這個緩存項目來構建大負載的網站,來分擔數據庫的壓力。Memcached是通過在內存里維護一個統一的巨大的hash表,memcached能存儲各種各樣的數據,包括圖像、視頻、文件、以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然后從內存中讀取,從而大大提高讀取速度。
哪些情況下適合使用Memcached:存儲驗證碼(圖形驗證碼、短信驗證碼)、登錄session等所有不是至關重要的數據。
安裝和啟動memcached:
windows
安裝:memcached.exe -d install。
啟動:memcached.exe -d start。
linux(ubuntu)
安裝:sudo apt install memcached
啟動: cd /usr/local/memcached/bin ./memcached -d start
可能出現的問題:
提示你沒有權限:在打開cmd的時候,右鍵使用管理員身份運行。
提示缺少pthreadGC2.dll文件:將pthreadGC2.dll文件拷貝到windows/System32.
不要放在含有中文的路徑下面。
啟動memcached:
如果想要使用以上參數來指定一些配置信息,那么不能使用service memcached start,而應該使用/usr/bin/memcached的方式來運行。比如/usr/bin/memcached -u memcache -m 1024 -p 11222 start。
- -d:這個參數是讓memcached在后臺運行。
- -m:指定占用多少內存。以M為單位,默認為64M。
- -p:指定占用的端口。默認端口是11211。
- -l:別的機器可以通過哪個ip地址連接到我這臺服務器。如果是通過service memcached start的方式,那么只能通過本機連接。如果想要讓別的機器連接,就必須設置-l 0.0.0.0。
telnet操作memcached:
telnet ip地址 [11211]
添加數據:
set
語法:
set key flas(是否壓縮) timeout value_length value
示例: set username 0 60 7 zhiliao
add
語法:
add key flas(0) timeout value_length value
示例: add username 0 60 7 xiaotuo set和add的區別:add是只負責添加數據,不會去修改數據。如果添加的數據的key已經存在了,則添加失敗,如果添加的key不存在,則添加成功。而set不同,如果memcached中不存在相同的key,則進行添加,如果存在,則替換。
獲取數據:
語法: get key
示例: get username
刪除數據:
語法: delete key
示例: delete username
flush_all:刪除memcached中的所有數據。
查看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')
memcached的安全性:
memcached的操作不需要任何用戶名和密碼,只需要知道memcached服務器的ip地址和端口號即可。因此memcached使用的時候尤其要注意他的安全性。這里提供兩種安全的解決方案。分別來進行講解:
- 使用-l參數設置為只有本地可以連接:這種方式,就只能通過本機才能連接,別的機器都不能訪問,可以達到最好的安全性。
- 使用防火墻,關閉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','zhiliao',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 } }
原文鏈接:https://cloud.tencent.com/developer/article/1969436
相關推薦
- 2023-07-14 431報錯和解決方法
- 2023-10-26 ElementUI日期轉為“yyyy-MM-dd“格式
- 2022-05-13 Django-Rest framwork框架 序列化與反序列化
- 2022-07-18 RLS遞歸最小二乘法(Recursive Least Squares)
- 2023-05-31 python升級pip及失敗處理方式_python
- 2022-10-15 Tomcat啟動核心流程示例詳解_Tomcat
- 2022-07-18 properties配置文件解耦合連接數據庫的原理
- 2022-06-22 Python?裝飾器常用的創建方式及源碼示例解析_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支