C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C#redis缓存应用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

redis

  redis是一种非关系型数据库(关系型数据库sql server,MysqL等),但多用于缓存技术.因为它是一种内存告诉缓存数据库,存储数据的方式为Key-value,即键值对.而且redis支持多种数据类型,如:string、list、set、zset(sorted set)、hash。

  redsi特点:

redis以内存作为存储的介质,读写速率极高,远超过数据库,

redis跟memcache不同,redis存储的数据是持久化的,不会因为断电重启造成的数据丢失.(rEIDs的存储分为内存存储,磁盘存储和log文件三部分,重启后,redis从磁盘重新将数据加载到内存中,再通过配置文件对其进行配置,持久化的原因)

redis可以配置集群,就像一些大公司的服务器一样,它可以建立多个redis用来缓存,而且redis不在客户端,也不再服务端,是一个独立的部分

  redis两种文件格式:

①全量数据:是把内存中的数据写入磁盘,便于下次读取文件进行夹杂

②增量请求:是将内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括SET,RPUSH,SADD,ZADD

redis的安装:

  包地址:https://files.cnblogs.com/files/lbjlbj/redis3.7z

运行->cmd->CD C:\redis(C:\redis CD 进入到盘符(记得有空格),上面那个解压后把它改名为redis,放到了C盘,也可以放其他盘)

 

C#redis缓存应用

 redis-server.exe redis.windows.conf,等出现如图的实例,就证明成功了(这个控制台先不要关)

 

C#redis缓存应用

再开一个控制台,同样:CD C:\redis 
 redis-cli.exe -h 127.0.0.1 -p 6379
 set myKey abc(myKey即Key,abc即value,set存)
 get myKey(get读)

C#redis缓存应用

set auth 密码名,是用来设置密码.(如果忘记了密码:redis文件夹下redis.windows-service.conf记事本打开CTRL+F requirepass 即可)

 

redis在C#中的实际用法:

******在使用redis缓存时,须先启动服务器,CD C:\redis redis-server.exe redis.windows.conf

dll文件:https://files.cnblogs.com/files/lbjlbj/dll.7z

可能会存在ConfigurationManager会报错,还需自行搜索添加引用,

C#redis缓存应用

 

  奉上一个封装好的Helper类

C#redis缓存应用

using StackExchange.redis;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace ConsoleApp1
{
    /// <sumMary>
    /// redis 操作类
    /// </sumMary>
    public class redisHelper
    {
        /// <sumMary>
        /// 连接字符串
        /// </sumMary>
        private static readonly String ConnectionString = ConfigurationManager.ConnectionStrings["redisConnectionString"].ConnectionString;
        /// <sumMary>
        /// 锁
        /// </sumMary>
        private readonly object _lock = new object();
        /// <sumMary>
        /// 连接对象
        /// </sumMary>
        private volatile IConnectionMultiplexer _connection;
        /// <sumMary>
        /// 数据库
        /// </sumMary>
        private IDatabase _db;
        public redisHelper()
        {
            _connection = ConnectionMultiplexer.Connect(ConnectionString);
            _db = GetDatabase();
        }
        /// <sumMary>
        /// 获取连接
        /// </sumMary>
        /// <returns></returns>
        protected IConnectionMultiplexer GetConnection()
        {
            if (_connection != null && _connection.IsConnected)
            {
                return _connection;
            }
            lock (_lock)
            {
                if (_connection != null && _connection.IsConnected)
                {
                    return _connection;
                }

                if (_connection != null)
                {
                    _connection.Dispose();
                }
                _connection = ConnectionMultiplexer.Connect(ConnectionString);
            }

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

C#redis缓存应用

AppConfig中配置:

 <connectionStrings>
    <add name="redisConnectionString" connectionString="localhost"/>
  </connectionStrings>

最后功能实现:

C#redis缓存应用

class Program
    {
        static void Main(String[] args)
        {
            var s = "a";
            //redisCacheHelper.Add("abc",s,datetiR_362_11845@e.Now.AddDays(1));

            //Console.WriteLine("ok");

            //Console.WriteLine(redisCacheHelper.Get<String>("abc"));
            new redisHelper().Set("abc",10);
            Console.WriteLine("ok");
            Console.ReadKey();
        }
    }

C#redis缓存应用

 转自:https://www.cnblogs.com/lbjlbj/p/10564820.html

大佬总结

以上是大佬教程为你收集整理的C#redis缓存应用全部内容,希望文章能够帮你解决C#redis缓存应用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。