Memcache

前戲

  Memcached是一個高性能的分布式內存對象緩存系統,用于動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象減少讀取數據庫的次數,從而減小數據庫的壓力,提高動態,數據庫網站的速度。Memcached基于一個存儲 鍵/值對的hashmap。其守護進程是用C編寫的,但是客戶端可以用任何語言來編程,并通過Memcached協議和守護進程通信。

Memcached安裝及基本使用

? Memcached服務端的安裝

#依賴libevent,先安裝
yum install libvent-devel*
#用wget去http://memcached.org下載最新源碼
tar -zxvf memcached-1.4.29.tar.gz
#編譯安裝
./configure && make && make test && sudo make install  

? Memcached的啟動

memcached -d -m 10 -u root -p 12000 -c 256 -P /tmp/memcached.pid參數概述:-d 啟動一個線程;-m 分配給Memcached使用的內存數量,單位是MB;-u 運行Memcached的用戶;-l 監聽的服務器IP地址(可選)-p 設置Memcache監聽的端口,最好是1024以上的端口;-c 最大運行的并發連接數,默認是1024,按照服務器的負載量來設定-P 設置保存Memcached的pip文件

 Memcached的基本操作命令

memcached的操作分為三類:存儲操作:      setaddreplaceappendprependcas獲取操作:getgets其他命令:deletestats

使用python操作Memcached

在python中使用Memcached,首先安裝memcache:install python-memcached

連接使用

import memcachem = memcache.Client(['192.168.12.12:8800'],debug=True)
m.set('liu','qingyang')
res = m.get('liu')
print(res)
#打印qingyang
#debug=True表示運行錯誤時,顯示錯誤信息,生產環境中不需要

集群支持

python-memcached模塊支持集群操作。就是在內存維護一個主機列表,而且集群中主機的權重值與主機在列表中出現的次數成正比。

    主機                    權重
192.0.0.1                  1
192.0.0.2                  2
192.0.0.3                  1
#內存主機列表:HostList = ["192.0.0.1","192.0.0.2","192.0.0.2","192.0.0.3"]   

set操作

#set:設置一個鍵值對,如果key不存在,就創建;如果存在,就更新value;
#set_multi:設置多個鍵值對,如果key不存在,就創建;如果存在,就更新values。import memcache
m = memcache.Client(["192.0.0.1:8800"],debug=True)
m.set('liu',111)
m.set_mulit({'liu':111,'wu':222})

get操作

#get 獲取一個鍵值對
#get_multi 獲取多個鍵值對import memcachem = memcache.Client(['192.0.0.1:8800'],debug=True)
print(m.get('liu'))
print(m.get_multi(['liu','wu']))

add操作

#add 添加一個鍵值對,如果key已經存在,操作將會報錯:MemCached: while expecting 'STORED', got unexpected response 'NOT_STORED'
#add 和 set 都是存儲操作,但是set可以更新value,add不可以。
import memcachem = memcache.Client(['192.0.0.1:8800'],debug=True)
m.set('liu','111')
m.add('wu',222)     #如果已經存在'wu'的key,會報錯 

replace操作

#replace 替換,修改key的值,如果key不存在,則報錯:MemCached: while expecting 'STORED', got unexpected response 'NOT_STORED'
import memcachem=memcache.Client(['192.0.0.1:8800'],debug=True)
m.replace('liu',222)
m.replace('li',333)   #如果不存在'li'的key,會報錯

delete操作

#delete 刪除指定的一個鍵值對,如果沒有指定的key,不會報錯
#delete_multi 刪除多個鍵值對
import memcachem=memcache.Client(['192.0.0.1:8800'],debug=True)
m.delete('liu')
m.delete('wu')
m.delete_multi(['liu','wu'])

append,prepend操作

#append:修改指定key的值,在值的后面追加數據,無指定key會報異常
#prepend:修改指定key的值,在值的前面插入數據
import memcachem=memcache.Client(['192.0.0.1:8800'],debug=True)
m.append('cc','dd')
m.append('ds','dsdsds')    #不存在ds,會報異常m.prepend('cc','aa')

