Giter Site home page Giter Site logo

newlifex / newlife.redis Goto Github PK

View Code? Open in Web Editor NEW
831.0 35.0 175.0 4.9 MB

High performance redis client, support NETCore/. NET4. 0/. NET4. 5. It is specially optimized for big data and message queue. The average daily consumption of online single application is 10 billion. 高性能Redis客户端,支持.NETCore/.NET4.0/.NET4.5,为大数据与消息队列而特别优化,线上单应用日均100亿调用量

License: MIT License

C# 100.00%
redis newlife memorycache dotnet csharp

newlife.redis's Introduction

# NewLife.Redis - Redis客户端组件

GitHub top language GitHub License Nuget Downloads Nuget Nuget (with prereleases)

NewLife.Redis 是一个Redis客户端组件,以高性能处理大数据实时计算为目标。
Redis协议基础实现Redis/RedisClient位于X组件,本库为扩展实现,主要增加列表结构、哈希结构、队列等高级功能。

源码: https://github.com/NewLifeX/NewLife.Redis
Nuget:NewLife.Redis
教程:https://newlifex.com/core/redis


特性

  • 2017年在ZTO大数据实时计算广泛应用,200多个Redis实例稳定工作一年多,每天处理近1亿条包裹数据,日均调用量80亿次
  • 低延迟,Get/Set操作平均耗时200~600us(含往返网络通信)
  • 大吞吐,自带连接池,最大支持100000并发
  • 高性能,支持二进制序列化

Redis经验分享

  • 在Linux上多实例部署,实例个数等于处理器个数,各实例最大内存直接为本机物理内存,避免单个实例内存撑爆
  • 把海量数据(10亿+)根据key哈希(Crc16/Crc32)存放在多个实例上,读写性能成倍增长
  • 采用二进制序列化,而非常见Json序列化
  • 合理设计每一对Key的Value大小,包括但不限于使用批量获取,原则是让每次网络包控制在1.4k字节附近,减少通信次数
  • Redis客户端的Get/Set操作平均耗时200~600us(含往返网络通信),以此为参考评估网络环境和Redis客户端组件
  • 使用管道Pipeline合并一批命令
  • Redis的主要性能瓶颈是序列化、网络带宽和内存大小,滥用时处理器也会达到瓶颈
  • 其它可查优化技巧 以上经验,源自于300多个实例4T以上空间一年多稳定工作的经验,并按照重要程度排了先后顺序,可根据场景需要酌情采用!

推荐用法

推荐使用单例模式,Redis内部有连接池并且支持多线程并发访问

public static class RedisHelper
{
    /// <summary>
    /// Redis实例
    /// </summary>
    public static FullRedis redisConnection { get; set; } = new FullRedis("127.0.0.1:6379", "123456", 4);
}

Console.WriteLine(RedisHelper.redisConnection.Keys);

基础 Redis

Redis实现标准协议以及基础字符串操作,完整实现由独立开源项目NewLife.Redis提供。
采取连接池加同步阻塞架构,具有超低延迟(200~600us)以及超高吞吐量的特点。
在物流行业大数据实时计算中广泛应有,经过日均100亿次调用量验证。

// 实例化Redis,默认端口6379可以省略,密码有两种写法
//var rds = new FullRedis("127.0.0.1", null, 7);
var rds = new FullRedis("127.0.0.1:6379", "pass", 7);
//var rds = new FullRedis();
//rds.Init("server=127.0.0.1:6379;password=pass;db=7");
rds.Log = XTrace.Log;

基本操作

在基本操作之前,我们先做一些准备工作:

  • 新建控制台项目,并在入口函数开头加上 XTrace.UseConsole(); ,这是为了方便查看调试日志
  • 具体测试代码之前,需要加上前面MemoryCache或Redis的实例化代码
  • 准备一个模型类User
class User
{
    public String Name { get; set; }
    public DateTime CreateTime { get; set; }
}

添删改查:

