RedisClient

using Core.Data.Models;
using Microsoft.Extensions.Logging;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Core.Model.PowerBiModel;
using Microsoft.Data.SqlClient;
using Npgsql;
using System.Data.Odbc;
using System.Data.OracleClient;
using System.Data.Common;

namespace Common
{
    public class RedisClient
    {
        public static ConnectionMultiplexer redis = GetRedisConnection();
        public static IDatabase db = redis.GetDatabase();
        public static ISubscriber sub = redis.GetSubscriber();

        public static List<string> listItemIdList = new List<string>();

        //全局用户redis key缓存
        public static string globalUserKeysCache = "POWERBI:USER:RIGHT:GLOBAL";
        //全局报表文件夹 key缓存
        public static string globalReportKeysCache = "POWERBI:FOLDERREPORT:RIGHT:GLOBAL";
        //全局收藏 key缓存
        public static string globalFavoriteKeysCache = "POWERBI:FAVORITE:GLOBAL";
        //全局反向 key缓存
        public static string globalPrincipleKeysCache = "POWERBI:ITEMIDPRINCIPLE:GLOBAL";
        //存储用户对应用户组遍历结果的缓存
        public static string globalGetGroupByUserName = "POWERBI:GETGROUPBYUSERNAME:";

        public static string globalDwSQLView = "DWSQLVIEW";

        public static string globalCallApiInterfaceNoRepeat = "CALLAPIINTERFACENOREPEAT";

        /// <summary>
        /// 初始化Redis集群
        /// </summary>
        /// <returns></returns>
        public static ConnectionMultiplexer GetRedisConnection()
        {
            ConfigurationOptions option = new ConfigurationOptions();
            option.Password = AppSettings.app("AllUrl", "RedisPwd");
            //解密
            option.Password = AESHelper.Decrypt(option.Password, "12345678876543211234567887654abc");
            option.EndPoints.Add(AppSettings.app("AllUrl", "RedisHostName"), Convert.ToInt32(AppSettings.app("AllUrl", "RedisPort")));
            return ConnectionMultiplexer.Connect(option);
        }

        /// <summary>
        /// 保存用户报表缓存
        /// </summary>
        public static string SaveFolderReportUserCache(List<VCPUR> vCPURs, ILogger<object> logger)
        {
            try
            {
                //IServer server = redis.GetServer(AppSettings.app("AllUrl", "RedisHostName"), Convert.ToInt32(AppSettings.app("AllUrl", "RedisPort")));
                //List<RedisKey> redisKeys = server.Keys(pattern: "POWERBI:FOLDERREPORTUSER:RIGHT:*").ToList();

                RedisValue[] redisValues = db.SetMembers(globalUserKeysCache);
                //删除之前的redisvalue对应key的值
                foreach (string item in redisValues)
                {
                    db.KeyDelete(item);
                }
                //redisKeys = server.Keys(pattern: "POWERBI:ITEMIDPRINCIPLE:*").ToList();
                redisValues = db.SetMembers(globalPrincipleKeysCache);
                //删除之前的redisvalue对应key的值
                foreach (string item in redisValues)
                {
                    db.KeyDelete(item);
                }
                //删除之前的固定的rediskey的值
                db.KeyDelete(globalUserKeysCache);
                db.KeyDelete(globalPrincipleKeysCache);
                //用户名Redis
                if (vCPURs != null && vCPURs.Any())
                {
                    foreach (VCPUR item in vCPURs)
                    {
                        string record = item.ItemID.ToString() + "#" + item.RoleNum + "#" + item.UserID.ToString();
                        db.SetAdd("POWERBI:FOLDERREPORTUSER:RIGHT:" + item.UserName.ToUpper().Trim(), record);
                        db.SetAdd(globalUserKeysCache, "POWERBI:FOLDERREPORTUSER:RIGHT:" + item.UserName.ToUpper().Trim());

                        //反向保存一份缓存:报表有哪些用户查看
                        db.SetAdd("POWERBI:ITEMIDPRINCIPLE:" + item.ItemID.ToString().ToUpper(), item.UserName.Trim() + "#" + item.RoleNum);
                        db.SetAdd(globalPrincipleKeysCache, "POWERBI:ITEMIDPRINCIPLE:" + item.ItemID.ToString().ToUpper());
                    }
                    logger.Log(LogLevel.Information, "刷新用户权限缓存总条数vCPURs:" + vCPURs.Count);
                }
            }
            catch (Exception ex)
            {
                logger.Log(LogLevel.Error, "SaveFolderReportUserCache:" + ex.ToString());
                return ex.ToString();
            }
            return "";
        }

