LeanCache 指南
LeanCache 使用 Redis (3.0.x)来提供高性能、高可用的 Key-Value 内存存储,主要用作缓存数据的存储,也可以用作持久化数据的存储。它非常适合用于以下场景:
- 某些数据量少,但是读写比例很高,比如某些应用的菜单可以通过后台调整,所有用户会频繁读取该信息。
- 需要同步锁或者队列处理,比如秒杀、抢红包等场景。
- 多个云引擎节点的协同和通信。
下图为 LeanCache 和云引擎配合使用的架构:
恰当使用 LeanCache 不仅可以极大地提高应用的服务性能,还能降低成本,因为某些高频率的查询不需要走存储服务(存储服务按调用次数收费)。你可以 在 leanengine-nodejs-demos 中找到一些有关 LeanCache 的示例:
- associated-data 缓存关联数据
- leaderboard 实现排行榜
- limited-stock-rush 实现秒杀抢购
- redlock 实现分布式锁
主要特性
- 高性能:接近 7 万的 QPS
- 高可用:基于 AOF 持久化 的 Master-Slave 主从热备份。
- 在线扩容:在线调整容量,数据平滑迁移。
- 多实例:满足更大容量或更高性能的需求。
创建实例
在云服务控制台 > 云引擎 > LeanCache (Redis)页面点击创建实例即可创建新实例。
LeanCache 实例一旦生成,就开始计费,因此请认真对待该操作。
创建实 例时可设置的参数有:
- 实例名称:最大长度不超过 32 个字符,限英文、数字、下划线,只能以字母开头。每个开发者账户下 LeanCache 实例名称必须唯一。
- 实例容量:可选 128 MB、256 MB、512 MB、1 GB、2 GB、4 GB、8 GB。
- 删除策略:内存满时对 key 的删除策略,默认为
volatile-lru
,更多选择请参考 数据删除策略。
创建好的实例会在控制台显示基本信息,包括实例名称、创建时间、运行状态、当前连接数、已用容量、访问地址、数据删除策略、Redis 版本。 点击调整容量按钮可以扩容或缩容。 点击管理共享按钮可以查看可以访问该 LeanCache 实例的应用,
数据删除策略
目前我们支持如下几种策略:
策略 | 说明 |
---|---|
noeviction | 不删除,当内存满时,直接返回错误。 |
allkeys-lru | 优先删除最近最少使用的 key,以释放内存。 |
volatile-lru | 优先删除设定了过期时间的 key 中最近最少使用的 key,以释放内存。 |
allkeys-random | 随机删除一个 key,以释放内存。 |
volatile-random | 从设定了过期时间的 key 中随机删除一个,以释放内存。 |
volatile-ttl | 从设定了过期时间的 key 中删除最老的 key,以释放内存。 |
请注意,如果所有的 key 都不设置 过期时间,那么 volatile-lru
、volatile-random
、volatile-ttl
这三种策略会等同于 noeviction
(不删除)。更详细的内容请参考 Using Redis as an LRU cache。
LeanCache 实例一旦生成后,该属性不可修改。
删除实例
在云服务控制台 > 云引擎 > LeanCache (Redis)页面的每个实例卡片中,点击删除按钮即可删除实例。
删除其他应用共享的实例需要至该实例所属应用删除。
使用
LeanCache 目前支持通过云引擎访问。实例创建完毕后,云引擎应用就可以从环境变量中获取 REDIS_URL_<实例名称>
的 Redis 连接字符串,通过该信息连接并使用 Redis。
LeanCache 不提供外网直接访问。如果需要进行简单的数据操作或者查看状态,可以查看控制台:
或者使用命令行工具。
在命令行工具中使用
LeanCache 用户可以使用命令行工具来连接线上的 LeanCache 实例,对数据进行增删改查。
在一个已经关联过 LeanCache 实 例的云引擎项目中,使用 lean cache
命令,即可连上对应的 LeanCache 实例。另外需要注意的是,每个 LeanCache 实例,默认会分成 16 个 db,方便管理。没有特殊设置的话,默认使用的都是 db0。
连接成功之后,可以直接执行命令来对数据进行操作,比如查看某个 key 的值:
LeanCache (db 0) > GET foo
"bar"
LeanCache 基于 Redis,所以大部分 Redis 命令都可以使用。关于 Redis 的命令,请参考官方文档 。
可以通过下列命令查询当前应用有哪些 LeanCache 实例:
$ lean cache list
注意:命令行工具操作 LeanCache 时,是通过 HTTPS 请求来进行通讯的,因此类似 pub/sub
、blpop
等需要长连接的命令不能直接使用。但是线上没有这个限制,可以直接使用。
在云引擎中使用(Node.js 环境)
首先添加相关依赖到云引擎应用中:
"dependencies": {
"ioredis": "^4.9.0"
}
然后可以使用下列代码获取 Redis 连接:(假定实例名称为 MYCACHE
)
const Redis = require('ioredis')
const client = new Redis(process.env['REDIS_URL_MYCACHE']);
client.on('error', function(err) {
return console.error('redis err: ', err);
});
在云引擎中使用(Python 环境)
首先添加相关依赖到云引擎应用的 requirements.txt
中:
Flask>=0.10.1
leancloud-sdk>=1.0.9
...
redis
然后可以使用下列代码获取 Redis 连接:(假定实例名称为 MYCACHE
)
import os
import redis
r = redis.from_url(os.environ.get("REDIS_URL_MYCACHE"))
在云引擎中使用(PHP 环境)
首先添加 redis 库的依赖,比如 predis:
composer require 'predis/predis:1.1.*'
然后在 PHP 应用中通过环境变量获取 Redis 地址并创建链接,如:(假定实例名称为 MYCACHE
)
use Predis;
$redis = new Predis\Client(getenv("REDIS_URL_MYCACHE"));
$redis->ping();
在云引擎中使用(Java 环境)
在 pom.xml
中添加 redis client 的依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
并引入依赖:
import redis.clients.jedis.Jedis;
从环境变量中获取链接字符串,然后再创建 redis client 实例即可。(假定实例名称为 MYCACHE