src/DotNetCommon.Core/DistributeGenerator.cs

(开头部分) 29KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using DotNetCommon.Extensions;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace DotNetCommon
{
    internal class CacheFileStreamContext
    {
        public long LastId { get; set; }
        public string LastDateText { get; set; }
    }

    /// <summary>
    /// 分布式生成流水号时使用的缓存器,因为docker部署时可能会清空目录,所以需要将生成的流水号缓存到其他地方<para></para>
    /// 非docker环境下忽略
    /// </summary>
    public interface IDistributeGeneratorCache
    {
        /// <summary>
        /// 初始读取所有缓存项
        /// </summary>
        /// <returns></returns>
        ConcurrentDictionary<string, ConcurrentDictionary<string, long>> InitReadCache();

        /// <summary>
        /// 写入缓存项
        /// </summary>
        /// <param name="staticText"></param>
        /// <param name="dateText"></param>
        /// <param name="id"></param>
        void WriteCache(string staticText, string dateText, long id);
    }

    /// <summary>
    /// 使用本地文件缓存流水号生成数据
    /// </summary>
    public class DistributeGeneratorFileCache : IDistributeGeneratorCache
    {
        /// <summary>
        /// 缓存及目录
        /// </summary>
        public string CacheDir { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ".cache");

        //unc路径
        //public static string CacheDir = @"\\Jackletter-PC\分布式流水号生成缓存\.cache";

        private ConcurrentDictionary<string, object> _locks = new ConcurrentDictionary<string, object>();

        /// <summary>
        /// 读取并压缩缓存文件
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
后面还有 721 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。