|
|
实现多库(或多实例)该如何配置?虽然不推荐,但如果你出于公司规范、旧项目迁移或团队硬性要求5 [% c/ q: x2 Y9 \
,必须将 PV 统计放到另一个 Redis 库(如 db1)甚至另一个独立的 Redis 服务器上,以下是基于 Django(通过 django-redis 插件)在 settings.py 中的标准配置方法:
3 s. s" r% |3 E t- u1. 在 settings.py 中配置多缓存实例在 CACHES 配置项中,将默认的库作为 default,并新建一个名为 pv_stats(或其他自定义名称)的配置:pythonCACHES = {
# ]+ X( @. g' a: x* G # 1. 现有的验证码和默认缓存(使用 db0)
2 P$ C. } |! q$ U5 G3 i8 C# ~ "default": {7 `2 y: h' w ^/ F% E' L8 W# A
"BACKEND": "django_redis.cache.RedisCache",
! Q- I$ o+ l- {/ g/ ?; \ "LOCATION": "redis://127.0.0.1:6379/0", # 指定 0 号库2 o9 K2 m# L. a! t2 V) O7 h2 |
"OPTIONS": {, T q8 f ^; o
"CLIENT_CLASS": "django_redis.client.DefaultClient",
) _7 F/ t& x8 G' u" O+ Z3 m }
6 A. U: n3 d$ Z# y0 T9 O& C },
! }& q V# x* s+ t' i" T1 w # 2. 新增的今日访问量缓存(使用 db1)
8 F8 N1 S" x% t* x$ ]1 A "pv_stats": {5 r/ w0 c" ^, `# J1 ]6 Q$ b
"BACKEND": "django_redis.cache.RedisCache",
, V# V" d9 h+ D/ ~! @# N "LOCATION": "redis://127.0.0.1:6379/1", # 修改库号为 1
( n' x2 y* x0 u/ s) x x "OPTIONS": {" }+ Z; n" |3 N f2 }$ ~+ m
"CLIENT_CLASS": "django_redis.client.DefaultClient",# M' I8 l& m% E. X* y4 G8 j" }! @" X
}5 B" K6 U5 X9 o1 m) F$ t4 `& X( q
}& \: S( W6 \, n9 M# h
}* Q8 I6 O5 \8 Y# n: x; S% W
请谨慎使用此类代码。2. 在业务代码中调用指定的连接当需要操作验证码时,使用默认的缓存;需要操作访问量时,通过 caches['pv_stats'] 显式指定:pythonfrom django.core.cache import caches0 n6 p1 s) x$ ]5 k% S5 p# J
import datetime( d/ i% J0 g$ v$ b j
5 r/ u/ g6 n b. ]8 E# 1. 操作验证码(默认走 default 也就是 db0), i* Q+ |5 x5 S$ ~5 u% ` [/ [; }
default_cache = caches['default']8 q1 f- S/ k5 \) ~! E
default_cache.set("auth:code:13800000000", "123456", timeout=300)
# d @; u% d J. ~2 B' \' y" s3 v! Z
# 2. 操作今日访问量(显式指定 pv_stats 也就是 db1)# }% g7 \1 C" Y8 J
pv_cache = caches['pv_stats']( @4 O2 a4 `' C) z
today_str = datetime.date.today().strftime('%Y-%m-%d')
8 H1 Y3 h/ D% H& }: Y2 j' v& ypv_key = f"site:daily_pv:{today_str}". S' R5 @' F# M% Y2 v. }' E. j
6 C; J. p* e' }. b# 每次访问时自增 1% M1 d5 q9 I4 M+ T `6 c0 i
pv_cache.incr(pv_key, delta=1)
; R6 N3 G$ P- J# 如果是当天第一次访问,可能需要初始化并设置一个略大于24小时的过期时间(例如30小时),防止死 Key 堆积
/ R* o9 y* l, v% o! _% n请谨慎使用此类代码。💡 最佳实践建议如果项目还在开发初期,建议保持单一 default(db0)配置。直接在同一个库中并存这两套 Key:验证码:auth:verification:code:138xxxx今日 PV:site:daily_pv:2026-06-15这样既降低了代码维护成本,也为未来的架构横向扩展留出了空间。
/ D0 U' ~( A, Z |
|