用这套Django配置,redis缓存效率优化40%以上

django4.0使用hiredis优化redis缓存数据库的访问

如果python版本是3.6+,可以使用hiredis库对redis进行优化。

hiredis官方介绍是:

[翻译]:Python扩展,将协议解析代码包装在hiredis中。它主要加快了多批量回复的解析速度。

django4.0新增了对redis的官方支持,建议开发者用redis库而不是django-redis库轻松配置缓存功能。

官网上对redis 和 hiredis 的描述:

Redis is an in-memory database that can be used for caching. To begin you’ll need a Redis server running either locally or on a remote machine.

After setting up the Redis server, you’ll need to install Python bindings for Redis. redis-py is the binding supported natively by Django. Installing the additional hiredis-py package is also recommended.

官网上建议使用reids库,并使用hiredis库优化,这里介绍hiredis库的使用方法

安装

python -m pip install hiredis 

到此,django对redis的优化就结束了,简单吧!惊喜吧!

测试

其实题主也挺惊喜的,但是为了确保hiredis确实在工作,又跑去翻了半天的官方文档,最后刨出一个手动配置hiredis 的方法:

在settings.py中配置

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.redis.RedisCache',
        'LOCATION': 'redis://192.168.252.123:6379',
        'OPTIONS': {
            'db': '1',
            'parser_class': 'redis.connection.HiredisParser',
            'pool_class': 'redis.ConnectionPool',
        }
    }
}

也就是将parser_class解析对象改成hiredis库中的就可以了。如果你不手动配置,django4.0会默认配置成这样。

这里是为了测试django确实在使用hiredis,所以手动配置了下,并将hiredis卸载掉。

接着我们直接测试,编写一个使用了缓存的视图函数并运行。

from django.core.cache import caches      # 新版本这么用

caches.set('testkey', '12342342',120)

报错

redis.exceptions.RedisError: Hiredis is not installed

这下说明hiredis确实在起作用了。有条件的小伙伴可以进一步性能测试,在同一个视图函数中,使用两次或两次以上的缓存方法,看看响应时间是否有所提升。

性能测试

为了验证hiredis对redis的性能提升,这里编写一个一次性向远程redis数据库写入1w个键值对,并获取1w个键值对的视图函数。(题主这里偷个懒不写测试脚本了,直接手动点postman直接看效果)

from django.core.cache import caches

# caches= caches['verify_code']  # 可选操作,选择数据库
caches.set_many({f'imgvrf-{codeuid}{i}':code for i in range(10000)},120)
caches.get_many([f'imgvrf-{codeuid}{i}' for i in range(10000)])

相同的视图函数下,我们在settings.py中手动配置禁用/启用hiredis的情况下,响应时间在800ms以内(题主的电脑价位5k,如果是服务器会更快),启用hiredis时响应时间缩短了100ms左右,而这只是一次请求的响应时间,如果是动辄几万并发的项目,相信这个性能提升会非常明显。

更新!!

由于题主之前是用redis3测试的,版本比较老旧,所以优化效果不是很明显,后来用了最新的redis6.2.6版本的redis又进行了一次测试,这次的优化效果非常明显,在启用hiredis的情况下,比不启用的情况访问效率要快40%!

结论

  • 【重要】在django4.0中使用hiredis对redis的性能优化非常明显,墙裂建议使用redis+hiredis进行缓存开发。
  • 【重要】如果一次性需要写入/读取多个值,哪怕是2个值,也要使用set_many/get_many进行操作,而不是set/get函数,懂的都懂,不懂的就这么干就完了,只有好处。
  • 普通电脑写入并读取10000次远程redis数据库,1s内就能出结果,说明python的运行效率还是很能打的。

原创不易,觉得好的小伙伴请动动手点个赞吧,有问题可以留言哈

源码及redis6.2.6资源:

  • 本例测试源码 1
  • redis安装包2

  1. 本例测试源码 ↩︎

  2. redis-6.2.6windows版压缩包 ↩︎

你可能感兴趣的:(python,django,redis,缓存,数据库)