decr,incr操作

#incr:自增,將Memcached中的某一個值增加N,(N默認為1),如果值非數字,會報錯
#decr:自減,將Memcached中的某一個值減少N,(N默認為1),如果值非數字,會報錯
import memcachem=memcache.Client(['192.0.0.1:8800'],debug=True)
m.incr('liu')
m.decr('liu',30)

gets cas使用

#為了避免在生產環境中產生臟數據,使用gets和cas,類似MySQL中的事務
import memcachemc=memcache.Client(['192.0.01:8800'],debug=True)
m.set('count',999)
print(m.gets('count'))
# 如果有人在gets之后和cas之前修改了product_count,那么,下面的設置將會執行失敗,拋出異常,從而避免非正常數據的產生
m.cas('count',998)
#cas也能創建一個不存在key的鍵值對
m.cas('w',90)
print(m.gets('w'))
#每次執行gets時,會從memcache中獲取一個自增的數字,通過cas去修改gets的值時,會攜帶之前獲取的自增值和memcache中的自增值進行比較,如果相等,則可以提交,如果不想等,那表示在gets和cas執行之間,又有其他人執行了gets(獲取了緩沖的指定值), 如此一來有可能出現非正常數據,則不允許修改。

?memcached和redis的區別

1、 Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用于緩存其他東西,例如圖片、視頻等等。 
2、Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。 
3、虛擬內存–Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁盤 
4、過期策略–memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire liu 111
5、分布式–設定memcache集群,利用magent做一主多從;redis可以做一主多從。都可以一主一從 
6、存儲數據安全–memcache掛掉后,數據沒了;redis可以定期持久化 
7、災難恢復–memcache掛掉后,數據不可恢復; redis數據丟失后可以通過aof恢復 
8、Redis支持數據的備份,即master-slave模式的數據備份。

  

  

轉載于:https://www.cnblogs.com/liuqingyang/p/10987876.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247810.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決Button自動刷新頁面的問題

一、問題 <button class"am-btn am-btn-default am-btn-xs am-text-secondary" data-id"99" data-type1><span class"am-icon-pencil-square-o"></span>修改</button>11 頁面上有這樣一個按鈕&#xff0c;每次點擊這個…

Django.1

Django官方網站&#xff1a;https://www.djangoproject.com/ 使用終端創建Django文件 創建工程 django-admin startproject XXX 創建應用 python manage.py startapp YYY 遷移系統指令&#xff1a; 首先生成遷移文件 python manage.py makemigrations 執行遷移文件 python ma…

vue項目水印添加

import DomSize from wd-domsize-monitor; // 此處為 npm 下載的第三方模塊包 import Api_login from "/assets/api/login" // 此處是用戶信息接口調用var id shuiyinDiv var isInit false let callback function (ele) {DomSize.bind(ele, function () {//水印被…

mybatis傳參

在mybatis的學習中&#xff0c;會發現經常需要傳參&#xff0c;這里以上一節寫的實體類為基礎&#xff0c;當我們要添加一個員工時&#xff0c;需要添加員工的基本信息&#xff0c;以及所屬部門&#xff0c;按照以前的方法&#xff0c;在實體類中&#xff0c;添加部門id屬性&am…

自定義步驟條

展示圖&#xff1a; <template><div classcreateorder><!-- 頂部步驟條 --><div class"createorder_top"><div class"createorder_top_left"><!-- 0 --><span class"createorder_left_set" :class"…

jquery讓頁面滾動到底部

