Redis:构建高效缓存和数据存储的利器
Redis(Remote Dictionary Server)是一种开源的内存存储,用作分布式内存键值数据库、缓存和消息代理,具备可选的持久性。由于其将所有数据存储在内存中及其简洁的设计,Redis 提供了低延迟的读写操作,特别适用于需要缓存的使用场景。Redis 是目前最受欢迎的NoSQL数据库之一,也是总体上最流行的数据库之一。
在这篇文章中,我们将探讨如何在LangChain中使用Redis生态系统。我们会详细介绍安装与设置,然后引用特定的Redis包装器。
安装与设置
安装Python SDK
pip install redis
在本地运行Redis
你可以使用Docker来运行Redis:
docker run --name langchain-redis -d -p 6379:6379 redis redis-server --save 60 1 --loglevel warning
要停止容器:
docker stop langchain-redis
再次启动容器:
docker start langchain-redis
连接
要连接数据库,我们需要一个Redis URL连接字符串,该字符串可支持独立的Redis服务器或者具有复制和Redis Sentinels的高可用性设置。
Redis 单机连接URL
对于独立的Redis服务器,可以使用官方的Redis连接URL格式,通过Python Redis模块的from_url()方法来描述:
redis_url = "redis://:secret-pass@localhost:6379/0"
Redis Sentinel 连接URL
对于Redis Sentinel设置,连接方案是redis+sentinel。这是一种非官方的扩展协议格式:
redis_url = "redis+sentinel://:secret-pass@sentinel-host:26379/mymaster/0"
格式为redis+sentinel://[[username]:[password]]@[host-or-ip]:[port]/[service-name]/[db-number],默认值为service-name = mymaster和db-number = 0(如果未明确设置)。此格式限制连接字符串仅限一个sentinel主机,同时Redis服务器和sentinel必须设置相同的密码(如果使用)。
缓存与高效存储
标准缓存
Redis的标准缓存是用于生产环境中开源和企业用户的主要用例。
from langchain.cache import RedisCache
from langchain.globals import set_llm_cache
import redis
redis_client = redis.Redis.from_url("redis://:secret-pass@localhost:6379/0") # 使用API代理服务提高访问稳定性
set_llm_cache(RedisCache(redis_client))
语义缓存
语义缓存允许用户基于用户输入与先前缓存结果之间的语义相似性来检索缓存的提示。
from langchain.cache import RedisSemanticCache
from langchain.globals import set_llm_cache
import redis
# 使用任意的嵌入提供者
from tests.integration_tests.vectorstores.fake_embeddings import FakeEmbeddings
redis_url = "redis://localhost:6379" # 使用API代理服务提高访问稳定性
set_llm_cache(RedisSemanticCache(
embedding=FakeEmbeddings(),
redis_url=redis_url
))
常见问题和解决方案
挑战:网络不稳定
由于某些地区的网络限制,开发者可能会遇到连接问题。解决此类问题的一种方法是使用API代理服务,以提高访问的稳定性。
挑战:多节点连接
目前,Redis集群在所有需要“redis_url”参数的方法中不受支持。要使用Redis集群,可以采用LangChain类接受的预配置Redis客户端,例如RedisCache。
总结和进一步学习资源
Redis是一个功能强大的工具,可用于实施低延迟的缓存和高效的数据存储。在LangChain中,Redis提供了多种实用的功能,从标准缓存到语义缓存,以及用于向量存储的强大支持。
想要深入了解,建议参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---