django缓存与redis

什么是缓存

缓存系统是为了解决数据库服务器和web服务器之间的瓶颈。如果一个网站的流量很大,这个瓶颈将会非常明显,每次数据库查询耗费的时间将会非常可观。对于更新速度不是很快的网站,我们可以用静态化来避免过多的数据库查询。对于更新速度以秒计的网站,静态化也不会太理想,可以用缓存系统来构建。如果只是单台服务器用作缓存,问题不会太复杂,如果有多台服务器用作缓存,就要考虑缓存服务器的负载均衡。

什么是redis

  • 市面上一般两种数据库,一种是mysql、oracle之类的关系型数据,还就是键值数据库;
  • 键值数据库的存储结构类似于一个字典;
  • Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
  • 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
  • 数据结构:
    string(字符串)
    list(双向链表)
    dict(hash表)
    zset(有序集合)
    set(集合)
  • 相比如关系数据的优势:
    a. 它是键值数据库,本身数据结构查询就比关系数据库快
    b. redis是基于内存的一个数据库,I/O影响的效率较小

安装操作:

  • 启动
    sudo service redis start
  • 停止
    sudo service redis stop
  • 重启
    sudo service redis restart
  • 客户端操作
    redis-cli

在django中使用redis当作缓存

  • 安装,django-redis是一个开源的python包
    django-redis文档地址:https://github.com/niwinz/django-redis
pip install django-redis
  • 在settings中配置如下
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
  • 使用页面缓存
    a. 页面缓存使用的场景,一般都是变动较小的页面,比如Index,首页;
    b. 页面缓存使用需要注意,因为可能影响你逻辑展示;
from django.views.decorators.cache import cache_page
...
url(r'^login/$', cache_page(60)(views.Login.as_view()), name="login"),
  • 访问缓存
from django.core.cache import cache
  • 新建set(key, value, timeout),
    key:键
    value: 值
    timeout: 超时时间, 是一个可选参数,默认为你配置的超时时间。
cache.set('my_key', 'hello, world!', 30)
  • 添加add(key, value, timeout)它使用与set()相同的参数,但如果指定的键已经存在,它不会尝试更新缓存
cache.add('my_key', 'hello, world!')
  • 设置多个值set_many ,请使用set_many()传递键值对的字典:
cache.set_many({'a': 1, 'b': 2, 'c': 3})
  • 获取get(key)
cache.get('add_key')
  • 获取与创建get_or_set(key, value, timeout)
cache.get_or_set("test", "2", 100)
  • 删除delete(key)
cache.delete('a')
  • 批量删除 delete_many(keys)
cache.delete_many(['a', 'b', 'c'])
  • 清除所有clear, 该操作一定要慎重
cache.clear()

你可能感兴趣的:(django缓存与redis)