var rds = new FullRedis("127.0.0.1", null, 7);
rds.Log = XTrace.Log;
rds.ClientLog = XTrace.Log; // 调试日志。正式使用时注释
var user = new User { Name = "NewLife", CreateTime = DateTime.Now };
rds.Set("user", user, 3600);
var user2 = rds.Get<User>("user");
XTrace.WriteLine("Json: {0}", user2.ToJson());
XTrace.WriteLine("Json: {0}", rds.Get<String>("user"));
if (rds.ContainsKey("user")) XTrace.WriteLine("存在!");
rds.Remove("user");

执行结果:

14:14:25.990  1 N - SELECT 7
14:14:25.992  1 N - => OK
14:14:26.008  1 N - SETEX user 3600 [53]
14:14:26.021  1 N - => OK
14:14:26.042  1 N - GET user
14:14:26.048  1 N - => [53]
14:14:26.064  1 N - GET user
14:14:26.065  1 N - => [53]
14:14:26.066  1 N - Json: {"Name":"NewLife","CreateTime":"2018-09-25 14:14:25"}
14:14:26.067  1 N - EXISTS user
14:14:26.068  1 N - => 1
14:14:26.068  1 N - 存在!
14:14:26.069  1 N - DEL user
14:14:26.070  1 N - => 1

保存复杂对象时,默认采用Json序列化,所以上面可以按字符串把结果取回来,发现正是Json字符串。
Redis的strings,实质上就是带有长度前缀的二进制数据,[53]表示一段53字节长度的二进制数据。

集合操作

GetAll/SetAll 在Redis上是很常用的批量操作,同时获取或设置多个key,一般有10倍以上吞吐量。

批量操作:

var rds = new FullRedis("127.0.0.1", null, 7);
rds.Log = XTrace.Log;
rds.ClientLog = XTrace.Log; // 调试日志。正式使用时注释
var dic = new Dictionary<String, Object>
{
    ["name"] = "NewLife",
    ["time"] = DateTime.Now,
    ["count"] = 1234
};
rds.SetAll(dic, 120);

var vs = rds.GetAll<String>(dic.Keys);
XTrace.WriteLine(vs.Join(",", e => $"{e.Key}={e.Value}"));

执行结果:

MSET name NewLife time 2018-09-25 15:56:26 count 1234
=> OK
EXPIRE name 120
EXPIRE time 120
EXPIRE count 120
MGET name time count
name=NewLife,time=2018-09-25 15:56:26,count=1234

集合操作里面还有 GetList/GetDictionary/GetQueue/GetSet 四个类型集合,分别代表Redis的列表、哈希、队列、Set集合等。
基础版Redis不支持这四个集合,完整版NewLife.Redis支持,MemoryCache则直接支持。

高级操作

  • Add 添加,当key不存在时添加,已存在时返回false。
  • Replace 替换,替换已有值为新值,返回旧值。
  • Increment 累加,原子操作
  • Decrement 递减,原子操作

高级操作:

var rds = new FullRedis("127.0.0.1", null, 7);
rds.Log = XTrace.Log;
rds.ClientLog = XTrace.Log; // 调试日志。正式使用时注释
var flag = rds.Add("count", 5678);
XTrace.WriteLine(flag ? "Add成功" : "Add失败");
var ori = rds.Replace("count", 777);
var count = rds.Get<Int32>("count");
XTrace.WriteLine("count由{0}替换为{1}", ori, count);

rds.Increment("count", 11);
var count2 = rds.Decrement("count", 10);
XTrace.WriteLine("count={0}", count2);

执行结果:

SETNX count 5678
=> 0
Add失败
GETSET count 777
=> 1234
GET count
=> 777
count由1234替换为777
INCRBY count 11
=> 788
DECRBY count 10
=> 778
count=778

性能测试

Bench 会分根据线程数分多组进行添删改压力测试。
rand 参数,是否随机产生key/value。
batch 批大小,分批执行读写操作,借助GetAll/SetAll进行优化。

Redis默认设置AutoPipeline=100,无分批时打开管道操作,对添删改优化。

