windows编译Redis5.0以及c#使用Redis

c#下使用redis全教程**

第一步编译redis

第二步部署redis

第三步部署c#使用redis环境

先去弄Cygwin环境
Cygwin链接

一直安装即可
到下面这个界面时
windows编译Redis5.0以及c#使用Redis_第1张图片
让你添加地址,你打开官网,选择mirror sites,点击下面的 Hong Kong(http://mirror-hk.koddos.net/cygwin/)
一直往下走
索框里输入文字自动搜索,点击“New”的一列,有个那个下拉按钮,选择版本
选择gcc 用过linux系统的应该明白
windows编译Redis5.0以及c#使用Redis_第2张图片
选择make
windows编译Redis5.0以及c#使用Redis_第3张图片
还有automake
在这里插入图片描述

完成windows编译Redis5.0以及c#使用Redis_第4张图片
进github下载redis超链接

我们进入hiredis目录,执行make
windows编译Redis5.0以及c#使用Redis_第5张图片
下面进入lua的目录,执行make genericwindows编译Redis5.0以及c#使用Redis_第6张图片
这个也没什么问题。进入linenoise目录,执行make
在这里插入图片描述
最后进入根目录,执行make
windows编译Redis5.0以及c#使用Redis_第7张图片
最后,启动验证
windows编译Redis5.0以及c#使用Redis_第8张图片
此时安装好了
c#使用redis有多种redis客户端工具常用的比如csredis,nhiredis和StackExchange.Redis
下面我们用StackExchange.Redis讲解
首先使用redis我们要知道redis有几种数据结构
String: 字符串
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
首先在vs中nuget安装
windows编译Redis5.0以及c#使用Redis_第9张图片
输入Install-Package StackExchange.Redis -Version 1.2.6windows编译Redis5.0以及c#使用Redis_第10张图片
然后再安装Newtonsoft.Json(主要拿来序列化)
使用我下面代码的时候注意redis的端口号一般都是6379
windows编译Redis5.0以及c#使用Redis_第11张图片
然后密码可以在redis.conf中找到windows编译Redis5.0以及c#使用Redis_第12张图片
此时基础工作做完了
下面就开始撸代码


    class RedisHelper
    {
        #region 单例模式
        //连接redis服务器(连接字符串)
        private static ConfigurationOptions connDCS = ConfigurationOptions.Parse("127.0.0.1:6379,password=foobared");
        //线程锁
        private static readonly object Locker = new object();
        //连接对象
        private static ConnectionMultiplexer redisConn;
        //获取连接
        public static ConnectionMultiplexer getRedisConn()
        {
            if (redisConn == null)
            {
                lock (Locker)
                {
                    if (redisConn == null || !redisConn.IsConnected)
                    {
                        redisConn = ConnectionMultiplexer.Connect(connDCS);
                    }
                }
                /*
                 可以用来处理并发的事情
             */
            }
            return redisConn;

        }
        /// 
        /// 数据库
        /// 
        private IDatabase _db;
        public RedisHelper()
        {
            if (redisConn == null)
            {
                lock (Locker)
                {
                    if (redisConn == null || !redisConn.IsConnected)
                    {
                        redisConn = ConnectionMultiplexer.Connect(connDCS);
                    }
                }
                /*
                 可以用来处理并发的事情
             */
            }
            if (_db == null)
            {
                lock (Locker)
                {
                    if (_db == null)
                    {
                        _db = GetDatabase();
                    }
                }
            }
        }
        /// 
        /// 获取数据库
        /// 
        /// 
        /// 
        public IDatabase GetDatabase(int? db = null)
        {
            return getRedisConn().GetDatabase(db ?? -1);
        }
  
        /// 
        /// 设置string
        /// 
        /// 
        /// 
        /// 时间
        public virtual void StringSet(string key, object data, int cacheTime)
        {
            if (data == null)
            {
                return;
            }
            var entryBytes = Serialize(data);
            var expiresIn = TimeSpan.FromMinutes(cacheTime);

            _db.StringSet(key, entryBytes, expiresIn);
 
        }

        /// 
        /// 根据键获取值
        /// 
        /// 
        /// 
        /// 
        public virtual T Get<T>(string key)
        {

            var rValue = _db.StringGet(key);
            if (!rValue.HasValue)
            {
                return default(T);
            }

            var result = Deserialize<T>(rValue);

            return result;
        }

        /// 
        /// 反序列化
        /// 
        /// 
        /// 
        /// 
        protected virtual T Deserialize<T>(byte[] serializedObject)
        {
            if (serializedObject == null)
            {
                return default(T);
            }
            var json = Encoding.UTF8.GetString(serializedObject);
            return JsonConvert.DeserializeObject<T>(json);
        }
        /// 
        /// 判断是否已经设置
        /// 
        /// 
        /// 
        public virtual bool IsSet(string key)
        {
            return _db.KeyExists(key);
        }
        /// 
        /// 序列化
        /// 
        /// 
        /// byte[]
        private byte[] Serialize(object data)
        {
            var json = JsonConvert.SerializeObject(data);
            return Encoding.UTF8.GetBytes(json);
        }
        #endregion

设置与调用,设置了一分钟的过期时间
windows编译Redis5.0以及c#使用Redis_第13张图片

学海无涯苦作舟,希望大家的程序写的越来越好

redisConn = ConnectionMultiplexer.Connect(connDCS);
private static ConfigurationOptions connDCS = ConfigurationOptions.Parse(“127.0.0.1:6379,password=foobared”);
修改成下面即可解决timeout问题


                        var config = new ConfigurationOptions
                        {
                            AbortOnConnectFail = false,
                            AllowAdmin = true,
                            ConnectTimeout = 15000,
                            SyncTimeout = 5000,
                            ResponseTimeout = 15000,
                            Password = "foobared",//Redis数据库密码
                            EndPoints = { "127.0.0.1:6379" }
                        };
                        redisConn = ConnectionMultiplexer.Connect(config);

解决超时问题
https://blog.csdn.net/qq_35633131/article/details/84069184

你可能感兴趣的:(c#)