Django分析之使用redis缓存服务器
redis相信大家都很熟悉了,和memcached一样是一个高性能的key-value数据库,至于什么是缓存服务器,度娘都有很明白的介绍了,我在这里就不一一介绍了。
那我们一般什么情况下才会使用缓存服务器呢?可不是什么情况都需要的哦,一般来说是在需要频繁对一个字段读取的时候才会需要将这个字段放入到缓存服务器上,而且由于key-value数据库一般只是放很简单的数据,所以在选择保存的对象的时候要注意选择好。
下面我就来介绍如何在Django中配置使用redis数据库,首先是先安装redis了,在Ubuntu中执行下面这句命令:
#安装Redis服务器端 ~ sudo apt-get install redis-server
然后为了能在Django中使用redis,还需要安装redis for Django的插件:
pip install django-redis
注意: django-redis依赖于redis-py, 会调用redis-py,所以安装django-redis时,会把redis-py也安装上,如下:
这是一个开源的项目,github地址是https://github.com/niwibe/django-redis,感谢作者。
那么现在就是在Django的settings中配置了。
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://:foobared@127.0.0.1:6379/0', #如果redis配置了密码,比如requirepass foobared, 这里就要配置密码,格式就是
"redis://:你的密码@服务器地址:6379/0", 如果没有配置密码,格式是 "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
},
}
NEVER_REDIS_TIMEOUT=365*24*60*60
其实只是需要CACHES中的那几条就可以了,后面的
NEVER_REDIS_TIMEOUT
可以不需要的,只是我后面的例子里需要用到,我就在这里配置了。
好了,现在连接和配置都已经完成了,那么在项目中该如何使用呢?接下来看下面这段例子吧。
# read cache user id
def read_from_cache(user_name):
key = 'user_id_of_'+user_name
value = cache.get(key)
if value is None:
data = None
else:
data = json.loads(value)
return data
# write cache user id
def write_to_cache(user_name):
key = 'user_id_of_'+user_name
cache.set(key, json.dumps(user_name), settings.NEVER_REDIS_TIMEOUT)
通过上面的这两个方法就可以实现对redis的读取操作了,只需要将需要的字段当参数传入到方法中就好了。
那么之前提到的memcached呢?其实也是一样的配置:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } }
当然用法也是和我上面的例子是一样的了。其实对于redis这样的缓存服务器来说,配置都是很简单的,而具体的使用也不难,官网上面也有很多简单明了的例子可以供我们参考,只有一点需要注意的,那就是对于要将什么样的信息保存到redis才是我们真正需要关心的。
Django使用redis做cache
- 首先安装下载安装
pip install django-redis。
- 下载完成后,打开settings.py中配置django cache
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
如果redis设置了密码,则配置如下:
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://:你的密码@服务器地址:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", }, } }
注意:密码的前面的:和后面的@都不能省略
- 读写
cache.set('get_user_id_bugall',123,settings.NEVER_REDIS_TIMEOUT)
cache.get('get_user_id_bugall');
- 从redis中查看是成功
redis-cli keys ‘*’ #产看redis中现存的所有key
- 对于高并发需求的,类似数据库中client_pool一样,django-redis同样支持连接池
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
...
"OPTIONS": {
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
}
}
}
C:\Users\dell>pip install django-redis
Collecting django-redis
Downloading django_redis-4.8.0-py2.py3-none-any.whl
Collecting redis>=2.10.0 (from django-redis)
Downloading redis-2.10.6-py2.py3-none-any.whl (64kB)
100% |████████████████████████████████| 71kB 75kB/s
Installing collected packages: redis, django-redis
Successfully installed django-redis-4.8.0 redis-2.10.6