.Net Core 配置Redis


一、.Net Core 配置Redis

Redis

  非布式缓存 速度比SQL快

  1、Redis 的数据存储到 内存上

  2、非关系型数据库(缓存)

  3、数据类型五种:

    string(字符串)、 list(列表)、 hash(哈希) 、set(集合) 、zset (有序集合)(五种数据类型)

  4、内存(闪存)的数据 关闭计算机时 会消失

  5、Redis 持久化(将数据保存到硬盘上)方案(两种):

    5.1、RDB(默认持久化方案)RDB 是 Redis 默认的持久化方案。

      在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。

     即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。 (以快照方式) 恢复速度快,但是容易丢数据

 

               5.2、AOF:Redis 默认不开启。

       它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。

       Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。(恢复时间较长,数据完整性)

 

SQL、MYSQL

  1、关系型数据库

  2、常用的数据类型: int varchar datetime float double

 

1、运行Redis

1.1、在解压后的Reids 所在文件夹 输入 cmd 命令

2、启动  redis

                默认端口 6379

    2.1第一种:通过执行命令的方式启动服务

    redis-server redis.windows.conf

 

    2.2第二种、通过命令将启动服务的命令做成本电脑服务

    redis-server --service-install redis.windows.conf

    直接任务管理器中操作启动、关闭

3、查看redis数据

    3.1  第一种:通过敲写命令获取

       ---第2步2.1中黑框不关闭、用同样的方法再次打开一个黑框敲对应命令查看

    3.2  第二种:通过管理工具管理Redis

二、.Net Core代码中将数据存入Redis / 取出Redis数据

    1、引用拓展包 到对应项目中(哪里用哪里进行下载该包)

    Microsoft.Extensions.Caching.StackExchangeRedis

  2、配置到appsettings.json夹中Redis连接字符串

//Redis连接字符串
"RedisConnectionStrings": "127.0.0.1:6379,password=,defaultDatabase=0,connectTimeout=5000,syncTimeout=1000"

  3、配置Redis参数  (Start.up中配置)    注入   ----类似于连接MSSQL字符串操作步骤

//配置Redis   注入类似于配置数据库连接字符串
services.AddStackExchangeRedisCache(options =>
            { options.Configuration =Configuration.GetSection("RedisConnectionStrings").Value;
                //options.InstanceName = "SampleInstance";
            });

  4、通过依赖注入

    4.1 引用Redis命名空间  

         using Microsoft.Extensions.Caching.Distributed;

               4.2通过构造函数依赖注入

      

  5、代码获取Redis数据   与  代码向Redis添加数据

//获取对应键值ShoppingCart数据
//获取key为一个数组列表格式
 var key= distributedCache.GetString("ShoppingCart");

//将对象序列化字符串 添加到redis中
//当下存入的为string形式 ,需要对添加的数据序列化
 distributedCache.SetString("ShoppingCart", jsonData);

   

  6.、例子

    例子功能逻辑:该段代码逻辑为向购物车添加商品,

           当购物车之前有选中该商品时,则在购物车原有购买数量基础上+1,

           当购物车中没有该选中商品时,则将该商品     ///

public readonly GoodsDbContext db;
public readonly IDistributedCache distributedCache;


///


/// 依赖注入 上下文 Redis注入
///

public ShppintCartdal(GoodsDbContext dbContext,IDistributedCache d)
{
db = dbContext;
distributedCache = d;
}


/// 添加购物车 或更改购买数量 ///
/// /// public ApiResult AddGoods(ShoppingCart s) { //先定义List列表 因为返回的数据也是放入列表中的便于后面查询,所以添加的也应该是列表 List list = new List(); //去Redis中查找数据 //根据键名查找 获取的Key为一个数组列表格式      var key= distributedCache.GetString("ShoppingCart");

        //如果是key为NULL 代表是第一次访问Redis if (string.IsNullOrEmpty(key)) { //先将对象存储到list中 list.Add(s); //对列表序列化 前提下载包json 引用 using Newtonsoft.Json; var json = JsonConvert.SerializeObject(list);
//将对象序列化字符串 添加到redis中 distributedCache.SetString("ShoppingCart", json); } else //代表key有值 则进行 查找 { //先将Key反序列化为对象 var listDes = JsonConvert.DeserializeObject>(key);
          //根据题意获取是否购物车中有此商品
var item = listDes.FirstOrDefault(u => u.Gid == s.Gid); if (item != null) { item.BuyNum += 1; //判断是否假删除 此步缘由与根据题意编辑 if (item.IsDelete == 1) { item.BuyNum = 1; item.IsDelete = 0; } //将修改后的数据所在的整个对象序列化字符串 添加到redis中 var json = JsonConvert.SerializeObject(listDes); distributedCache.SetString("ShoppingCart", json); } //不存在 添加新的数据到购物车 else { //将对象存储到返回时序列化后的listDes中 listDes.Add(s); //将对象序列化字符串 添加到redis中 var json = JsonConvert.SerializeObject(listDes); distributedCache.SetString("ShoppingCart", json); } }

       7、设置设置Reids的过期时间

 _distributedCache.SetString("shoppingCar", JsonConvert.SerializeObject(list), new DistributedCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(5)));  //设置超时时间5后过期