zoukankan      html  css  js  c++  java
  • Django笔记:Memcached缓存系统

    Memcached是一个高性能的分布式的内存对象缓存系统,通过在内存中维护一个统一的巨大的hash表,Memcached能存储多种数据,通常情况下,Memcached被用来存储图形验证码、短信验证码、登录session等不是至关重要的数据,因为一旦遇到断电等意外,内存中的数据将会丢失,所以不能存储特别重要的数据。
    优点:之所以使用Memcached系统,是因为它能提高服务的访问速度,缓解数据库的压力,其实就是因为Memcached是在内存中存取数据,所以速度上会非常快。
    注:Memcached中的数据是以键值对的方式来存储的。

    一、安装和启动

    Memcached需要先在机器上安装后才能使用。
    Windows系统

    • 安装:memcached.exe -d install(注意不是双击安装,而是在命令窗口以执行命令的方式安装)。
    • 启动:memcached.exe -d start

    Linux系统

    • 安装:sudo apt install memcached
    • 启动:/usr/bin/memcached [-u memcache] -d start

    在Windows中使用Memcached的注意事项:

    • 如果提示没有权限,则使用管理员什么打开cmd。
    • 提示缺少pthreadGC2.dll时,下载此文件并拷贝到windows/System32下即可。
    • memcached.exe文件不要放在含有中文的路径下。

    Linux中启动时的常用参数:

    • -d:后台运行Memcached,如/usr/bin/memcached [-u memcache] -d start
    • -m:指定运行Memcached可以占用的内存,单位为M,默认为64M,如/usr/bin/memcached [-u memcache] -m 1024 -d start
    • -p:指定占用端口,默认端口为11211
    • -l:指定别的机器通过哪个ip地址连接到此服务,如果想要别的机器也能访问到此服务,就需要设置为-l 0.0.0.0

    二、telnet操作Memcached

    如果想在命令窗口操作Memcached,可以使用telnet命令。执行telnet 服务ip地址 端口号连接到Memcached服务,连接上之后就可以操作Memcached了。
    常用命令有:
    set
    如果已存在相同的key,则会覆盖原有的value,否则新建一个key-value键值对。语法为:

    set key flas(是否压缩) timeout value_length
    value
    
    示例=====================
    > set name 0[0表示不压缩] 60[过期时间60秒] 5[字符长度为5个字符]
    > hello
    > STORED[表示存储成功]
    

    get
    根据keyMemcached中获取对应的value

    > get name
    

    add
    语法同set命令,如果已存在相同的key则会失败,提示NOT_STORED
    delete
    根据keyMemcached中删除一个键值对。
    flush_all
    删除Memcached中所有键值对(谨慎使用)。
    incr/decr
    给指定keyvalue加上(减去)指定数字,语法为incr key num,注意此命令只能操作数字类型的value

    > set age 0 120 2
    > 18
    > STORED
    > incr age 2
    > 20
    > get age
    > VALUE age 0 2
    > 20
    > END
    

    stats
    查看当前Memcached的状态信息。常用的信息项有:

    • get_hitsget命令命中了多少次。
    • get_missesget命令空了多少次。
    • curr_items:当前Memcached中的键值对数。
    • total_connectionsMemcached开启到现在的总连接数。默认最大的连接数为1024。

    查看当前Memcached中所有的key

    > stats items
    > stats cachedump [items_id] 0
    

    三、Python操作Memcached

    插件安装:pip install python-memcached
    建立连接并使用:

    import memcache
    
    # 连接之前确保Memcached已经启动,可以连接多台机器上的Memcached服务,
    # 连接多台机器时,存储数据时会将数据存储到其中一台中,达到分布式的效果。
    # debug参数设置为True表示会将错误信息打印到控制台
    mc = memcache.Client(['127.0.0.1:11211'], debug=True)
    
    # 相当于set命令,Python中不用指定字符长度
    mc.set('name', 'hello', 60)
    
    # 可以一次设置多个值
    mc.set_multi({'username': 'zhangsan', 'age': '30', 'weight': '120'}, 60)
    
    # 相当于get命令
    name = mc.get('name')
    print(name)
    
    # 相当于delete命令
    mc.delete('name')
    
    # 可以一次删除多个值
    mc.delete_multi(['username', 'age'])
    
    # 自增长,默认自增长1
    mc.incr('weight', 10)
    
    # 自减少,默认自减少1
    mc.decr('weight', 10)
    

    四、Django中使用Memcached

    想要在Django中使用Memcached,既可以使用纯Python的方式来操作,也可以将Memcached配置为默认的缓存系统,在settings.py中按如下示例配置CACHES

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': '127.0.0.1:11211'  # 如果是连接多台机器,那这里可以配置为一个列表
        }
    }
    

    配置好后,使用from django.core.cache import cache导入即可,这个cache对象可以直接使用,不需要我们去手动连接。

    from django.core.cache import cache
    
    cache.set('name', 'zhangsan', 60)
    
    # 需要注意的是Django中会对存入的key使用特定的规则进行重命名,但在获取时仍然需要使用原来的key
    # 对于此处的代码,真正存储的key并不是“name”,但获取时仍然需要使用“name”
    print(cache.get('name'))
    

    五、Memcached安全

    因为只需要ip和端口号就可以连接到Memcached,所以使用Memcached需要注意下安全防护,通常有两种方式来解决这个问题,一种是使用-l参数指定只有本机才能连接,另一种是在防火墙中关闭该服务开启的端口访问,一般禁止掉默认的11211端口即可。

  • 相关阅读:
    使用JNI技术实现JAVA程序调用dll
    vim 技巧集
    Powershell: 计算机硬盘扩容
    jira:3、API 调用 (jira insight)
    Jira: 1、服务器搭建(测试环境)
    Powershell :AD 域操作之OU 导出、创建、 用户导出、创建、移动OU
    jira :数据库配置要求
    powershell:定期删除指定目录的文件
    Jira:2、创建API 访问Token
    证书:常见操作记录
  • 原文地址:https://www.cnblogs.com/guyuyun/p/13842076.html
Copyright © 2011-2022 走看看