使用方法
步骤1、在需要使用Redis的项目中引用FxCommon.dll和Redis.dll。
步骤2、在App.config或Web.config文件中添加如下配置:
<add key="RedisServerIP" value="redis:uuid845tylabc123@139.198.13.12:4125"/>
<!-- 提供的 Redis 环境是单机版配置。如果 Redis 是主从配置,则还需设置 RedisSlaveServerIP-->
<!--<add key="RedisSlaveServerIP" value="redis:uuid845tylabc123@139.198.13.13:4125"/>-->
<!--Redis 数据库。如果不需要指定 Redis 数据库,就配置默认值 0-->
<add key="RedisDefaultDb" value="0"/>
步骤 3、使用 PooledRedisClientManager 类创建 Redis 连接池:
// 读取 Redis 主机 IP 配置信息
string[] redisMasterHosts = ConfigurationManager.ConnectionStrings["RedisServerIP"].ConnectionString.Split(',');
// 如果 Redis 服务器是主从配置,那么还需要读取 Redis Slave 机的 IP 配置信息
string[] redisSlaveHosts = null;
var slaveConnection = ConfigurationManager.ConnectionStrings["RedisSlaveServerIP"];
if (slaveConnection != null && !string.IsNullOrWhiteSpace(slaveConnection.ConnectionString))
{
string redisSlaveHostConfig = slaveConnection.ConnectionString;
redisSlaveHosts = redisSlaveHostConfig.Split(',');
}
// 读取 RedisDefaultDb 配置
int defaultDb = 0;
string defaultDbSetting = ConfigurationManager.AppSettings["RedisDefaultDb"];
if (!string.IsNullOrWhiteSpace(defaultDbSetting))
{
int.TryParse(defaultDbSetting, out defaultDb);
}
var redisClientManagerConfig = new RedisClientManagerConfig
{
MaxReadPoolSize = 50,
MaxWritePoolSize = 50,
DefaultDb = defaultDb
};
// 创建 Redis 连接池
Manager = new PooledRedisClientManager(redisMasterHosts, redisSlaveHosts, redisClientManagerConfig)
{
PoolTimeout = 2000,
ConnectTimeout = 500
};
步骤4、通过PooledRedisClientManager的实例获取Redis客户端,然后就可以开始通过Redis客户端的API进行操作。
其他
1、 Redis Key命名规范
Redis Key命名规范:AppID:KeyName。
可能有很多人习惯用英文状态的点号来作为AppID和KeyName的分隔符,而笔者建议使用冒号作为AppID和KeyName的分隔符,其原因是:这么写会使Redis Key会以AppID作为分类显示在Redis Desktop Manager中,方便你能够快速查到要查阅的Redis Key对应的Redis Value值,请见下图:
但如果使用英文状态的点号来作为分隔符的话,那么在Redis Desktop Manager中,Redis Key就不会被分类了,请见下图:
2、常见应用问题
-
缓存穿透处理:什么是缓存穿透?当根据Redis key在缓存中查询后,不存在对应Value,就应该会在后端系统如DB中去查找,该Key的并发请求量一旦变大,那么就会对DB造成很大的压力。解决办法有:a.前端风险控制,将恶意穿透情况排除在外;b.对查询结果为空的情况依然进行缓存,但缓存时间会设置得很短,一般是几分钟。
-
缓存雪崩处理:什么是缓存雪崩?当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。解决办法有:后端连接数限制,错误阈值限制,超时处理,缓存失效时间均匀分布,前端永不失效及后端主动更新。
-
缓存时长:策略定位复杂,需要多维度的计算。
-
缓存失效:按时失效,事件失效,后端主动更新。
-
缓存Key:Hash、规则、前缀+Hash,异常情况可人工干预。
-
Lua脚本:服务端批量处理及事务能力,有条件逻辑的可扩展脚本。使用它的好处有:减少网络开销、原子操作、可复用。
-
Limit:可滑动时间窗口,如应用于Session,Memcached需每次传Key和Value。
Demo 下载及更多资料
-
RedisDemo下载地址:
https://github.com/das2017/RedisDemo
-
RedisDesktopManage下载地址:
https://redisdesktop.com/
-
Redis官网:
https://redis.io/
-
ServiceStack.Redis客户端:
https://github.com/ServiceStack/ServiceStack.Redis
-
Redis命令大全:
http://www.redis.cn/commands.html