首页 > 数据库 >C# StackExchange.Redis使用

C# StackExchange.Redis使用

时间:2023-09-14 21:24:50浏览次数:51  
标签:return string database C# Redis key using StackExchange public

RedisManage类

管理类,提供Redis管理上下文,此处单例模式实现获取对应的Redis管理器

using StackExchange.Redis;

namespace DataMigrationService
{
    public class RedisManage
    {
        public static readonly ConfigurationOptions ConfigurationOptions = ConfigurationOptions.Parse("127.0.0.1:6379");
        private static readonly object Locker = new object();
        private static ConnectionMultiplexer _redisConn;

        /// <summary>
        /// 单例获取
        /// </summary>
        public static ConnectionMultiplexer RedisConn
        {
            get
            {
                if (_redisConn == null)
                {
                    // 锁定某一代码块,让同一时间只有一个线程访问该代码块
                    lock (Locker)
                    {
                        if (_redisConn == null || !_redisConn.IsConnected)
                        {
                            _redisConn = ConnectionMultiplexer.Connect(ConfigurationOptions);
                        }
                    }
                }
                return _redisConn;
            }
        }
    }
}

RedisBase类

基础操作类,提供数据获取等的相关指令

using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataMigrationService
{
    public abstract class RedisBase
    {
        public static IDatabase _database;
        public static IServer _server;
        private static int dbIndex = -1;

        public RedisBase()
        {
            _database = RedisManage.RedisConn.GetDatabase(dbIndex);
            _server = RedisManage.RedisConn.GetServer(RedisManage.RedisConn.GetEndPoints().First());
        }

        public RedisBase(int index)
        {
            dbIndex = index;
            _database = RedisManage.RedisConn.GetDatabase(index);
            _server = RedisManage.RedisConn.GetServer(RedisManage.RedisConn.GetEndPoints().First());
        }

        static RedisBase()
        {
            _database = RedisManage.RedisConn.GetDatabase(dbIndex);
            _server = RedisManage.RedisConn.GetServer(RedisManage.RedisConn.GetEndPoints().First());
        }

        /// <summary>
        /// 判断Key值是否存在
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool Exsist(string key)
        {
            return _database.KeyExists(key);
        }

        /// <summary>
        /// key重命名
        /// </summary>
        /// <param name="key"></param>
        /// <param name="newKey"></param>
        /// <returns></returns>
        public bool KeyRename(string key, string newKey)
        {
            return _database.KeyRename(key, newKey);
        }

        /// <summary>
        /// 设置缓存过期
        /// </summary>
        /// <param name="key"></param>
        /// <param name="datetime"></param>
        public bool SetExpire(string key, DateTime datetime)
        {
            return _database.KeyExpire(key, datetime);
        }

        /// <summary>
        /// 删除key值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool Delete(string key)
        {
            return _database.KeyDelete(key);
        }

        public string GetFirstKey()
        {
            List<string> list = _server.Keys().Select(u => u.ToString()).ToList();
            list.Sort();
            return list.FirstOrDefault();
        }

        /// <summary>
        /// 获取所有的Key值
        /// </summary>
        /// <returns></returns>
        public List<string> GetAllKey()
        {
            List<string> list = _server.Keys().Select(u => u.ToString()).ToList();
            list.Sort();
            return list;
        }

        public string GetFirstKey(string pattern)
        {
            List<string> list = _server.Keys(pattern: pattern).Select(u => u.ToString()).ToList();
            list.Sort();
            return list.FirstOrDefault();
        }

        /// <summary>
        /// 获取所有的Key值(安装pattern匹配获取)
        /// </summary>
        /// <returns></returns>
        public List<string> GetAllKey(string pattern)
        {
            List<string> list = _server.Keys(pattern: pattern).Select(u => u.ToString()).ToList();
            list.Sort();
            return list;
        }
    }
}

RedisList类

List操作类

