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

  • 时间:
  • 来源:互联网
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Mrs_Stephanie/article/details/103353467

c#下使用redis全教程

第一步编译redis
第二步部署redis
第三步部署c#使用redis环境

先去弄Cygwin环境
Cygwin链接

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

完成在这里插入图片描述
进github下载redis超链接

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


    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;

        }
        /// <summary>
        /// 数据库
        /// </summary>
        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();
                    }
                }
            }
        }
        /// <summary>
        /// 获取数据库
        /// </summary>
        /// <param name="db"></param>
        /// <returns></returns>
        public IDatabase GetDatabase(int? db = null)
        {
            return getRedisConn().GetDatabase(db ?? -1);
        }
  
        /// <summary>
        /// 设置string
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="data">值</param>
        /// <param name="cacheTime">时间</param>
        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);
 
        }

        /// <summary>
        /// 根据键获取值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        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;
        }

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

设置与调用

            var s = "a";
            new RedisHelper().StringSet("abc", s, 10);
            Console.WriteLine(new RedisHelper().Get<string>("abc"));

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

本文链接http://element-ui.cn/news/show-504.aspx