SQLiteRedis - 静动态数据联合使用
SQLite:存储静态数据,Redis存储动态数据,当点位数据发送变化时更新Redis数据,查询时:联合查询,返回DTO
using SQLiteRedis.redis; using SQLiteRedis.Util; using SQLiteRedis.Util.model; namespace SQLiteRedis { internal class Program { static void Main(string[] args) { FreeSqlUtil.InitDB(); RedisUtil.Init("127.0.0.1", 6379, "", 0); InitData(); // 单条执行 Task.Run(() => TaskQuery()); Task.Run(() => TaskUpdate()); Console.ReadLine(); } static async Task InitData() { var lstPoint = FreeSqlUtil.AllEquipPoint("78e4ea7c-2862-4f19-87ff-ae45b888810e").Result; foreach (var item in lstPoint) { var pointCode = item.PointCode; if (!RedisUtil.ExistKey(pointCode)) { var p = new Util.model.redis.EquipPoint() { PointCode = pointCode, ItemTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; RedisUtil.Set(Util.RedisKey.StoreKey_EquipPoint(pointCode), p); } } } static async Task TaskQuery() { var keys = RedisUtil.GetKeys(Util.RedisKey.EquipPoint); while (true) { var lstPoint1 = await FreeSqlUtil.AllEquipPoint("78e4ea7c-2862-4f19-87ff-ae45b888810e"); var lstPoint2 = await RedisUtil.GetBatchAsync<Util.model.redis.EquipPoint>(keys); var resultDtoList = (from d1 in lstPoint1 join d2 in lstPoint2 on d1.PointCode equals d2.PointCode into alldata from d in alldata.DefaultIfEmpty() select new EquipPointDto { Id = d1.Id, PointCode = d1.PointCode, EquipCode = d1.EquipCode, PointName = d1.PointName, ItemValue = d.ItemValue, ItemTime = d.ItemTime }).ToList(); foreach (var item in resultDtoList) { Console.WriteLine($"ID:{item.Id}, PointCode:{item.PointCode}, EquipCode:{item.EquipCode}, PointName:{item.PointName},ItemValue:{item.ItemValue}, ItemTime:{item.ItemTime}"); } await Task.Delay(10000); } } static async Task TaskUpdate() { while (true) { await Task.Delay(5000); var lstPoint = await FreeSqlUtil.AllEquipPoint("78e4ea7c-2862-4f19-87ff-ae45b888810e"); foreach (var item in lstPoint) { var pointCode = item.PointCode; var redisCode = Util.RedisKey.StoreKey_EquipPoint(pointCode); var p = RedisUtil.Get<Util.model.redis.EquipPoint>(redisCode, out bool status); if (null == p) p = new Util.model.redis.EquipPoint(); p.ItemTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); RedisUtil.Set(redisCode, p); } } } } }
qq:505645074