using DataMigrationService.Extensions;
using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataMigrationService
{
    public class RedisList : RedisBase
    {
        /// <summary>
        /// 获取并移除Key值上最左边的数据
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string ListLeftPop(string key)
        {
            return _database.ListLeftPop(key).ToString();
        }

        /// <summary>
        /// 移除并返回存储在该键列表的第一个元素
        /// </summary>
        /// <param name="redisKey"></param>
        /// <returns></returns>
        public T ListLeftPop<T>(string key)
        {
            return JsonConvert.DeserializeObject<T>(_database.ListLeftPop(key));
        }

        /// <summary>
        /// 获取并移除key值上最右边的数据
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string ListRightPop(string key)
        {
            return _database.ListRightPop(key).ToString();
        }

        /// <summary>
        /// 移除并返回存储在该键列表的最后一个元素
        /// </summary>
        /// <param name="redisKey"></param>
        /// <returns></returns>
        public T ListRightPop<T>(string key)
        {
            return JsonConvert.DeserializeObject<T>(_database.ListRightPop(key));
        }

        /// <summary>
        /// 将值插入到key值的最左边
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public long ListLeftPush<T>(string key, T value)
        {
            return _database.ListLeftPush(key, JsonConvert.SerializeObject(value));
        }

        /// <summary>
        /// 将值插入到key值的最右边
        /// </summary>
        /// <param name="redisKey"></param>
        /// <param name="redisValue"></param>
        /// <returns></returns>
        public long ListRightPush<T>(string key, T value)
        {
            return _database.ListRightPush(key, JsonConvert.SerializeObject(value));
        }

        /// <summary>
        /// 返回列表长度
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public long ListLength(string key)
        {
            return _database.ListLength(key);
        }

        /// <summary>
        /// 获取key值上的第一个数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public T ListLeftGetFirst<T>(string key)
        {
            return JsonConvert.DeserializeObject<T>(_database.ListGetByIndex(key, 0));
        }

        /// <summary>
        /// 返回在该列表上键所对应的元素
        /// </summary>
        /// <param name="redisKey"></param>
        /// <returns></returns>
        public IEnumerable<RedisValue> ListRange(string key)
        {
            return _database.ListRange(key);
        }

        /// <summary>
        /// 返回在该列表上键所对应的元素
        /// </summary>
        /// <param name="redisKey"></param>
        /// <returns></returns>
        public List<T> ListRange<T>(string key)
        {
            List<T> result = new List<T>();
            IEnumerable<RedisValue> list = _database.ListRange(key);
            foreach (RedisValue value in list)
            {
                result.Add(JsonConvert.DeserializeObject<T>(value.ToString()));
            }
            return result;
        }

    }
}

标签:return,string,database,C#,Redis,key,using,StackExchange,public
From: https://www.cnblogs.com/SmallCarp/p/17703471.html

相关文章

  • C# SignalR使用
    SignalR简介SignalR是一个开源的库,跨平台;让Web应用与其他应用通讯变得很简单,Web服务端可以实时的将内容推送给对应的客户端,客户端发送的信息也可以实时到其他客户端。SignalR提供了一种远程过程调用(RPC)的方式,使得客户端可以调用服务器的方法,同样在服务器端的方法中也能调用客......
  • CSP初赛错题集
    初赛错题集洛谷有题NOIP2018T9给定一个含N个不相同数字的数组,在最坏情况下,找出其中最大或最小的数,至少需要N-1次比较操作。则最坏情况下,在该数组中同时找最大与最小的数至少需要(A)次比较操作。(\(\lceil\rceil\)表示向上取整,\(\lfloor\rfloor\)表示向下取整)A.⌈3N/2⌉-2......
  • CSP-J 2022 游记
    10.8天气越来越冷了,已经开始穿两条秋裤了()。中午在宿舍,mca作为好心人去接电话,被叔叔一句“这是男生宿舍吗?”搞emo。随后415就成了动物园(mca:我还没夹呢)。常有高猿长啸,属引凄异。下午水了一会,写了DP。学习区间DP并放弃。换键盘时让sxx随便按一个键,结果sxx疯狂Ctrl......
  • Java学习_007_Switch语句
    需求:输入一到七的任意一个数,输出该数字对应的星期数。使用Switch语句:1importjava.util.Scanner;23publicclassMain{4publicstaticvoidmain(String[]args){5Scannersc=newScanner(System.in);6System.out.println("请输入一......
  • 2023Spring project3
    Task1:AccessMethodExecutors第一个task就是完成accessmethod相关的算子,有:seqscaninsertupdatedeleteindex_scanSeqscanseqscan属于最底层的算子,所以它没有子算子了,它需要做的就是从Table中读取tuple。在Init阶段,我们应该通过exec_ctx_去获得这个算子对应的table,从......
  • ubuntu22.04.3 安装postgresql 16 rc1数据库
    ubuntu22.04.3安装postgresql16rc1数据库一、直接安装#Createthefilerepositoryconfiguration:sudosh-c'echo"debhttps://apt.postgresql.org/pub/repos/apt$(lsb_release-cs)-pgdgmain">/etc/apt/sources.list.d/pgdg.list'#Importthe......
  • ubuntu 安装 conda
    下载安装程序:在下载页面上,复制链接并使用wget命令下载Miniconda安装程序。请将链接替换为您选择的版本链接。例如: wgethttps://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh运行安装程序:运行下载的安装程序。首先,给安装程序添加执行权限: ......
  • C# 对象比较
    1.ReferenceEquals(object o1, object o2):静态方法:比较两个对象的引用,引用相同返回true,否则返回false,同为null是返回true;ReferenceEquals进行值类型比较时总是返回false,因为两个值类型需要分别装箱到对象中,是不同的引用 ;从名称中便可知它用来比较两者是否是相同的引用,我们......
  • 萌新学习c语言记录
    好久没发博客了,因为大学开学了我看到我们学校社团的题目求两个数的最大公约数和最小公倍数感觉不怎么难在上课的时候闲的无聊写下来了。......
  • 40 个超有意思的 CSS 网站
    ......