基于python+mysql浅谈redis缓存设计与数据库关联数据处理

by:授客 QQ:1033553122

测试环境

redis-3.0.7

CentOS 6.5-x86_64

python 3.3.2

基于Python操作Redis

1、创建示例数据库表

CREATE TABLE tb_signin_rank(

id INT,

user_name VARCHAR(10) COMMENT '用户名',

signin_num INT COMMENT '签到次数',

signin_time DATETIME COMMENT '签到时间',

gold_coin INT COMMENT '金币'

);

初始化数据

INSERT INTO tb_signin_rank

VALUES(1, 'shouke', 0, NULL, 0),

(2, 'chuangke', 0, NULL, 0),

(3, 'ishouke', 0, NULL, 0),

(4, 'keshou', 0, NULL, 0),

(5, 'shouke', 0, NULL, 0);

2、redis缓存键值设计

keyvalue

表名:主键值:列名列值

或者如下,通过为不同列之间建立较为紧密的关联

keyvalue

表名:主键值:列值1:列名2列值2

示例:把id为1的人的签到次数(假设为5)存储到redis中则可如下操作:

set('tb_signin_rank:1:signin_num', 5)

这样做的好处是,类似数据库一样,通过主键便可获取其它值。

示例:把id和用户名关联

set('tb_signin_rank:shouke:id', 1)

这样,通过用户名就可以查询出关联的id了:uid = r.get("tb_signin_rank:%s:id" % username)

3、redis关联数据库的数据处理

不要求强一致实时性的读请求,都由redis处理

要求强一致实时性的读请求,由数据库处理

通常包含以下两种处理模式:

模式1:

如图,先判断是否存在缓存(通常是根据key),如果存在则从缓存读取,否则从数据库读取并更新缓存。

适用场景:对数据实时性要求不高,更新比较不频繁,比如签到排行榜

模式2:

如下图,先写入redis然后,利用守护进程等方式,定时写入到数据库

模式3:

如下图,先写入数据库,然后再更新到缓存

适用场景:数据量较大,更新较为频繁

说明:

模式2和模式3的区别在于,前者把redis当作数据库用,通过写入redis后马上返回程序,然后定时把数据写入数据库,这也大大提高了访问速度。这种方式不足的是,这种对redis的可靠性依赖性太强

4、案例

./dbconfig.conf配置

[TESTDB]

host = 192.168.1.103

port = 3306

user = testacc

passwd = test1234

db = testdb

charset = utf8

#!/usr/bin/env python

# -*- coding:utf-8 -*-

__author__ ='shouke'

importconfigparser

importsys

importmysql.connector

importredis

if__name__ =='__main__':

pool = redis.ConnectionPool(host='192.168.1.103',port=6379,db=0)

r = redis.Redis(connection_pool=pool)

# r.expire('tb_signin_rank:id:signin_num', 20)

config = configparser.ConfigParser()

#从配置文件中读取数据库服务器IP、域名,端口

config.read('./dbconfig.conf')

host = config['TESTDB']['host']

port = config['TESTDB']['port']

user = config['TESTDB']['user']

passwd = config['TESTDB']['passwd']

db_name = config['TESTDB']['db']

charset = config['TESTDB']['charset']

try:

dbconn = mysql.connector.connect(host=host,port=port,user=user,password=passwd,database=db_name,charset=charset)

exceptException ase:

print('初始化数据连接失败:%s'% e)

sys.exit()

#执行签到

try:

db_cursor = dbconn.cursor()

foridinrange(1,6):

db_cursor.execute('UPDATE tb_signin_rank SET signin_num = signin_num + 1, signin_time = NOW(), gold_coin = gold_coin + (1 + RAND()*9) WHERE id = %s',(id,))

db_cursor.execute('commit')

#更新缓存

r.zincrby("tb_signin_rank:id:signin_num", id,1)

exceptException ase:

print('执行数据库更新操作失败:%s'% e)

db_cursor.execute('rollback')

db_cursor.close()

exit()

#展示用户签到次数

foridinrange(1,6):

result = r.zscore('tb_signin_rank:id:signin_num', id)

if notresult:#不存在缓存,从数据库读取

print('----从数据库读取用户签到次数----')

try:

db_cursor = dbconn.cursor()

db_cursor.execute('SELECT signin_num FROM tb_signin_rank WHERE id = %s', (id,))

result = db_cursor.fetchone()[0]

#更新到缓存

r.zadd('tb_signin_rank:id:signin_num', id, result)

exceptException ase:

print('执行数据库查询操作失败:%s'% e)

db_cursor.close()

