当前位置: 首页 > wzjs >正文

广东制冷设备网站建设费用企业英文网站制作

广东制冷设备网站建设费用,企业英文网站制作,泰安有哪些网站,网站建设在线建站关键点总结 连接管理:所有示例都使用ConnectionMultiplexer来管理Redis连接,它是线程安全的,应该在整个应用程序中重用。 键设计:良好的键命名规范很重要,通常使用冒号分隔的层次结构(如page:home:pv)。 数据序列化&…

关键点总结

  1. 连接管理:所有示例都使用ConnectionMultiplexer来管理Redis连接,它是线程安全的,应该在整个应用程序中重用。

  2. 键设计:良好的键命名规范很重要,通常使用冒号分隔的层次结构(如page:home:pv)。

  3. 数据序列化:Redis存储的是二进制数据,.NET客户端会自动处理基本类型的序列化。

  4. 原子操作:Redis命令是原子性的,适合实现计数器、排行榜等需要原子更新的场景。

  5. 过期策略:合理设置过期时间可以防止数据无限增长,特别是用于缓存和限流的场景。

  6. 错误处理:生产代码中应该添加适当的错误处理和重试逻辑,特别是网络操作。

  7. 性能考虑:Redis虽然是内存数据库,但不当使用(如大键、复杂操作)仍可能影响性能。

1. 缓存系统

// 在Startup.cs中配置Redis作为分布式缓存
services.AddStackExchangeRedisCache(options =>
{options.Configuration = "localhost:6379"; // Redis服务器地址和端口options.InstanceName = "SampleInstance_"; // 键前缀,用于区分不同应用实例
});// 在控制器中使用缓存
public class HomeController : Controller
{private readonly IDistributedCache _cache; // 依赖注入分布式缓存接口public HomeController(IDistributedCache cache){_cache = cache;}public IActionResult Index(){// 尝试从缓存获取数据var cachedData = _cache.GetString("CachedTime");// 如果缓存中没有数据(缓存未命中)if (cachedData == null){// 生成新数据(这里用当前时间模拟)cachedData = DateTime.Now.ToString();// 将数据存入缓存,设置5分钟绝对过期时间_cache.SetString("CachedTime", cachedData, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5) });}// 返回视图,传入缓存数据作为模型return View(model: cachedData);}
}

2. 会话存储(Session Storage)

// 配置会话服务
services.AddSession(options =>
{options.IdleTimeout = TimeSpan.FromMinutes(20); // 会话20分钟无活动后过期options.Cookie.HttpOnly = true; // 设置HttpOnly标志增强安全性
});// 配置Redis作为分布式缓存用于会话存储
services.AddDistributedRedisCache(options =>
{options.Configuration = "localhost:6379"; // Redis连接字符串options.InstanceName = "Session_"; // 键前缀,区分会话数据
});// 在控制器中会自动通过HttpContext.Session访问会话

3. 消息队列(发布/订阅模式)

// 发布者代码
var redis = ConnectionMultiplexer.Connect("localhost:6379"); // 创建Redis连接
var sub = redis.GetSubscriber(); // 获取发布/订阅对象
sub.Publish("messages", "Hello from .NET!"); // 向"messages"频道发布消息// 订阅者代码
var redis = ConnectionMultiplexer.Connect("localhost:6379"); // 创建Redis连接
var sub = redis.GetSubscriber(); // 获取发布/订阅对象// 订阅"messages"频道,定义收到消息时的回调
sub.Subscribe("messages", (channel, message) => {Console.WriteLine($"收到消息: {message}"); // 处理收到的消息
});// 注意:在实际应用中,订阅者通常是长期运行的后台服务

4. 排行榜系统

var redis = ConnectionMultiplexer.Connect("localhost:6379"); // 创建Redis连接
var db = redis.GetDatabase(); // 获取数据库对象// 向有序集合"leaderboard"添加玩家分数
// SortedSetAdd方法参数:键名、成员、分数
db.SortedSetAdd("leaderboard", "player1", 100);
db.SortedSetAdd("leaderboard", "player2", 200);// 获取排行榜前10名(带分数)
// 参数:键名、起始排名、结束排名、排序方式(降序)
var topPlayers = db.SortedSetRangeByRankWithScores("leaderboard", 0, 9, Order.Descending);// topPlayers是SortedSetEntry数组,包含成员和分数
foreach (var player in topPlayers)
{Console.WriteLine($"{player.Element}: {player.Score}");
}

