Day 26 Redis (下)

上一篇我们只简单介绍了 Redis ,这篇就来详细的介绍一下以及如何再 Flask 中使用。

Redis 详细介绍

Redis 中 Key 可以为 String 结构;Value 可以为 Strings 、 Lists 、 Sets 、 Hashes 及 Sorted sets 。Redis 还可以设定过期时间以及其他的设定(Redis 还可以写脚本,还能开频道及订阅???),不过大概理解 Redis 是以 Key-Value 为结构存在在记忆体,以及是以呼叫 Key 取得 Value 的状态取值就可以了(虽然底层没有这麽单纯就是了,底层大概有 10 种类型)。

Data types

在官网的说明中 String 为最基础的型态,可以存放 binary, string, integer, float 之类的资料,,单一个 Key 可以存放 512MB 的资料。

接着是 Lists ,Lists 就是 Strings 的列表(有顺序,相当於 Python 中的 List),单一个 Key 可以存放最大长度为 2^32^ - 1 (4,294,967,295 或者说 42 亿左右)的 Lists。

再来是 Sets ,Sets 是 Strings 的集合(无顺序,相当於 Python 中的 set),且不允许同样的内容重复存在,单一个 Key 可以存放最多为 2^32^ - 1 (4,294,967,295 或者说 42 亿左右)个成员。

还有 Hashes ,Hashes 是 string 与 string 的映射(相当於 Python 中的 dict,可以一对多,用空格隔开,若资料本身有空格,可用双引号刮起来),单一个 Key 可以存放最多为 2^32^ - 1 (4,294,967,295 或者说 42 亿左右)个键值对。

最後是 Sorted sets ,Sorted sets 跟 Sets 差不多,不过 Sorted sets 需要给每一笔资料一个 double 类型的分数,然後依照这个分数对所有资料排序,一样不允许同样的内容重复存在,不过分数可以重复,单一个 Key 可以存放最多为 2^32^ - 1 (4,294,967,295 或者说 42 亿左右)个成员。

flask-redis

如果要使用 flask-redis 这个 Flask 的插件的话,需要先安装 flask-redis 这个插件,安装的方式还是老样子。

$ pipenv install flask-redis

安装好了之後,就可以来看如何使用了。架构大概长这样:

ithome_redis
├── app.py  # 主要的档案
├── config.py  # 设定档
├── Pipfile  # 不管它,建立虚拟环境时自己会出现
└── Pipfile.lock  # 不管它,安装套件时自己会出现

这个插件需要设定一个 REDIS_URL 的参数,设定规则大概是这样:

REDIS_URL = "redis:// [: password@] host [: port] [/ database][? [timeout=timeout[d|h|m|s|ms|us|ns]] [&database=database]]"

host 就是本机,所以填 'localhost'
port 是预设的 port ,所以填 6379
database 就选择第一个,所以填 0
其他没有用到就不填

所以 REDIS_URL 最後变这样:

REDIS_URL = "redis://localhost:6379/0"

然後就来设定其他东西啦。

app.py

from flask import Flask
from flask_redis import FlaskRedis  # 增加这行

import configs


app = Flask(__name__)
app.config.from_object(configs.DevelopmentConfig)
# 刚刚的设定参数
app.config['REDIS_URL'] = "redis://localhost:6379/0"

r = FlaskRedis(app)
r.set('test', 0)


@app.route('/')
def index():
    r.incr('test')
    test = r.get('test')
    return test


if __name__ == '__main__':
    app.run()

接着启动 redis-server (切到 redis-stable 里面输入 src/redis-server),再启动 Flask (不照这个顺序会报错,以及要开一个新的 terminal 去启动 Flask 喔,不要傻傻的关掉 redis-server),然後打开浏览器,输入 http://localhost:5000 就可以看到了,然後多按几次 F5 重新更新一下浏览器,就会看到数字在不断的更新了。

redis-py

如果使用 redis-py 的套件的话,需要先安装 redis-py 这个套件,不过安装的名称有点不一样。

$ pipenv install redis

如果安装好了之後,就可以来看如何使用了。架构大概长这样:

ithome_redis
├── app.py  # 主要的档案
├── config.py  # 设定档
├── Pipfile  # 不管它,建立虚拟环境时自己会出现
└── Pipfile.lock  # 不管它,安装套件时自己会出现

app.py

from flask import Flask
from redis import Redis  # 增加这行

import configs


app = Flask(__name__)
app.config.from_object(configs.DevelopmentConfig)

# 连接本地的 redis server,埠号 6379,连接 0 号资料库
r = Redis(host='localhost', port=6379, db=0)

# 设定资料 key => test, value => 0
r.set('test', 0)


@app.route('/')
def index():
    # key 为 test 的资料 +1
    r.incr('test')
    # 取得 test 的资料
    test = r.get('test')
    return test


if __name__ == '__main__':
    app.run()

接着跟上面一样启动 redis-server ,再启动 Flask ,最後再开启浏览器,输入 http://localhost:5000 并且不断按 F5 重新载入就可以看到跟上面同样的画面了(因为两个套件只是用法稍微不太一样而已,功能还是相同的)。

这样就大概是 redis 的基本使用了。

参考资料

Redis DataType 介绍

那麽就大概这样,Redis 通常不会直接使用它,而是做为其它套件的存储东西使用(像是快取暂存或是任务队列),所以 Redis 没有对它有很详细的介绍,绝对不是我偷懒啦。

大家掰~掰~


<<:  [ Day 26 ] 实作一个 React.js 网站 2/5

>>:  轻松小单元 - 最新修正内容(2021)

Batch Processing (2) - MapReduce Job Execution

MapReduce and Distributed Filesystems MapReduce 有点...

Day 26: Tensorflow分类 分类图像衣物(一)

Tensorflow 衣物图像分类 辅助阅读: Basic classification: Clas...

Day 17 快没文章了 先偷渡cypress 改天改写一下

.url 抓取测试url .window 使用window物件 .its 在window底下使用lo...

[Python]Natural Language Toolkit

http://www.nltk.org/ NLTK 是一个主流用於自然语言处理的 Python 库 ...

[Day9]PHP判断式02

PHP判断式 break break 结束当前 for,foreach,while,do-while...