ASP.NET Core 使用 Redis 客户端

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

Mac OS 安装 Redis(用于连 Redis 服务器,方便查看数据):https://redis.io/topics/quickstart

  1. wget http://download.redis.io/redis-stable.tar.gz(没有wget命令,手动下载)
  2. tar xvzf redis-stable.tar.gz
  3. cd redis-stable
  4. make
  5. sudo make install
  6. make test(测试安装是否成功)

安装好之后,我们就可以使用redis-cli命令了,

连接 Redis 服务器:

$ redis-cli -h 12.22.10.33 -p 6379 -a "password"
12.22.10.33:6379> ping
PONG

查看 key 是否存在(1 表示存在):

$ exists test_key
(integer) 1

查看指定 key 的值类型:

$ type test_key
string

获取指定 key 的字符串值:

$ get test_key
"hello world"

上面是一些简单的redis-cli命令,更多命令查看:http://www.runoob.com/redis/redis-commands.html


ASP.NET Core 使用 Redis 客户端,最好的选择当然是 StackExchange.Redis,GitHub 地址:https://github.com/StackExchange/StackExchange.Redis

使用很简单,首先安装程序包:

PM> Install-Package StackExchange.Redis

使用简单示例:

static void Main(string[] args)
{
    //var configurationOptions = new ConfigurationOptions
    //{
    //    EndPoints =
    //    {
    //        "10.11.22.1", "6379",
    //        "10.11.22.2", "6379",
    //        "10.11.22.3", "6379"
    //    },
    //    Password = "aqsea3491"
    //};
    ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("10.11.22.1:6379,10.11.22.1:6379,10.11.22.1:6379,password=123456");
    IDatabase db = redis.GetDatabase();
    string value = "abcdefg";
    db.StringSet("test_key", value);

    value = db.StringGet("test_key");

    Console.WriteLine(value);
    Console.ReadLine();
}

当然,如果用于生产环境的话,需要再进行封装下,如果我们使用的是 ASP.NET Core 的话,还有一种不用自己封装的选择,那就是 Microsoft.Extensions.Caching.Redis,GitHub 地址:https://github.com/aspnet/Caching/tree/dev/src/Microsoft.Extensions.Caching.Redis

Microsoft.Extensions.Caching.Redis 是微软自己封装的 Redis 组件,内部使用的还是 StackExchange.Redis,但在 ASP.NET Core 中使用起来,非常简单。

首先安装程序包:

PM> Microsoft.Extensions.Caching.Redis

Startup.ConfigureServices配置:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    // For redis
    // install-package Microsoft.Extensions.Caching.Redis
    services.AddDistributedRedisCache(options =>
    {
        options.InstanceName = "";
        options.Configuration = "10.11.22.1:6379,10.11.22.1:6379,10.11.22.1:6379,password=123456";
    });
}

简单使用:

public class ValuesController : Controller
{
    private readonly IDistributedCache _distributedCache;

    public ValuesController(IDistributedCache distributedCache)
    {
        _distributedCache = distributedCache;
    }

    // GET api/values
    [HttpGet]
    public async Task<string> Get()
    {
        // redis operate
        var key = "test_key";
        var valueByte = await _distributedCache.GetAsync(key);
        if (valueByte == null)
        {
            await _distributedCache.SetAsync(key, Encoding.UTF8.GetBytes("world22222"), new DistributedCacheEntryOptions().SetSlidingExpiration(DateTimeOffset.Now.AddSeconds(3000)));
            valueByte = await _distributedCache.GetAsync(key);
        }
        var valueString = Encoding.UTF8.GetString(valueByte);
        return valueString;
    }
}

测试过程中,发现 Microsoft.Extensions.Caching.Redis 有一个问题,虽然IDistributedCache提供了SetStringAsync方法,但实际插入到 Redis 的值类型,并不是string,而是hash,可以用redis-cli命令进行测试:

114.55.56.213:6379> get test_key
(error) WRONGTYPE Operation against a key holding the wrong kind of value
114.55.56.213:6379> type test_key
hash

所以,没办法,只能使用SetAsync,然后读取再由byte转换为string

另外,微软封装的Caching,除了 Microsoft.Extensions.Caching.Redis,还有:

  • Microsoft.Extensions.Caching.Abstractions
  • Microsoft.Extensions.Caching.Memory
  • Microsoft.Extensions.Caching.SqlServer(使用 SqlServer 数据库,作为缓存存储)

详细使用,请查看:Working with a distributed cache




本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/asp-net-core-use-redis.html,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
NoSQL 数据可视化 Unix
.NET Core Redis的简单使用
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
25 0
|
4月前
|
缓存 开发框架 .NET
ASP.NET Core 缓存
Get新知识: 缓存相关概念:缓存的类型:总结:总的来说,私有缓存会减少网络带宽的需求,同时会减少从缓存到API的请求。因为私有缓存是存储在客户端浏览器的,对于请求来说,如果缓存还在有限期内,那么请求连网络请求都不会发出会直接在客户端浏览器获取到响应,这样就减少网络请求次数,同样也会减少API请求次数。而共享缓存不会节省缓存到API的网路带宽,但是它会减少请求到API的请求。因为共享缓存是...
27 0
ASP.NET Core 缓存
|
存储 开发框架 NoSQL
ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis
ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis
270 0
ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis
|
存储 消息中间件 缓存
Redis入门与ASP.NET Core缓存
Redis入门与ASP.NET Core缓存
330 0
Redis入门与ASP.NET Core缓存
|
缓存 开发框架 NoSQL
ASP.NET Core 使用Redis实现分布式缓存:Docker、 IDistributedCache、StackExchan geRedis
ASP.NET Core 使用Redis实现分布式缓存:Docker、 IDistributedCache、StackExchan geRedis
278 0
ASP.NET Core 使用Redis实现分布式缓存:Docker、 IDistributedCache、StackExchan geRedis
|
.NET
在ASP.NET Core 2.x中获取客户端IP地址
一、前言 大家也知道服务端请求时我们获取的IP地址是包含在请求头中,因此这也大大便利了IP的获取。 在ASP.NET中,可以通过以下方式获取客户端的IP地址。 HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 但这不适用于ASP.NET Core 2.0。
1877 0
|
Kubernetes .NET 容器
(视频)asp.net core系列之k8s集群部署视频
0、前言 应许多网友的要求,特此录制一下k8s集群部署的视频。在录制完成后发现视频的声音存在一点瑕疵,不过不影响大家的观感。 一、视频说明 1、视频地址: 如果有不懂,或者有疑问的欢迎留言。视频分为两段。
1026 0
|
存储 NoSQL 关系型数据库
asp.net core集成MongoDB
0、目录  整体架构目录:ASP.NET Core分布式项目实战-目录   一、前言及MongoDB的介绍  最近在整合自己的框架,顺便把MongoDBD的最简单CRUD重构一下作为组件化集成到asp.net core项目中,当然此篇文章中没有讲解mongodb的集群部署,等有机会分享一下。
1025 0

相关产品

  • 云迁移中心