        /// <summary>
        /// 刷新用户权限缓存,一条一条刷新
        /// </summary>
        /// <param name="vCPURs"></param>
        /// <returns></returns>
        public static string SaveUserRightOneByOne(List<VCPUR> vCPURs, ILogger<object> logger)
        {
            string result = string.Empty;
            if (vCPURs == null || !vCPURs.Any())
            {
                return result;
            }
            try
            {
                //IServer server = redis.GetServer(AppSettings.app("AllUrl", "RedisHostName"), Convert.ToInt32(AppSettings.app("AllUrl", "RedisPort")));
                //List<RedisKey> redisKeys = server.Keys(pattern: "POWERBI:FOLDERREPORTUSER:RIGHT:*").ToList();

                //List<RedisKey> redisKeysPrinciple = server.Keys(pattern: "POWERBI:ITEMIDPRINCIPLE:*").ToList();
                //删除之前的redisvalue对应key的值
                RedisValue[] redisValues = db.SetMembers(globalPrincipleKeysCache);
                //删除之前的
                foreach (string item in redisValues)
                {
                    db.KeyDelete(item);
                }
                //删除之前的固定的rediskey的值
                db.KeyDelete(globalPrincipleKeysCache);

                redisValues = db.SetMembers(globalUserKeysCache);
                //删除之前的
                foreach (string item in redisValues)
                {
                    //删除旧key
                    db.KeyDelete(item);
                    db.SetRemove(globalUserKeysCache, item);
                    string oldUserName = item.ToString().Split("POWERBI:FOLDERREPORTUSER:RIGHT:")[1];
                    List<VCPUR> vCPURsNew = vCPURs.Where(t => t.UserName.ToUpper() == oldUserName).ToList();
                    if (vCPURsNew != null && vCPURsNew.Any())
                    {
                        //添加新key
                        foreach (VCPUR itemNew in vCPURsNew)
                        {
                            string record = itemNew.ItemID.ToString() + "#" + itemNew.RoleNum + "#" + itemNew.UserID.ToString();
                            db.SetAdd("POWERBI:FOLDERREPORTUSER:RIGHT:" + itemNew.UserName.ToUpper(), record);
                            db.SetAdd(globalUserKeysCache, "POWERBI:FOLDERREPORTUSER:RIGHT:" + itemNew.UserName.ToUpper());

                            //反向保存一份缓存:报表有哪些用户查看
                            db.SetAdd("POWERBI:ITEMIDPRINCIPLE:" + itemNew.ItemID.ToString().ToUpper(), itemNew.UserName + "#" + itemNew.RoleNum);
                            db.SetAdd(globalPrincipleKeysCache, "POWERBI:ITEMIDPRINCIPLE:" + itemNew.ItemID.ToString().ToUpper());
                        }
                        //添加之后移除
                        vCPURs.RemoveAll(t => t.UserName.ToUpper() == oldUserName);
                    }
                }
                //旧的key全部删除完之后,新的key还没用完的情况下
                if (vCPURs.Any())
                {
                    foreach (VCPUR item in vCPURs)
                    {
                        string record = item.ItemID.ToString() + "#" + item.RoleNum + "#" + item.UserID.ToString();
                        db.SetAdd("POWERBI:FOLDERREPORTUSER:RIGHT:" + item.UserName.ToUpper(), record);
                        db.SetAdd(globalUserKeysCache, "POWERBI:FOLDERREPORTUSER:RIGHT:" + item.UserName.ToUpper());

                        //反向保存一份缓存:报表有哪些用户查看
                        db.SetAdd("POWERBI:ITEMIDPRINCIPLE:" + item.ItemID.ToString().ToUpper(), item.UserName + "#" + item.RoleNum);
                        db.SetAdd(globalPrincipleKeysCache, "POWERBI:ITEMIDPRINCIPLE:" + item.ItemID.ToString().ToUpper());
                    }
                }
            }
            ca

RedisClient.jar是一个用Java编写的Redis客户端库,它提供了与Redis服务器进行交互的各种功能和方法。它可以帮助开发人员在Java应用程序中轻松地使用Redis数据库。 RedisClient.jar具有以下特点和功能: 1. 连接管理: RedisClient.jar提供了连接管理功能,可以轻松地与Redis服务器建立连接,并提供了断开连接和重新连接的方法。 2. 数据操作: RedisClient.jar支持常用的数据操作方法,如读取、写入和删除数据。它可以通过多个数据类型来操作Redis数据,包括字符串、哈希、列表、集合和有序集合等。 3. 事务支持: RedisClient.jar提供了事务支持,可以将多个操作打包成一个原子操作来执行。这样可以确保这些操作要么全部成功完成,要么全部回滚,保证了数据的一致性。 4. 发布和订阅: RedisClient.jar支持发布和订阅功能,可以将消息发布到指定的频道上,同时允许其他客户端订阅这个频道,接收消息更新。 5. 分布式锁: RedisClient.jar提供了分布式锁的实现,可以在多个客户端之间同步访问共享资源,避免并发冲突。 总之,RedisClient.jar是一个功能强大且易于使用的Redis客户端库,它能够帮助开发人员更简单地与Redis数据库进行交互,并实现各种常用操作和功能。无论是构建实时应用、缓存管理还是分布式系统开发,都可以使用RedisClient.jar来简化开发流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuhaiuser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值