Redis的兄弟姐妹

Redis实现ICache接口,它的孪生兄弟MemoryCache,内存缓存,千万级吞吐率。
各应用强烈建议使用ICache接口编码设计,小数据时使用MemoryCache实现;
数据增大(10万)以后,改用Redis实现,不需要修改业务代码。

新生命项目矩阵

各项目默认支持net7.0/netstandard2.1/netstandard2.0/net4.61,旧版(2022.1225)支持net4.5/net4.0/net2.0

项目 年份 说明
基础组件 支撑其它中间件以及产品项目
NewLife.Core 2002 核心库,日志、配置、缓存、网络、序列化、APM性能追踪
NewLife.XCode 2005 大数据中间件,单表百亿级,MySql/SQLite/SqlServer/Oracle/TDengine/达梦,自动分表
NewLife.Net 2005 网络库,单机千万级吞吐率(2266万tps),单机百万级连接(400万Tcp)
NewLife.Remoting 2011 RPC通信框架,内网高吞吐或物联网硬件设备场景
NewLife.Cube 2010 魔方快速开发平台,集成了用户权限、SSO登录、OAuth服务端等,单表100亿级项目验证
NewLife.Agent 2008 服务管理组件,把应用安装成为操作系统守护进程,Windows服务、Linux的Systemd
NewLife.Zero 2020 Zero零代脚手架,基于NewLife组件生态的项目模板,Web、WebApi、Service
中间件 对接知名中间件平台
NewLife.Redis 2017 Redis客户端,微秒级延迟,百万级吞吐,丰富的消息队列,百亿级数据量项目验证
NewLife.RocketMQ 2018 RocketMQ纯托管客户端,支持Apache RocketMQ和阿里云消息队列,十亿级项目验
NewLife.MQTT 2019 物联网消息协议,MqttClient/MqttServer,客户端支持阿里云物联网
NewLife.IoT 2022 IoT标准库,定义物联网领域的各种通信协议标准规范
NewLife.Modbus 2022 ModbusTcp/ModbusRTU/ModbusASCII,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Siemens 2022 西门子PLC协议,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Map 2022 地图组件库,封装百度地图、高德地图和腾讯地图
NewLife.IP 2022 IP地址库,IP地址转物理地址
产品平台 产品平台级,编译部署即用,个性化自定义
AntJob 2019 蚂蚁调度,分布式大数据计算平台(实时/离线),蚂蚁搬家分片**,万亿级数据量项目验证
Stardust 2018 星尘,分布式服务平台,节点管理、APM监控中心、配置中心、注册中心、发布中心
NewLife.ERP 2021 企业ERP,产品管理、客户管理、销售管理、供应商管理
CrazyCoder 2006 码神工具,众多开发者工具,网络、串口、加解密、正则表达式、Modbus
XProxy 2005 产品级反向代理,NAT代理、Http代理
HttpMeter 2022 Http压力测试工具
GitCandy 2015 Git源代码管理系统
SmartOS 2014 嵌入式操作系统,完全独立自主,支持ARM Cortex-M芯片架构
SmartA2 2019 嵌入式工业计算机,物联网边缘网关,高性能.NET6主机,应用于工业、农业、交通、医疗
菲凡物联FIoT 2020 物联网整体解决方案,建筑、环保、农业,软硬件及大数据分析一体化,单机十万级点位项目验证
NewLife.UWB 2020 厘米级(10~20cm)高精度室内定位,软硬件一体化,与其它系统联动,大型展厅项目验证

新生命开发团队

XCode

新生命团队(NewLife)成立于2002年,是新时代物联网行业解决方案提供者,致力于提供软硬件应用方案咨询、系统架构规划与开发服务。
团队主导的开源NewLife系列组件已被广泛应用于各行业,Nuget累计下载量高达60余万次。
团队开发的大数据核心组件NewLife.XCode、蚂蚁调度计算平台AntJob、星尘分布式平台Stardust、缓存队列组件NewLife.Redis以及物联网平台NewLife.IoT,均成功应用于电力、高校、互联网、电信、交通、物流、工控、医疗、文博等行业,为客户提供了大量先进、可靠、安全、高质量、易扩展的产品和系统集成服务。

