博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#redis缓存应用
阅读量:5344 次
发布时间:2019-06-15

本文共 5200 字,大约阅读时间需要 17 分钟。

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盘,也可以放其他盘)

 

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

 

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

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会报错,还需自行搜索添加引用,

 

  奉上一个封装好的Helper类

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{    ///     /// Redis 操作类    ///     public class RedisHelper    {        ///         /// 连接字符串        ///         private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString;        ///         /// 锁        ///         private readonly object _lock = new object();        ///         /// 连接对象        ///         private volatile IConnectionMultiplexer _connection;        ///         /// 数据库        ///         private IDatabase _db;        public RedisHelper()        {            _connection = ConnectionMultiplexer.Connect(ConnectionString);            _db = GetDatabase();        }        ///         /// 获取连接        ///         /// 
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; } /// /// 获取数据库 /// /// ///
public IDatabase GetDatabase(int? db = null) { return GetConnection().GetDatabase(db ?? -1); } /// /// 设置 /// /// 键 /// 值 /// 时间 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); } /// /// 根据键获取值 /// ///
/// ///
public virtual T Get
(string key) { var rValue = _db.StringGet(key); if (!rValue.HasValue) { return default(T); } var result = Deserialize
(rValue); return result; } ///
/// 反序列化 /// ///
///
///
protected virtual T Deserialize
(byte[] serializedObject) { if (serializedObject == null) { return default(T); } var json = Encoding.UTF8.GetString(serializedObject); return JsonConvert.DeserializeObject
(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); } }}

AppConfig中配置:

最后功能实现:

class Program    {        static void Main(string[] args)        {            var s = "a";            //RedisCacheHelper.Add("abc",s,DateTime.Now.AddDays(1));            //Console.WriteLine("ok");            //Console.WriteLine(RedisCacheHelper.Get
("abc")); new RedisHelper().Set("abc", s, 10); Console.WriteLine("ok"); Console.ReadKey(); } }

 

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

你可能感兴趣的文章
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
Java中的编码
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>