传统的关系数据库在超大规模和高并发类型的 web2.0 纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。Redis 是是一个高性能的 key-value 数据库,可以有效应对高并发、大数据量访问的难题。
1. 程序功能介绍
程序提供了如下功能:
2. 源程序下载
3. 首页模板
3.1 查询数据
<html>
<head>
<Meta charset="UTF-8">
</head>
<body>
<h2>查询数据</h2>
<form action="/query", method="post">
<input type="submit" value="查询">
</form>
3.2 插入数据
<h2>插入数据</h2>
<form action="/insert", method="post">
<input type="text" name="key" placeholder="键名">
<input type="text" name="value" placeholder="键值">
<input type="submit" value="插入">
</form>
在第 2 行,定义表单 form 描述了插入数据的界面,使用 POST 方法提交给服务端的 /insert 页面进行处理;在第 3 行和第 4 行,表单中包含有两个字段 key 和 value,作为插入 Redis 数据库的键和值。
3.3 批量插入数据
<h2>批量插入数据</h2>
<form action="/insertMulti", method="post">
<input type="text" name="keyA" placeholder="键名">
<input type="text" name="valueA" placeholder="键值">
<br>
<input type="text" name="keyB" placeholder="键名">
<input type="text" name="valueB" placeholder="键值">
<input type="submit" value="插入">
</form>
在第 2 行,定义表单 form 描述了插入数据的界面,使用 POST 方法提交给服务端的 /insertMulti 页面进行处理;在第 3 行和第 4 行,表单中包含有两个字段 keyA 和 valueA;在第 6 行和第 7 行,表单中包含有两个字段 keyB 和 valueB;这两组键值对:keyA 和 valueA、keyB 和 valueB 会被批量插入到 Redis 数据库。
3.4 删除数据
<h2>删除数据</h2>
<form action="/delete", method="post">
<input type="text" name="key" placeholder="键名">
<input type="submit" value="删除">
</form>
<h2>删除所有数据</h2>
<form action="/deleteall", method="post">
<input type="submit" value="删除">
</form>
3.5 修改数据
<h2>修改数据</h2>
<form action="/update", method="post">
<input type="text" name="key" placeholder="键名">
<input type="text" name="value" placeholder="键值">
<input type="submit" value="修改">
</form>
</body>
</html>
在第 2 行,定义表单 form 描述了修改数据的界面,使用 POST 方法提交给服务端的 /update 页面进行处理;在第 3 行和第 4 行,表单中包含有两个字段 key 和 value,作为修改 Redis 数据库的键和值。
4. 查询结果模板
<html>
<head>
<Meta charset="UTF-8">
</head>
<body>
<h1>全部的键值对</h1>
<table border=1 cellpadding=0>
<tr>
<td>键</td>
<td>值</td>
</tr>
{% for key in dict %}
<tr>
<td>{{ key }}</td>
<td>{{ dict[key] }}</td>
</tr>
{% endfor %}
</table>
<br>
<a href="/">返回主页</a>
</body>
</html>
在第 8 行,定义了一个 table,使用 table 显示全部的键值对,table 包含 2 列,第 1 列显示键,第 2 列显示值;在第 13 行,Flask 程序传递给页面模板一个参数 dict,参数 dict 包含有 Redis 数据库的键值对,使用 for 循环显示 dict 中的键值对。
- ‘www’:‘WWW’;
- ‘imooc’:‘IMOOC’;
- ‘com’:‘COM’。
则 /query 界面如下图所示:
5. 后端 Flask 程序
5.1 安装相关模块
$ pip3 install redis
5.2 引入相关模块
#!/usr/bin/python3
from flask import Flask, render_template, request
import redis
app = Flask(__name__)
db = redis.Redis(host='localhost', decode_responses=True)
5.2 展示首页面
@app.route('/')
def index():
return render_template('index.html')
5.3 查询数据
@app.route('/query', methods = ['post'])
def query():
keys = db.keys()
dict = {}
for key in keys:
value = db.get(key)
dict[key] = value
return render_template('query.html', dict = dict)
函数 query () 通过调用 db.keys () 获取 Redis 数据库中所有的键,调用 db.get (key) 获取键对应的值,创建一个字典 dict 存储查询结果,最后将 dict 作为参数传递给模板 query.html,模板 query.html 以 table 的形式展现键值对,如下图所示:
5.4 插入数据和修改数据
@app.route('/insert', methods = ['post'])
@app.route('/update', methods = ['post'])
def insert():
key = request.form['key']
value = request.form['value']
db.set(key, value)
return query()
通过 request.form [‘key’] 获取表单中的 key 字段,通过 request.form [‘key’] 获取表单中的 value 字段,使用 db.set (key, value) 将键值对插入到 Redis 数据库中。
@app.route('/insertMulti', methods = ['post'])
def insertMulti():
keyA = request.form['keyA']
valueA = request.form['valueA']
keyB = request.form['keyB']
valueB = request.form['valueB']
db.mset({keyA:valueA, keyB:valueB})
return query()
用户插入多条数据时,通过 POST 方法将表单提交给 /insertMulit 页面,Flask 应用将请转发给函数 insertMulti () 处理。表单中包含有 2 组键值对:keyA 与 valueA、keyB 与 valueB,使用 db.mset ({keyA:valueA, keyB:valueB}) 将这 2 组键值对批量插入到 Redis 数据库中。
5.5 删除数据
@app.route('/delete', methods = ['post'])
def delete():
key = request.form['key']
db.delete(key)
return query()
用户删除单条数据时,通过 POST 方法将表单提交给 /delete 页面,Flask 应用将请转发给函数 delete () 处理。函数 delete () 调用 db.delete (key) 删除数据库中指定的键。
用户删除全部数据时,通过 POST 方法将表单提交给 /deleteall 页面,Flask 应用将请转发给函数 deleteall () 处理。函数 deleteall () 调用 db.flushall () 删除数据库中全部的键值对。
5.6 启动 Flask 程序
最后调用 app.run () 启动 Flask 程序:
app.run()