C#/.NET 系统优化专题(redis第五篇 数据结构【ZSet】)

RedisZSetService 类请参考第一篇的封装

redis 数据结构ZSet的使用

using (RedisZSetService service = new RedisZSetService())
{
service.FlushAll();//清理全部数据

service.Add("advanced", "1");
service.Add("advanced", "2");
service.Add("advanced", "5");
service.Add("advanced", "4");
service.Add("advanced", "7");
service.Add("advanced", "5");
service.Add("advanced", "9");

var result1 = service.GetAll("advanced");
var result2 = service.GetAllDesc("advanced");

service.AddItemToSortedSet("Sort", "BY", 123234);
service.AddItemToSortedSet("Sort", "走自己的路", 123);
service.AddItemToSortedSet("Sort", "redboy", 45);
service.AddItemToSortedSet("Sort", "大蛤蟆", 7567);
service.AddItemToSortedSet("Sort", "路人甲", 9879);
var result3 = service.GetAllWithScoresFromSortedSet("Sort");
}

案例

/// <summary>
    /// 实时排行榜:刷个礼物
    /// 维度很多,平台/房间/主播/日/周/月/年
    /// A对B 刷个礼物,影响很多
    /// 刷礼物只记录流水,不影响排行,凌晨24点跑任务更新
    /// 
    /// 实时排行榜
    /// Redis-IncrementItemInSortedSet
    /// 刷礼物时增加redis分数
    /// 就可以实时获取最新的排行
    /// (多个维度就是多个zSet,刷礼物的时候保存数据库并更新Redis)
    /// </summary>
private static List<string> UserList = new List<string>()
{
"Tenk","花生","Ray","阿莫西林","石昊","ywa"
};
public static void Show()
{
using (RedisZSetService service = new RedisZSetService())
{
service.FlushAll();//清理全部数据

Task.Run(() =>
{
while (true)
{
foreach (var user in UserList)
{
Thread.Sleep(10);
service.IncrementItemInSortedSet("陈一发儿", user, new Random().Next(1, 100));//表示在原来刷礼物的基础上增加礼物
}
Thread.Sleep(20 * 1000);
}
});

Task.Run(() =>
{
while (true)
{
Thread.Sleep(12 * 1000);
Console.WriteLine("**********当前排行************");
int i = 1;

foreach (var item in service.GetAllWithScoresFromSortedSet("陈一发儿"))
{
Console.WriteLine($"第{i++}名 {item.Key} 分数{item.Value}");
}
//foreach (var item in service.GetAllDesc("陈一发儿"))
//{
//    Console.WriteLine($"第{i++}名 {item}");
//}
}
});

Console.Read();

}

}
发布了143 篇原创文章 · 获赞 117 · 访问量 4253

猜你喜欢

转载自blog.csdn.net/weixin_41181778/article/details/103828161