function scrollToEnd(){//滾動到底部var h $(document).height()-$(window).height();$(document).scrollTop(h); }

迭代器

一、定義 1.iterator.(迭代器&#xff09; 2.iterable.&#xff08;可迭代的&#xff09; 一般來說&#xff0c;可以被for循環的就是可以迭代的&#xff0c;迭代器一定可以迭代&#xff0c;但是可迭代的類型不一定是迭代器。 二、說明 1.有__iter__方法&#xff0c;說明可迭代 …

css獲取到指定元素的寬度,在回調返回寬度值

<script type"text/javascript">//獲取到指定元素的寬度&#xff0c;在回調返回寬度值//通過處理這個value&#xff0c;重新設置新的寬度$(.sixth).css("width",function(index,value){//value帶單位&#xff0c;先分解value value.split(px);//返回…

android 文件讀寫

讀取&#xff1a; public static String _getJsonString(String fileName) throws IOException { if ((fileName null) || fileName.isEmpty()) { return ""; } String retString ""; FileInputStream fis null; String state Environment.getExternal…

element組件庫中table自定義分頁效果

1.在data中設置初始值 // 頁數 頁碼search: { offset: 1, // 當前頁limit: 10, // 條數total:0, //總數},2.設置獲取后的數據分配 :data"tableData.slice((search.offset - 1) * search.limit, search.offset * search.limit)" 3.展示效果&#xff1a;

Django信號量

信號 Django中提供了“信號調度”&#xff0c;用于在框架執行操作時解耦。通俗來講&#xff0c;就是一些動作發生的時候&#xff0c;信號允許特定的發送者去提醒一些接受者。 1、Django內置信號 1 Model signals2 pre_init # django的modal執行其構造方…

uni-app 調用接口封裝文檔

1.創建 util 文件夾 &#xff0c;并在文件夾中創建 api.js const BASE_URL http://localhost:8082 // 域名頭 export const myRequest (options)>{return new Promise((resolve,reject)>{uni.request({url:BASE_URLoptions.url,method: options.method || GET,data: …

HTML中INPUT type=date標簽如何賦值注意問題

現在的html5 input標簽支持type"date" 顯示有日期的日歷控件&#xff0c;一行簡單的代碼就能顯示出一個日歷控件&#xff0c;但是有的時候需要給它一個默認的日期值&#xff0c;這個時候可能就要用到val()&#xff0c; attr("value","")等方法&a…

數據輪播圖翻頁封裝(左右點擊)

效果圖&#xff1a; <template><div class"box" style"height:200px;"><!-- 左 --><div class"box-left" click"submitrote(left)" mouseenter"chenge_menu(1)" mouseleave"chenge_menu(2)"…

jquery自動點擊按鈕

jquery自動點擊按鈕$(document).ready(function(){$("#imgcode_img").trigger("click");});

087-把PHP數組中的元素按隨機順序重新排列shuffle

<?php$arrarray(3,23,A,f,123,hello); //定義一個數組echo 排序之前的數組信息&#xff1a;<br>;print_r($arr);shuffle($arr); //對數組進行隨機排序echo <br>排序之后的數組信息&#xff1a;<br>;print_r($arr); //輸出數組信息#…

highcharts圖表高級入門之polar:極地圖的基本配置以及一些關鍵配置說明

highcharts圖表組件內的極地圖polar的實現和效果都還是很簡單和美觀的。 1、需要設置chart的polar屬性為true&#xff1b;以表示是極地圖&#xff1b; 2、其他的設置和普通圖表就沒什么區別了的&#xff0c;這里附上一個完整的示例代碼&#xff1a; highcharts圖表組件內的極地…

基于Element ui 實現輸入框只能輸入數字并支持千分位

實現效果 設置子組件 <template><el-inputref"money"v-model.trim"money":placeholder"placeholder"v-bind"$attrs"v-on"$listeners"input"formatNumber(money,money)"keyup.enter.native"moneyCh…

Vue-使用webpack+vue-cli搭建項目

一、準備 安裝NodeJs 安裝Webpack 配置環境變量 技巧使用&#xff1a; 1. npm 淘寶路徑配置&#xff1a;npm config set registryhttps://registry.npm.taobao.org  2.查看npm命令列表 > $ npm help 二、搭建項目 1、全局安裝vue腳手架工具 vue-cli npm install vue…

element 日歷組件-自定義內容

這只是個子組件 <template><div ref"topBox" class"swiper-in page-container bg-white"><div class"w-full page-head">我的排班<i class"close-btn el-icon-close" click"closeCurrentPage"><…