1. 安装数据库
开启三台虚拟机,安装mariadb和redis
服务 | IP |
---|---|
redis | 192.168.10.11 |
mysql | 192.168.10.12 |
客户端 | 192.168.10.13 |
[root@C7Base01 ~]# yum -y install mariadb mariadb-server
[root@C7Base02 ~]# yum -y install redis
注意:需要关闭redis的密码认证,在/etc/redis.conf
注释掉requirepass
,bind 0.0.0.0
2. 配置mysql
准备数据
CREATE DATABASE mydemo;
USE mydemo;
CREATE TABLE info(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30));
INSERT INTO info(name) VALUES('zhangsan'),('lisi'),('wangwu');
为mysql创建一个远程登录用户并授权相应的数据库。
GANTE ALL ON mydemo.* TO 'dw'@'%' IDENTIFIED BY '123';
GANTE ALL ON mydemo.* TO 'dw'@'localhost' IDENTIFIED BY '123';
QUIT;
3. 安装python3环境
在客户端配置python3
CentOS 7自带python为2版本已经过时,需要安装3版本。
#yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
#安装python3.6
yum -y install python36
4. python脚本
安装python函数库redis
和pymysql
pip3 install redis pymysql
缓存脚本:
功能:根据name
查询id
,并且缓存到redis。
#!/bin/python3
import redis
import pymysql
# 使用redis库登录redis数据库
redis_client = redis.StrictRedis(host='192.168.10.12', port=6379, decode_responses=True)
#使用pymysql库登录mysql数据库
conn = pymysql.connect(
host='192.168.10.11',
user='dw',
password='123',
database='mydemo',
port=3306,
charset='utf8'
)
#创建游标
mysql_cursor = conn.cursor()
#定义mysql数据库查询函数
def fetch_data_from_mysql(key):
sql="SELECT id FROM info WHERE name='%s'"%key
mysql_cursor.execute(sql)
result = mysql_cursor.fetchone()
if result:
return result[0]
else:
return None
#定义执行逻辑,先查找redis数据库,有数据就返回,没有再查找mysql数据库再缓存数据并且返回数据
def get_data(key):
cached_data = redis_client.get(key)
if cached_data is not None:
print('from redis!')
return cached_data
else:
data = fetch_data_from_mysql(key)
if data is not None:
redis_client.set(key, data, ex=3600)
print('from mysql!')
return data
else:
return "Data not found"
if __name__ == "__main__":
#要查找的键
key = "lisi"
#取返回结果
result = get_data(key)
#输出返回结果
print(result)
注:查询不同数据,修改key就好!
5. 验证
redis执行flushall
清空所有数据!
查看mysql的数据表
key值设置为lisi
,执行两次缓存脚本,第一次redis无缓存走mysql,第二次有缓存直接返回。
python3 huancun.py
查看redis的键
结束!