【C#】Redis在net core下使用教程

2023-09-20 11:57:15

系列文章



前言

官方教程:https://www.runoob.com/redis/redis-install.html
Remote DIctionary Server(Redis远程字典服务器) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。


一、Redis 简介

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

1.1 Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
    丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

1.2 Redis与其他key-value存储有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
  • Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

二、Redis安装步骤

2.1 下载链接

下载地址:https://github.com/tporadowski/redis/releases
这里我们下载 Redis-x64-xxx.zip压缩包到 D:\Program Files,解压后,将文件夹重新命名为 redis。
打开文件夹,内容如下:
在这里插入图片描述

2.2 安装测试

当前目录,打开一个 cmd 窗口,启动运行:

redis-server.exe redis.windows.conf

如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:
在这里插入图片描述
这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。
切换到 redis 目录下运行:

redis-cli.exe -h 127.0.0.1 -p 6379

设置键值对:

set myKey abc

取出键值对:

get myKey

在这里插入图片描述
测试成功

三、Redis修改帐户密码

启动服务 redis-server.exe redis.windows.conf
启动客户端 redis-cli.exe
查看密码 config get requirepass
设置密码 config set requirepass system //设置密码为system
退出 exit
重新登录-启动客户端 redis-cli.exe
重新登录-输入密码 auth system
在这里插入图片描述

四、Redis写成Windows服务

每次启动cmd窗口,显得很麻烦,现在我们将其写成Windows服务方便启动。

redis-server --service-install redis.windows.conf
在这里插入图片描述
在这里插入图片描述

五、.net core - 使用CSRedisCore操作redis

ServiceStack.Redis 是商业版,免费版有限制;
StackExchange.Redis 是免费版,但是内核在 .NETCore 运行有问题经常 Timeout,暂无法解决;
CSRedis于2016年开始支持.NETCore一直迭代至今,实现了低门槛、高性能,和分区高级玩法的.NETCore redis-cli SDK;
在v3.0版本更新中,CSRedis中的所有方法名称进行了调整,使其和redis-cli保持一致,如果你熟悉redis-cli的命令的话,CSRedis可以直接上手,这样学习成本就降低很多。
在这里插入图片描述
创建RedisServer缓存型数据库实例化,连接。

using CSRedis;
using YS.Common;

namespace YS.Core
{
    /// <summary>
    /// 创建RedisServer缓存型数据库
    /// 说明:需要读取配置文件,里面有连接字符串
    /// </summary>
    public static class RedisServer
    {
        public static CSRedisClient? Cache;
        public static CSRedisClient? Sequence;
        public static CSRedisClient? Session;

        public static void Initalize()
        {
            Cache = new CSRedisClient(AppSettings.Configuration["RedisServer:Cache"]);
            Sequence = new CSRedisClient(AppSettings.Configuration["RedisServer:Sequence"]);
            Session = new CSRedisClient(AppSettings.Configuration["RedisServer:Session"]);
        }
    }
}

RedisCache.cs辅助类,负责执行操作


using SqlSugar;
using System;
using System.Collections.Generic;

namespace YS.Core
{
    /// <summary>
    /// Redis操作方法
    /// 说明:添加键值对、添加json,以及修改删除等
    /// </summary>
    public class RedisCache : ICacheService
    {
        public void Add<V>(string key, V value)
        {
            RedisServer.Cache.Set(key, value);
        }

        public void Add<V>(string key, V value, int cacheDurationInSeconds)
        {
            RedisServer.Cache.Set(key, value, cacheDurationInSeconds);
        }

        public bool ContainsKey<V>(string key)
        {
            return RedisServer.Cache.Exists(key);
        }

        public V Get<V>(string key)
        {
            return RedisServer.Cache.Get<V>(key);
        }

        public IEnumerable<string> GetAllKey<V>()
        {
            return RedisServer.Cache.Keys("Cache:SqlSugarDataCache.*");
        }

        public V GetOrCreate<V>(string cacheKey, Func<V> create, int cacheDurationInSeconds = int.MaxValue)
        {
            if (ContainsKey<V>(cacheKey))
            {
                return Get<V>(cacheKey);
            }
            else
            {
                var result = create();
                Add(cacheKey, result, cacheDurationInSeconds);
                return result;
            }
        }

        public void Remove<V>(string key)
        {
            RedisServer.Cache.Del(key.Remove(0, 6));
        }
    }
}

更多推荐