我们将不断通过服务的持续改进,成为客户长期信赖的合作伙伴,通过不断的创新和发展,成为国内优秀的IT服务供应商。

新生命团队始于2002年,部分开源项目具有20年以上漫长历史,源码库保留有2010年以来所有修改记录
网站:https://newlifex.com
开源:https://github.com/newlifex
QQ群:1600800/1600838
微信公众号:
智能大石头

newlife.redis's People

Contributors

andywu188 avatar axinyp avatar e4ky avatar huguodong avatar jackehuang avatar ligengrong avatar miaobei5555 avatar nnhy avatar qq897878763 avatar soar360 avatar t18724723333 avatar xxred avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

newlife.redis's Issues

Redis性能测试问题 ERR value is not an integer or out of range

源码未做改动,执行如下测试方法代码:
static void Test4()
{
var ic = Redis.Create("127.0.0.1:6379", 5);
//var ic = new MemoryCache();
ic.Bench();//此处报错。
}
错误详情:
Exception: ERR value is not an integer or out of range
(innerexception32个)
console log:
....略
14:04:28.557 1 N - 赋值 800,000 项, 64 线程,耗时 2,581ms 速度 309,957 ops
14:04:29.984 1 N - System.AggregateException: 发生一个或多个错误。 ---> System.Exception: ERR value is not an integer or out of range
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object ) --- 内部异常堆栈跟踪的结尾 --- 在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在 System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 在 System.Threading.Tasks.Task.Wait() 在 System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action1 body, Action2 bodyWithState, Func4 bodyWithLocal, Func1 localInit, Action1 localFinally)
在 System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, Action1 body) 在 NewLife.Caching.Cache.BenchGet(String key, Int64 times, Int32 threads, Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 367 在 NewLife.Caching.Cache.BenchOne(Int64 times, Int32 threads, Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 345 在 NewLife.Caching.Redis.BenchOne(Int64 times, Int32 threads, Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 574 在 NewLife.Caching.Cache.Bench(Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 319 在 NewLife.Caching.Redis.Bench(Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 562 在 Test.Program.Test4() 位置 C:\Users\Administrator\Downloads\NewLife.Redis-master\NewLife.Redis-master\Test\Program.cs:行号 142 在 Test.Program.Main(String[] args) 位置 C:\Users\Administrator\Downloads\NewLife.Redis-master\NewLife.Redis-master\Test\Program.cs:行号 23 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.<ForWorker>b__1() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) 在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<--- 在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221 在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247 在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376 在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<GetAll>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261
在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415 在 NewLife.Caching.Cache.<>c__DisplayClass45_0.<BenchGet>b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386 在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_01.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 221
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 247
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 376
在 NewLife.Caching.RedisClient.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 585 在 NewLife.Caching.Redis.<>c__DisplayClass56_01.b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Redis.Execute[TResult](Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 261 在 NewLife.Caching.Redis.GetAll[T](IEnumerable1 keys) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 415
在 NewLife.Caching.Cache.<>c__DisplayClass45_0.b__0(Int32 k) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 386
在 System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.b__1()
在 System.Threading.Tasks.Task.InnerInvoke()
在 System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
在 System.Threading.Tasks.Task.<>c__DisplayClass176_0.b__0(Object )<---
14:04:30.622 1 N - 异常退出!

集群测试异常

System.IO.IOException
HResult=0x80131620
Message=无法从传输连接中读取数据: 你的主机中的软件中止了一个已建立的连接。。
Source=System
StackTrace:
在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
在 System.IO.BufferedStream.ReadByte()
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count)
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args)
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args)
在 NewLife.Caching.RedisClient.GetInfo()
在 NewLife.Caching.FullRedis.<>c.b__11_0(RedisClient r) 在 C:\Users\yangling\Downloads\NewLife.Redis-master\NewLife.Redis-master\NewLife.Redis\FullRedis.cs 中: 第 54 行
在 NewLife.Caching.Redis.Execute[TResult](String key, Func2 func, Boolean write) 在 NewLife.Caching.FullRedis.Execute[T](String key, Func2 func, Boolean write) 在 C:\Users\yangling\Downloads\NewLife.Redis-master\NewLife.Redis-master\NewLife.Redis\FullRedis.cs 中: 第 78 行
在 NewLife.Caching.FullRedis.Init(String config) 在 C:\Users\yangling\Downloads\NewLife.Redis-master\NewLife.Redis-master\NewLife.Redis\FullRedis.cs 中: 第 54 行
在 NewLife.Caching.Redis.Create(String server, Int32 db)
在 Test.Program.Test6() 在 C:\Users\yangling\Downloads\NewLife.Redis-master\NewLife.Redis-master\Test\Program.cs 中: 第 172 行
在 Test.Program.Main(String[] args) 在 C:\Users\yangling\Downloads\NewLife.Redis-master\NewLife.Redis-master\Test\Program.cs 中: 第 25 行

内部异常 1:
SocketException: 你的主机中的软件中止了一个已建立的连接。

源码运行报错

09:40:01.839 1 N - => OK
09:40:01.841 1 N - GET time
09:40:01.842 1 N - => 2019-11-29 09:40:01
2019-11-29 09:40:01
09:40:02.946 1 N - GET time
09:40:02.975 1 N - GET time
09:40:02.977 1 N - GET time
09:40:02.977 1 N - GET time
09:40:03.019 1 N - System.IO.InvalidDataException: 解码时找到无效数据。
在 NewLife.Caching.RedisClient.ReadPacket(Stream ms) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 343
在 NewLife.Caching.RedisClient.ReadBlock(Stream ms) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 302
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 210
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 253
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs: 行号 390
在 NewLife.Caching.RedisClient.Execute[TResult](String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 405
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<Get>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 406 在 NewLife.Caching.Redis.Execute[TResult](String key, Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 280
在 NewLife.Caching.FullRedis.Execute[T](String key, Func`2 func, Boolean write)
在 NewLife.Caching.Redis.Get[T](String key) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 406
在 Test.Program.Test1() 位置 D:\360安全浏览器下载\NewLife.Redis-master\Test\Program.cs:行号 55
在 Test.Program.Main(String[] args) 位置 D:\360安全浏览器下载\NewLife.Redis-master\Test\Program.cs:行号 25
09:40:06.832 7 Y T FullRedisPool.Release New=1 Release=0 Free=1 Busy=0 清除过期资源 0 项。总请求 12 次,命中 91.67%,平均 3,982.15us

List set 删除失败

image
image

1单个类删除都是没有问题的。
2 只要是嵌套类。删除都失败。

GetDictionary<T>(key).TryGetValue NullReferenceException: 未将对象引用设置到对象的实例

辅助类定义
private static RedisConfig redisConfig = RedisConfig.GetConfig();
private static Redis Core { get; set; }
public NewLifeRedis(int dbIndex = 0) {
if (Core == null) {
FullRedis.Register();
Core = Redis.Create(redisConfig.ServerConStr, dbIndex);
}
}
public T Hash_Get(string key, long dataKey) {
//try {
T t;
Core.GetDictionary(key).TryGetValue(dataKey.ToString(), out t);
return t;
//}
//catch (Exception ex) {
// return default(T);
//}
}
}
调用:
var m = cache.Hash_Get<Class.Dic_mdxx_cmpy>(key, mdid);
问题:
当hash集合key中不存在键为dataKey的值时,会报空指针错误

行 210: //try {
行 211: T t;
行 212: Core.GetDictionary(key).TryGetValue(dataKey.ToString(), out t);
行 213: return t;
行 214: //}

[NullReferenceException: 未将对象引用设置到对象的实例。]
NewLife.Caching.RedisHash`2.TryGetValue(TKey key, TValue& value) +125
Cacher.NewLifeRedis.Hash_Get(String key, Int64 dataKey) in d:\Project\2013\xxxxx\Cacher\NewLifeRedis.cs:212

所以需要 加上 try{}catch{} ,请问TryGetValue方法内是不是可以再处理下

这是直接使用命令行返回的值

172.16.1.144:0>HGET smls_md 487
null

开启管道提交(AutoPipeline)问题

default
目前我只要这个DB指定0 Get方法获取不到值。用Commit()方法提交都没有用.
把DB值设置大于0就没问问题。不知道是否我使用问题

Execute执行BLPOP、BRPOP命令提示System.ArgumentNullException

我是看代码没有实现BLPOP,所以自行继承了RedisQueue,新增了BLPOP、BRPOP命令的方法。
代码如下:

   public T BRPOP(TimeSpan timeout)
        {
            T result = Execute(rc => rc.Execute<T>("BRPOP", Key, timeout.Seconds), true);
            return result;
        }

执行此方法后,提示
System.ArgumentNullException:“Value cannot be null.
Arg_ParamName_Name”

申明:此非BUG 提几个功能建议

申明:此非BUG 提几个功能建议

  • 功能1:希望新增队列 Key对应里面的Items count查询支持
  • 功能2:希望新增对 集合Set 里面Items 有序集合分页查询支持!
    谢谢老大们.辛苦了.

建议将所有配置改成可自定义

如 XmlConfigFile,类。只需要给一个配置名:CoreConfig, 会自动IOC容器里找,没找到的话默认 使用路径: Config\Core.config。 这样就可以最大的保持代码的高自由了。

文档要更新一下啦

readmark文档要更新一下啦

顺便问下,目前NewLife.Redis驱动不支持 lua脚本吗

请问支持 rpoplpush 这个命令吗?

我想做个环状列表,在1,2,3,4,5几个元素内不停的循环,
tim 20181022173000
上面是我的代码,取出list中的第一个元素,然后删除掉第一个,再rpush把元素加到最后,本地测试没发现问题,但是在放到生产环境中发现有时在添加到列表结尾的时候会多添加重复的。。
让列表变成是 2,3,4,5,1,1 这样的。。
可能是我在添加到列表结尾的之前又有另一个线程进来取列表元素了,然后2个线程都把1加到了列表结尾了,自己查了下,找到rpoplpush 这个命令,不知道这个支持不支持。。。

List操作实体对象问题

您好,当操作对象时出现以下错误:
1.
var listUser = ic.GetList<User>("listAddUser"); for (int i = 0; i < 10; i++) { var user = new User { Name = "NewLife_"+i, CreateTime = DateTime.Now }; listUser.Add(user); }

11:10:54.484 1 N - System.Exception: 不能把字符串[11]转为类型[Test.Program+User] ---> System.InvalidCastException: 从“System.String”到“Test.Program+User”的强制转换无效。
在 System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
在 System.String.System.IConvertible.ToType(Type type, IFormatProvider provider)
在 System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
在 System.Convert.ChangeType(Object value, Type conversionType)
在 NewLife.Reflection.DefaultReflect.ChangeType(Object value, Type conversionType) 位置 D:\X\Src\NewLife.Core\Reflection\IReflect.cs:行号 635

public void Add(T item) => Execute(r => r.Execute<T>("RPUSH", Key, item), true);
当Execute改成 Execute 可以正确添加

抱歉, 不会添加图片,麻烦帮忙看下!

还有一个问题,第一次获取到数据列表时,如何批量添加到缓存List中,(我想添加到redis中也是list结构,也不是一个json字符串)

List 无法进行 Clear 清空

最新版本、清空list 无效。之前版本也出现这个情况。
清空代码:
var ic = Redis.Create("127.0.0.1:6379", 3);
ic.Log = XTrace.Log;
var list=(RedisList)ic.GetList("tetst_int");
List ls = new List();
for (int i = 0; i < 1000; i++)
{
ls.Add(i);
}
list.AddRange(ls);
list.Clear();
Console.WriteLine(list.Count);

怎样自定义json序列化

这个库确实很快,但是我发现使用utf8json这个库可以使json序列化性能提高5倍,所以我想换一个序列化库。

如果redis的value是二进制的话,换一个序列化库是很简单的

docker环境下NewLife.Net.NetUri.Parse解析问题

这2个地方能改成我下面数组分割的方式吗.
image
image
因为最近我的项目是多语言功能(中,英,泰)
使用的是ASP.NET Core 全球化和本地化(https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-2.2)
然后发现部署在docker下的时候。中文和英文请求NewLife.Redis是连接正常的没有问题.
当是泰语的时候发现
https://github.com/NewLifeX/X/blob/master/NewLife.Core/Net/NetUri.cs#L138
https://github.com/NewLifeX/X/blob/master/NewLife.Core/Net/NetUri.cs#L168
IndexOf和LastIndexOf返回的位置居然是0
image

源码性能压力测试报错了

09:43:33.637 1 N - 为NewLife.Caching.Redis自动注册NewLife.Caching.FullRedis
09:43:33.642 1 N - 目标服务器:127.0.0.1/3
09:43:33.643 1 N - FullRedis性能测试[随机],批大小[100],逻辑处理器 8 个
09:43:33.644 1 N -
09:43:33.645 1 N - 测试 100,000 项, 1 线程
09:43:33.831 1 N - System.IO.InvalidDataException: 解码时找到无效数据。
在 NewLife.Caching.RedisClient.ReadPacket(Stream ms) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 343
在 NewLife.Caching.RedisClient.ReadBlock(Stream ms) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 302
在 NewLife.Caching.RedisClient.GetResponse(Stream ns, Int32 count) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 210
在 NewLife.Caching.RedisClient.ExecuteCommand(String cmd, Packet[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 253
在 NewLife.Caching.RedisClient.Execute(String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs: 行号 390
在 NewLife.Caching.RedisClient.Execute[TResult](String cmd, Object[] args) 位置 D:\X\Src\NewLife.Core\Caching\RedisClient.cs:行号 405
在 NewLife.Caching.Redis.<>c__DisplayClass56_01.<Get>b__0(RedisClient rds) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 406 在 NewLife.Caching.Redis.Execute[TResult](String key, Func2 func, Boolean write) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 280
在 NewLife.Caching.FullRedis.Execute[T](String key, Func`2 func, Boolean write)
在 NewLife.Caching.Redis.Get[T](String key) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 406
在 NewLife.Caching.Cache.BenchOne(Int64 times, Int32 threads, Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 338
在 NewLife.Caching.Redis.BenchOne(Int64 times, Int32 threads, Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 598
在 NewLife.Caching.Cache.Bench(Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Cache.cs:行号 303
在 NewLife.Caching.Redis.Bench(Boolean rand, Int32 batch) 位置 D:\X\Src\NewLife.Core\Caching\Redis.cs:行号 586
在 Test.Program.Test2() 位置 D:\360安全浏览器下载\NewLife.Redis-master\Test\Program.cs:行号 94
在 Test.Program.Main(String[] args) 位置 D:\360安全浏览器下载\NewLife.Redis-master\Test\Program.cs:行号 26

并发情况下偶尔会出现套接字错误

通常每个套接字地址(协议/网络地址/端口)只允许使用一次 请问,这个是我在使用该库时的设置问题么,能帮我看下么,谢谢了,以下是我的基本设置代码

private string redisClient_Hosts;
        private string redisClient_Password;
        private FullRedis fullRedis;

        public NewLifeRedisHelper(int db=0)
        {
            XTrace.UseConsole();
            FullRedis.Register();
            redisClient_Hosts = ConfigHelper.GetConfigString("redisClient");
            redisClient_Password = ConfigHelper.GetConfigString("redisClient_Password");
            fullRedis = new FullRedis(redisClient_Hosts, redisClient_Password, db);
        }

        public bool HashDelete(string redisKey, string hashField)
        {
            var dic= fullRedis.GetDictionary<string>(redisKey);
            return dic.Remove(hashField);
        }

        public void HashSet<T>(string redisKey, string hashField, T redisValue)
        {
            var dic = fullRedis.GetDictionary<string>(redisKey);
            string json = JsonConvert.SerializeObject(redisValue);
            dic.Add(hashField, json);
        }
        public T HashGet<T>(string redisKey, string hashField)
        {
            var dic = fullRedis.GetDictionary<string>(redisKey);
            string value = dic[hashField];
            if (!string.IsNullOrEmpty(value))
            {
                return JsonConvert.DeserializeObject<T>(value);
            }
            else
            {
                return default(T);
            }
        }

使用使用set方法存储对象,出现异常问题。

具体情况描述:
使用NewLife.Redis,set方法,存储对象至redis中,发现存储至redis的这个对象中list数据类型的成员全部丢失了。

调用方法:_client.Set(key, value, expire);
RedisValue数据类型:

public class RoleMenuOperationRelationInRedisDto
{
   
    public long UserId { get; set; }
    public ApplyInRedisDto Apply { get; set; }

    public List<MenuInRedisDto> Menus = new List<MenuInRedisDto>();
    public List<OperationInRedisDto> Operations = new List<OperationInRedisDto>();
}

public class MenuInRedisDto
{
    public int ApplyId { get; set; }

    public string MenuUrl { get; set; }

    public string MenuName { get; set; }

    public string MenuDesc { get; set; }
}

public class OperationInRedisDto
{
    public string ActionUrl { get; set; }

    public string ActionName { get; set; }

    public string ActionDesc { get; set; }
}

更新NewLife.Core至8.0.6965.42074后 NewLife.Redis List添加时报错

var list = ic.GetList("list");
list.Add(DateTime.Now); //执行到这一句出现异常 8.0.6940.24647版本没有问题

23:49:03.349 1 N - System.MissingMethodException: 找不到方法:“System.DateTime NewLife.Caching.Redis.Execute(System.Func2<NewLife.Caching.RedisClient,System.DateTime>, Boolean)”。 在 NewLife.Caching.RedisBase.Execute[T](Func2 func, Boolean write)
在 NewLife.Caching.RedisList`1.Add(T item) 位置 D:\X\NewLife.Redis\NewLife.Redis\RedisList.cs:行号 39
在 NewLifeRedisDemo.Program.Main(String[] args) 位置

iis cpu会变得很高

Framework 4.6 web工 程ashx页面 Redis.Create("127.0.0.1:6379", 15)
会造成 iis cpu会变得很高降不下来

集群问题

我在NUGET上引用的不支持集群,但是在GITHUB下载后编译再引用进去就支持集群了,作者你还没有发布到NUGET上吧!

经常出现超时问题

运行时经常出现超时问题,导致页面无法访问。有时登录时候因超时,用户以为系统BUG。无法访问。有什么解决方案吗?

Redis Hash TryGetValue() 方法序列化时出错

{
"ID": 0,
"Userid": 27,
"ClickTime": "2020-03-09T21:16:17.88", <--出错行
"AdID": 39,
"AdAmount": 0.43,
"isGive": false,
"AdLinkUrl": "http://www.baidu.com",
"AdImgUrl": "/uploader/swiperPic/405621836.jpg"
},
{
"ID": 0,
"Userid": 27,
"ClickTime": "2020-03-09T21:16:25.9052764+08:00",
"AdID": 40,
"AdAmount": 0.41,
"isGive": false,
"AdLinkUrl": "http://www.baidu.com",
"AdImgUrl": "/uploader/swiperPic/1978468752.jpg"
}
}

我这个我存在redis里的数据,TryGetValue时,标记行发生错误,数组超限!!我把.88补成三位就正常了!!! 偶发性的问题,只要遇到2位的毫秒数就会出现这个问题

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.