首页 技术 正文
技术 2022年11月14日
0 收藏 312 点赞 4,195 浏览 2144 个字

一、缓存的由来:

  • 提升性能

    绝大多数情况下,select 是出现性能问题最大的地方。一方面,select 会有很多像 join、group、order、like 等这样丰富的语义,而这些语义是非常耗性能的;另一方面,大多 数应用都是读多写少,所以加剧了慢查询的问题。

    分布式系统中远程调用也会耗很多性能,因为有网络开销,会导致整体的响应时间下降。为了挽救这样的性能开销,在业务允许的情况(不需要太实时的数据)下,使用缓存是非常必要的事情。

  • 缓解数据库压力

    当用户请求增多时,数据库的压力将大大增加,通过缓存能够大大降低数据库的压力。

二、memcached的特点:

什么是Memcached:

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。

Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。

本质上,它是一个简洁的key-value存储系统。

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

特点如下:

  (1)开源——协议简单
  (2)高效——C语言开发 基于libevent处理
  (3)速度快——内存存储
  (4)c/s架构——tcp连接方便
  (5)数据存满时——通过lru机制进行删除

    注意:数据存储在内存中,断电消失,不是数据持久化数据库

支持语言:

  • Perl
  • PHP
  • Python
  • Ruby
  • C#
  • C/C++
  • Lua
  • 等等

三、memcached的安装和常见操作:

安装(centos7安装) yum install memcached

daemon后台启动

$ /usr/local/bin/memcached -p 11211 -m 64m -d

这里使用的memcached启动选项的内容如下。
选项说明

-p 使用的TCP端口。默认为11211

-m 最大内存大小。默认为64M

-vv 用very vrebose模式启动,调试信息和错误输出到控 制台

-d 作为daemon在后台启动

上面四个是常用的启动选项,其他还有很多,通过 $ /usr/local/bin/memcached –h 查看帮助

关于memcached的简单操作(增删改查)不做书写,请移步学习:https://www.runoob.com/memcached/memcached-tutorial.html

四、使用python对memcached进行操作:

pip install pymemcache  #安装库

连接memcahed服务:

from pymemcache.client.base import Clientclient = Client(('localhost', 11211))  #创建连接
client.set('some_key', 'some_value') #将key的value上传缓存
result = client.get('some_key') #获取key的值

简单的序列化操作:

tv = {'ch':['ch1','ch2'], 'mudan':['md1', 'md2']}
cli.set('menu_tv', json.dumps(tv))

然后一顿操作(简单的操作)如下:

 import time
import json
from pymemcache.client.base import Client # 演示缓存流程
def get_data():
'''生成数据'''
data = {'ch': ['ch1', 'ch2'], 'md': ['mdA', 'mdB']}
time.sleep(3)
return data def show_data(data):
'''显示数据内容'''
for k, v in data.items():
print(k, v) def mind_data(k, data):
'''将数据加入到缓存中'''
client = Client(('192.168.66.189', 11211))
res = client.set(k, json.dumps(data))
return res def get_cache(k):
'''获取数据'''
try:
client = Client(('192.168.66.189', 11211))
data = json.loads(client.get(k))
return data
except Exception as e:
print(e)
return False if __name__ == '__main__':
k = 'test'
data = get_cache(k)
if data:
show_data(data)
else:
data = get_data()
show_data(data)
mind_data(k, data)
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,580
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918