设为首页 收藏本站
查看: 1078|回复: 0

[经验分享] ASP.NET Core 使用 Redis 客户端

[复制链接]

尚未签到

发表于 2017-12-21 20:38:25 | 显示全部楼层 |阅读模式
  Mac OS 安装 Redis(用于连 Redis 服务器,方便查看数据):https://redis.io/topics/quickstart


  • wget http://download.redis.io/redis-stable.tar.gz(没有wget命令,手动下载)
  • tar xvzf redis-stable.tar.gz
  • cd redis-stable
  • make
  • sudo make install
  • 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>
{
  private readonly>  

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

  // GET api/values
[HttpGet]

  public async Task<string> Get()
  {
  // redis operate
  var key = &quot;test_key&quot;;
  var valueByte = await _distributedCache.GetAsync(key);
  if (valueByte == null)
  {
  await _distributedCache.SetAsync(key, Encoding.UTF8.GetBytes(&quot;world22222&quot;), 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
  参考资料:


  • redis-cli, the Redis command line interface
  • MAC下 安装 redis
  • Redis 常用命令
  • StackExchange.Redis ConnectionMultiplexer.Connect() Intermittently Works
  • StackExchange.Redis simple C# Example
  • Redis Cache in ASP.NET Core
  • Using Redis Cache in .net Core
  • redis 报Operation against a key holding the wrong kind of value 警告的解决方法

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426611-1-1.html 上篇帖子: 在Windows下为PHP5.5安装redis扩展 下篇帖子: RedLock.Net - 基于Redis分布式锁的开源实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表