You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET中如何临时存储字符串列表以减少数据库请求?

临时定时过期存储方案推荐(5-10分钟)

针对你需要临时存储字符串列表、避免重复查询数据库的需求,以下是几种靠谱的定时过期存储方案,同时澄清你对缓存的误解:

一、后端内存缓存(单实例场景适用)

大多数后端语言都有支持TTL(自动过期)的内存缓存库,适合单服务实例的场景,无需额外依赖:

  • Python:使用cachetools库的TTLCache,直接设置过期时间:
    from cachetools import TTLCache
    
    # 初始化缓存:最大存储100条数据,过期时间10分钟(600秒)
    temp_cache = TTLCache(maxsize=100, ttl=600)
    
    # 存储字符串列表
    string_list = ["item1", "item2", "item3"]
    temp_cache["user_string_list"] = string_list
    
    # 获取缓存数据
    cached_list = temp_cache.get("user_string_list")
    if cached_list:
        # 使用缓存数据,无需查库
        pass
    else:
        # 查询数据库并重新存入缓存
        pass
    
  • Java:用Guava Cache,设置expireAfterWrite参数指定过期时间;
  • .NET:使用MemoryCache,通过CacheItemPolicy设置AbsoluteExpirationRelativeToNow。

二、分布式缓存(多实例/集群场景适用)

如果你的服务是多实例部署,内存缓存会存在数据不一致的问题,推荐用Redis这类分布式缓存,天生支持键的自动过期:

import redis
import json

# 连接Redis
r = redis.Redis(host='localhost', port=6379, db=0)

# 存储字符串列表:序列化后存入,设置过期时间10分钟(600秒)
string_list = ["item1", "item2", "item3"]
r.setex("user_string_list", 600, json.dumps(string_list))

# 获取缓存数据
cached_data = r.get("user_string_list")
if cached_data:
    cached_list = json.loads(cached_data)
    # 使用缓存数据
else:
    # 查询数据库并更新缓存
    pass

Redis的SETEX命令直接支持设置键的过期时间,到点后会自动删除该键,完全满足你的临时存储需求。

三、为什么不推荐用Cookie?

Cookie确实更适合存储用户偏好(比如主题、语言设置),不适合你的场景:

  • 单Cookie大小限制在4KB左右,字符串列表过长会存不下;
  • Cookie存储在客户端,存在被篡改的风险,不适合存储业务数据;
  • 每次请求都会携带Cookie,增加请求体积,影响性能。

关于缓存自动过期的澄清

你之前对缓存的误解可以打消:几乎所有成熟的缓存方案(不管是内存缓存还是分布式缓存)都支持自动过期,核心就是通过设置TTL(生存时间),缓存系统会自动清理到期的键值对,无需手动维护。

额外注意事项

  • 如果数据库中的原数据发生更新,要主动清除对应缓存或更新缓存内容,避免出现脏数据;
  • 内存缓存要注意设置合理的maxsize,避免占用过多内存;
  • 分布式缓存要确保客户端和服务端的时间同步,避免过期时间出现偏差。

内容的提问来源于stack exchange,提问作者Brigid Book

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:01:04