else:#存在缓存,从缓存读取

print('----从缓存读取用户签到次数----')

result =int(result)

print('sigin_num of user[id=%s]: %s'% (id, result))

#展示签到排行榜

result = r.zrevrange('tb_signin_rank:id:signin_num',0,10)

print('签到排行榜:', result)

参考连接:

http://www.cnblogs.com/qq78292959/archive/2013/02/05/2892735.html

python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...相关推荐

  1. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  2. python 文本框位置_「每日一练」Python文本框的显示和插入

    Python强大之处在于对于数据的处理,而处理数据就离不开文本框,那么你知道Python中文本框是如何显示和插入吗? 案例 python文本框的显示和插入 先上代码~ 运行效果 题目详述 第一行: i ...

  3. 点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:solocoder juejin.im/post/5bdc2 ...

  4. 点赞模块设计 - Redis缓存 + 定时写入数据库实现高性能点赞功能

    源码地址:github.com/cachecats/c- 点赞是作为整个系统的一个小模块,代码在 user-service 用户服务下. 本文基于 SpringCloud, 用户发起点赞.取消点赞后先 ...

  5. python应用如何实现升级_一种基于Python实现BMC批量升级的方法与流程

    本发明涉及BMC批量升级,尤其涉及一种基于Python实现BMC批量升级的方法. 背景技术: 随着现代服务器主板技术的发展,主板设计形态复杂多变.无论是设计成本还是后期使用过程中的维护成本都很高.如何 ...

  6. python 文本框输入提交_python 文本框

    Python学习(28)--tkinter图形界面编程1 Python学习(28)--tkinter图形界面编程1 这一节我们将介绍Python内置的图形界面编程模块tkinter,tkinter是P ...

  7. python文本框清空_用Python制作mini翻译器

    来源:http://suo.im/5ZI20R 1. 实例描述 在平时编程的过程中,会经常在网上翻译一些单词,本文使用Python制作一款翻译小工具,不仅可以自己用,还可以嵌入到程序当中.运行程序,效 ...

  8. python 文本框_重置Python中的文本框

    几个星期前,我在制作重置按钮时要求一些帮助,我是python的新手,还有一个Noob,主要是我在c& c#也是SQL反正我正在为游戏制作一个重置按钮,我无法让它工作.这是代码.问题似乎是它在发 ...

  9. python 文本框内容变化_监听文本输入框内容值的改变——4种方法

    以下是addTarget: import "ViewController.h" @interface ViewController () @property (weak, nona ...

最新文章

  1. JSP+MySQL实例
  2. 一击进榜!达摩院十年“扫地僧”,揭秘阿里云数据仓库逆袭之旅
  3. Spark _12_每个网址的每个地区访问量 ,由大到小排序
  4. 6-4 建立学生信息链表 (20 分)
  5. JDBC布尔兼容性列表
  6. 安卓投屏大师_苹果,安卓手机如何免费投屏?只要悄悄按下这里,便能轻松实现...
  7. IDEA mybatis-generator-maven-plugin 插件的使用
  8. 精美的导航引导页html源码
  9. linux下的vconfig配置_Linux系统下安装配置-OpenLDAP-phpLDAPadmin
  10. matlab用diag直接使用错误_洗脸扑的正确使用方法,你还在用错误的方式洁面吗?...
  11. python工具包:random的注意事项
  12. python2和python3同时安装在Windows上
  13. sip 接听后没有声音
  14. 3.7V转5V电路图芯片,3.7V升压5V的升压芯片
  15. 美国区块链与药品供应链管理的应用案例
  16. 学java进美团_美团实习Java岗面经,已拿offer
  17. 计算机自动关机时间如何设置在哪设置方法,Win8设置电脑在某一个时间段自动关机的三种方法...
  18. 不用iTunes也能添加音乐到iPod
  19. 内网计算机安全使用规则,局域网网络安全注意事项
  20. 宗镜录略讲——南怀瑾老师——系列2

热门文章

  1. 后面冒号_Python 数组中的冒号使用
  2. c++ class 类名 和 include 的区别
  3. Visual Studio 2013 (CV版)编译错误【error C4996: 'sprintf': This function or variable may be unsafe. 】的解决方案
  4. Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable
  5. js的匿名函数 和普通函数
  6. JAVA动态加载JAR包执行程序
  7. 给已经做好的GHO文件添加密码
  8. 用条件变量实现事件等待器的正确与错误做法
  9. 读书笔记_Effective_C++_条款七:为多态基类声明virtual析构函数
  10. Bailian2684 求阶乘的和【迭代+函数+循环】(POJ NOI0105-34)