5. 分布式锁

var redis = ConnectionMultiplexer.Connect("localhost:6379"); // 创建Redis连接
var db = redis.GetDatabase(); // 获取数据库对象var lockKey = "resource_lock"; // 锁的键名
var lockToken = Guid.NewGuid().ToString(); // 唯一标识符,确保只有锁的持有者能释放// 尝试获取锁
// 参数:键名、唯一令牌、锁的持有时间
bool acquired = db.LockTake(lockKey, lockToken, TimeSpan.FromSeconds(10));try
{if (acquired){// 成功获取锁后执行临界区代码Console.WriteLine("执行需要互斥访问的操作...");// 这里可以访问共享资源或执行需要同步的操作}else{Console.WriteLine("获取锁失败,可能有其他实例正在操作");}
}
finally
{// 确保锁被释放if (acquired){// 释放锁,需要验证令牌匹配// 参数:键名、获取锁时使用的令牌bool released = db.LockRelease(lockKey, lockToken);if (!released){Console.WriteLine("释放锁失败");}}
}

6. 实时分析

var db = redis.GetDatabase(); // 获取数据库对象// 使用HyperLogLog统计独立访客数(UV)
// HyperLogLog是一种概率数据结构,用于高效统计唯一值
db.HyperLogLogAdd("page:home:uv", "user1"); // 添加用户1
db.HyperLogLogAdd("page:home:uv", "user2"); // 添加用户2
// 获取估计的唯一访客数
long uvCount = db.HyperLogLogLength("page:home:uv");
Console.WriteLine($"独立访客数: {uvCount}");// 使用INCR命令统计页面浏览量(PV)
// 每次访问增加计数器
db.StringIncrement("page:home:pv");
// 获取当前PV值
var pv = db.StringGet("page:home:pv");
Console.WriteLine($"页面浏览量: {pv}");

7. 限流控制

public bool IsRateLimited(string apiKey, int limit, TimeSpan period)
{var key = $"rate_limit:{apiKey}"; // 为每个API键创建唯一的Redis键var db = redis.GetDatabase();// 原子性增加计数器并获取新值var current = db.StringIncrement(key);// 如果当前值是1(第一次调用),设置过期时间if (current == 1){db.KeyExpire(key, period); // 设置键的生存时间(限流周期)}// 如果当前值超过限制,返回true(需要限流)return current > limit;// 使用示例:// if(IsRateLimited("user123", 100, TimeSpan.FromMinutes(1)))// {//     return new StatusCodeResult(429); // 返回"Too Many Requests"// }
}
http://www.dtcms.com/wzjs/783278.html

相关文章:

  • idea 网站开发美食网站制作代码
  • 安徽建设网站做网站需要源码
  • 关于网站建设文章灰色词seo
  • 如何制作个人作品网站福步外贸官网
  • 北京建站者公司免费登记照制作app
  • 房屋网站修改wordpress发表评论
  • 网站建设怎么样找客户快企业所得税率
  • 九江 网站建设平邑县住房和城乡建设局网站
  • 检察院网站建设方案公司企业策划书模板
  • 红河学院网站建设建筑施工企业
  • 成都网站外包优化下面哪些是用作电子商务网站开发
  • 福建省漳州市建设局网站西安百度竞价开户
  • 网站升级改造建设方案免费论坛建站系统
  • 网站建设设计开发公司wordpress 筛选 插件
  • 企业网站软件装饰设计乙级资质
  • 一定火网站建设定制91
  • 中国建设银行网站查工资大气精美网站设计工作室织梦模板(附赠精美织梦后台模板)
  • 宜都网站seo网站备案好
  • 网站设计标准尺寸百度站长平台网站提交
  • 如何建 网站网站 建设 标准方案
  • 免费的微网站制作网站开发流程图和
  • 英文网站建设需要注意的五点问题wordpress 登录后查看
  • 棋牌网站搭建平台百度广告投放
  • 网站建设参考书籍广州市旅游商务职业学校
  • 道里网站运营培训崆峒区城乡建设局网站
  • 做外汇上什么网站看新闻asp.net网站开发书籍
  • 详细网站设计需求表lamp网站开发黄金组...
  • wordpress 整站源码上海远程教育网站设计与开发公司
  • K12网站怎么建设注册公司网上申请入口
  • 手机移动网站模板上海海宏建设集团网站