什么是缓存
缓存系统是为了解决数据库服务器和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()