zoukankan      html  css  js  c++  java
  • Django

    Memcached

    1,Memcached

    1,什么是Memcached(3点)

    1,memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大型项目采用。官网是www.danga.com或者是memcached.org。
    2,Memcached是一个高性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力。Memcached是通过在内存里维护一个统一的巨大的hash表,memcached能存储各种各样的数据,包括图像、视频、文件、以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
    3,哪些情况下适合使用Memcached:存储验证码(图形验证码、短信验证码)、登录session等所有不是至关重要的数据。

    2,安装和启动memcached

    1,windows

    安装:

    memcached.exe -d install

    启动:

    memcached.exe -d start

    2,linux(ubuntu)

    安装:

    sudo apt install memcached

    启动:

    cd /usr/local/memcached/bin
    ./memcached -d start

    3,可能出现的问题

    ①提示你没有权限:在打开cmd的时候,右键使用管理员身份运行。
    ②提示缺少pthreadGC2.dll文件:将pthreadGC2.dll文件拷贝到windows/System32.
    ③不要放在含有中文的路径下面。

    4,启动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。

    3,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

    2,通过python操作memcached

    1,安装:python-memcached:

    pip install python-memcached

    2,建立连接:

    import memcache
    mc = memcache.Client(['127.0.0.1:11211','192.168.174.130:11211'],debug=True)

    3,设置数据:

    mc.set('username','hello world',time=60*5)
    mc.set_multi({'email':'xxx@qq.com','telphone':'111111'},time=60*5)

    4,获取数据:

    mc.get('telphone')

    5,删除数据:

    mc.delete('email')

    6,自增长:

    mc.incr('read_count')

    7,自减少:

    mc.decr('read_count')

    3,memcached的安全性

    memcached的操作不需要任何用户名和密码,只需要知道memcached服务器的ip地址和端口号即可。因此memcached使用的时候尤其要注意他的安全性。这里提供两种安全的解决方案。分别来进行讲解:

    1,使用-l参数设置为只有本地可以连接:

    这种方式,就只能通过本机才能连接,别的机器都不能访问,可以达到最好的安全性。

    2,使用防火墙,关闭11211端口,外面也不能访问。

    ufw enable # 开启防火墙
    ufw disable # 关闭防火墙
    ufw default deny # 防火墙以禁止的方式打开,默认是关闭那些没有开启的端口
    ufw deny 端口号 # 关闭某个端口
    ufw allow 端口号 # 开启某个端口

    4,在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
        }
    }
    

      

    如需转载,请在下方评论区留言或者私信博主  --- Qiuma

  • 相关阅读:
    Core Animation 文档翻译—附录C(KVC扩展)
    Core Animation 文档翻译—附录B(可动画的属性)
    Core Animation 文档翻译—附录A(Layer样貌相关属性动画)
    Core Animation 文档翻译 (第八篇)—提高动画的性能
    Core Animation 文档翻译 (第七篇)—改变Layer的默认动画
    Core Animation 文档翻译 (第六篇)—高级动画技巧
    Core Animation 文档翻译 (第五篇)—构建Layer的层次结构
    用Markdown快速排版一片文章
    Core Animation 文档翻译 (第四篇)—让Layer的content动画起来
    Core Animation 文档翻译(第三篇)—设置Layer对象
  • 原文地址:https://www.cnblogs.com/wuqiuming/p/10441207.html
Copyright © 2011-2022 走看看