SQLiteRedis - 静动态数据联合使用

SQLite:存储静态数据,Redis存储动态数据,当点位数据发送变化时更新Redis数据,查询时:联合查询,返回DTO

image

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); 
                }
            }
        }
    }
}

 

posted @ 2025-10-17 16:55  CHHC  阅读(3)  评论(0)    收藏  举报