Javascript原型和原型链的详解

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录原型(Prototype)构造函数和原型对象原型链原型继承1.对象字面量和Object.create():可以使用字面量对象定义属性和方法,并使用Object.create()方法创建一个新对象,并将其原型设置

python特殊函数之__call__函数的作用

作用将一个类实例也可以变成一个可调用对象。详解__call__是Python中一个魔术方法(magicmethod),它用于定义对象的函数调用行为。换句话说,当你尝试调用一个具有__call__方法的对象时,Python会自动调用该方法。下面是一个简单的例子来说明__call__的作用:classMyClass:def

100天精通Python(可视化篇)——第100天:Pyecharts绘制多种炫酷漏斗图参数说明+代码实战

文章目录专栏导读一、漏斗图介绍1.说明2.应用场景二、漏斗图类说明1.导包2.add函数三、漏斗图实战1.基础漏斗图2.标签内漏斗图3.百分比漏斗图4.向上排序漏斗图5.标准漏斗图书籍推荐专栏导读🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,

【2023,学点儿新Java-34】基本数据类型变量 运算规则:自动类型提升、强制类型转换 | 为什么标识符的声明规则里要求不能数字开头?(通俗地讲解——让你豁然开朗!)

前情提要:【2023,学点儿新Java-33】字符型变量char|布尔类型变量boolean:true、false【2023,学点儿新Java-32】Java基础小练习:根据圆周率与半径求圆的面积|温度转换|计算矩形面积|判断奇偶数|年龄分类【2023,学点儿新Java-31】测试:整型和浮点型变量的使用|附:计算机存

【Python】PySpark 数据计算 ③ ( RDD#reduceByKey 函数概念 | RDD#reduceByKey 方法工作流程 | RDD#reduceByKey 语法 | 代码示例 )

文章目录一、RDD#reduceByKey方法1、RDD#reduceByKey方法概念2、RDD#reduceByKey方法工作流程3、RDD#reduceByKey函数语法二、代码示例-RDD#reduceByKey方法1、代码示例2、执行结果三、代码示例-使用RDD#reduceByKey统计文件内容1、需求分析

【生物信息学】奇异值分解(SVD)

目录一、奇异值分解(SVD)二、Python实现1.调包np.linalg.svd()2.自定义三、SVD实现链路预测一、奇异值分解(SVD)SVD分解核心思想是通过降低矩阵的秩来提取出最重要的信息,实现数据的降维和去噪。ChatGPT:SVD(奇异值分解)是一种常用的矩阵分解方法,它可以将一个矩阵分解为三个矩阵的乘积

Scanner类用法(学习笔记)

Scanner类用法(学习笔记,后续会补充)1.next()用法packagecom.yushifu.scanner;importjava.util.Scanner;//utiljava工具包//Scanner类(获取用户的输入)Scanners=newScanner(System.in);//通过Scanner类的n

论文阅读 - Outlier detection in social networks leveraging community structure

目录摘要1.Introduction2.Relatedworks3.Preliminaries3.1.模块化度量3.2.Classesofoutliers3.2.1.点异常3.2.2.Contextualanomalies3.2.3.Collectiveanomalies3.3.Problemdefinition3.4

PBR纹理的10种贴图

PBR是基于物理的渲染的首字母缩写。它试图通过模拟材料如何吸收和反射光,以模仿现实世界中的光流的方式产生视觉效果。最近的游戏引擎由于其逼真的效果而越来越多地使用PBR纹理。对于实时渲染,它们被认为是真实世界场景的最佳近似值。推荐:用NSDT编辑器快速搭建可编程3D场景为了创建效果,大多数渲染引擎都有其独特的工作流程。但

NExT-GPT: Any-to-Any Multimodal LLM论文笔记

论文https://arxiv.org/pdf/2309.05519.pdf代码https://github.com/NExT-GPT/NExT-GPT/tree/main1.Motivation现有的多模态大模型大都只是支持输入端的多模态(Text、Image、Video、Audio等),但是输出端都是Text。也有

web大作业 比赛报名页面+ 团队介绍页面 制作

web大作业比赛报名页面+团队介绍页面制作【附源代码】文章目录web大作业比赛报名页面+团队介绍页面制作【附源代码】前言报名界面效果图如下:代码实现计时器效果实现(jquery+boostrap)团队介绍页面模拟框代码:CSS代码前言之前没看过看过上一篇文章的小伙伴,可以看一下之前的文章,里面有一些组件设计是下面没有提

热文推荐