redis mysql_redis和mysql的结合示例[通俗易懂]

redis mysql_redis和mysql的结合示例[通俗易懂]mysql和redis的区别mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。redis是非关系型数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限django中使用mysql的方法通过继承models.Model来生成数据库表,详情见Django模型的使用。django中使用redis的方法首先安装python库pip3i…

大家好,又见面了,我是你们的朋友全栈君。

mysql和redis的区别

mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。

redis是非关系型数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限

django中使用mysql的方法

通过继承models.Model来生成数据库表,详情见Django模型的使用。

django中使用redis的方法

首先安装python库

pip3 install django-redis

在settings.py中增加如下代码

CACHES = {

‘default’: {

‘BACKEND’: ‘django_redis.cache.RedisCache’,

‘LOCATION’: ‘redis://127.0.0.1:6379’,

“OPTIONS”: {

“CLIENT_CLASS”: “django_redis.client.DefaultClient”,

“CONNECTION_POOL_KWARGS”: {“max_connections”: 100}

},

},

}

REDIS_TIMEOUT=7*24*60*60

CUBES_REDIS_TIMEOUT=60*60

NEVER_REDIS_TIMEOUT=365*24*60*60

在业务逻辑代码中加入

from django.core.cache import cache

此后,就可以通过

cache.set(key,value)

进行键值对的存储。通过

cache.get(key)

进行键值对的查询。

问题实例

在笔者实现的弹幕系统中,每一个发送到服务器的弹幕都要判断其所对应的活动是否接受图片弹幕。是否接受图片弹幕,原先存储在mysql的活动表中。但是每次发送弹幕都要从mysql中查询一次其所属的活动会降低系统的性能,同时总活动数(相对于弹幕数量)较少,适合将其存到redis中。

由于mysql和redis中都会维护活动的相关信息,因此在增删改查时需要保证数据的一致性。

考虑到请求的种类特点,此处采用了一种较为简洁的策略:

由于发送弹幕的请求数量较多,而每次发送弹幕是都需要查询活动信息,因此活动信息直接从redis查询得到。

由于修改活动信息的请求数量较少,不妨每次修改活动信息时会同时修改redis和mysql中的活动信息,从而保证了数据的一致性。

具体代码如下

def read_from_cache(attribute, id):

”’

从内存中读取数据库字段

:param attribute: 属性名

:param id: 数据库记录的id

:return:

”’

key = attribute + ‘_’ + str(id)

value = cache.get(key)

if value is None:

data = None

else:

data = json.loads(value)

return data

def write_to_cache(attribute, id, value):

”’

向内存中写入数据库字段

:param attribute: 属性名

:param id: 数据库记录id

:param value: 写入的值

:return:

”’

key = str(attribute) + ‘_’ + str(id)

cache.set(key, json.dumps(value), settings.NEVER_REDIS_TIMEOUT)

def get_activity_attribute(activity_id, attribute_name):

”’

从内存中读取与活动相关的属性

:param activity_id: 活动id

:param attribute_name: 属性名

:return: 返回值。如果没有找到,返回None

”’

data = read_from_cache(“activity_”+attribute_name, activity_id)

if data is not None: #如果能在内存中查到

print(“在内存中找到”, “属性名=”+attribute_name, “id=”,activity_id,”value=”, data)

return data #则直接返回

activities = Activity.objects.filter(id=activity_id) # 否则在数据库中进行查找

if len(activities) == 0:

return None

try:

data = activities.values(attribute_name)

data = data[0][attribute_name]

write_to_cache(“activity_” + attribute_name, activity_id, data)

return data

except:

return None

def set_activity_attribute(activity_id, attribute_name, value):

”’

向内存中写入与活动相关的信息

:param activity_id: 活动id

:param attribute_name: 属性名

:param value: 值

:return: 是否设置成功

”’

activities = Activity.objects.filter(id=activity_id) # 首先写到数据库中

if len(activities) == 0:

return False

setattr(activities[0], attribute_name, value)

activities[0].save()

write_to_cache(“activity_”+attribute_name, activity_id, value) # 然后在内存中更新相应字段

return True

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151200.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux安装有几种方法_python安装pycharm的方法

    linux安装有几种方法_python安装pycharm的方法Linux安装Pycharm

    2025年8月1日
    3
  • JS高程读书笔记–第三章基本概念

    JS高程读书笔记–第三章基本概念

    2021年9月16日
    49
  • lvds接口类型_LVDS输出

    lvds接口类型_LVDS输出LVDS接口分类,时序,输出格式

    2025年7月31日
    4
  • Portraiture 3.5.6磨皮滤镜插件适用于Photoshop磨皮美化功能[通俗易懂]

    Portraiture 3.5.6磨皮滤镜插件适用于Photoshop磨皮美化功能[通俗易懂]软件名称:Portraiture3Plug-in版本号:v3.5.6(build版3565-03)软件大小:8.48MB软件语言:简体中文授权形式:一码一机更新日期:2021年8月23日软件类型:简体中文软件类别:国内软件-插件软件-磨皮插件软件插件捆绑:无支持系统:MacOS10.13-11.4简介:Portraiture是一款智能磨皮的滤镜插件,该插件能够给Photoshop和Lightroom添加智能磨皮美化功能,可以帮助用户快速对图片中的人物的皮肤、头发

    2022年7月22日
    15
  • 常见的IT自动化运维工具有哪些?推荐一款好用的?「建议收藏」

    自动化运维是IT运维工作的升华,其不单纯是一个维护过程,更是一个管理的提升过程,是IT运维的最高层次,也是未来的发展趋势。所以作为IT运维人员,一定要知道常见的IT自动化运维工具有哪些?哪款比较好用?常见的IT自动化运维工具有哪些?1、Puppet2、SaltStack3、Ansible4、PSSH5、阿里云OOS6、行云管家【重点推荐】一款好用的自动化运维工具-行云管家!1、自动化运维之预设脚本库脚本是实现自动化运维的基础,运维人员经常通过脚本来替代以往一些需要手工操作的业务,提升工作

    2022年4月14日
    163
  • win10安装虚拟机win7全部教程_服务器与虚拟服务器

    win10安装虚拟机win7全部教程_服务器与虚拟服务器现在很多的电脑都是预装的win10系统了,尽管win10系统是现在主流的操作系统,但是不少网友还是对xp念念不忘。这种情况下我们可以不需要安装双系统,在WINDOWS10安装XP系统虚拟机即可。下面小编就教下大家win10系统自带的虚拟机安装xp系统教程。具体的步骤如下:1、打开开始菜单,点击”控制面板”,点击”程序”。2、点击右侧的”启用或关闭Windows功能”。3、在新窗口下找到并选择Hy…

    2022年8月16日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号