宝哥软件园

再存储库共享和纠错

编辑:宝哥软件园 来源:互联网 时间:2021-09-06

首先,写在前面

工作毕业后,今天终于可以回家了。回顾这半年的所作所为,总觉得自己还停留在这样的基础水平。在解决各种问题的过程中,我的创新思路较少,更多的是依靠搜索。我不想总结16年,但希望多学习我喜欢的技术,多看开源代码,多学习设计思路和代码思路,更新我这两年对代码的理解。

这次分享主要是为了弥补我之前RedisRepository的不足。

半年前,由于我对StackExchange的阅读不足。Redis文档,我共享的RedisRepository是错误的。以下是我的主要错误:

错误1,ConnectionMultiplexer Redis连接对象没有实例化,我天真地认为锁定singleton对象会限制Redis在并发情况下的性能。

错误2,在主从情况下,我以为当手动切换发生时,我们应该订阅切换事件,在事件发生后动态改变连接对象指向的Endpoint。

当我再次仔细阅读这份文件时,我意识到我的错误,这是一个迟到的修正案。但是我的自用库还是有很多不足,所以真的需要老司机的指导和建议。

更正1、Redis连接对象的创建非常昂贵,单一情况下锁定不会影响Redis的性能,因为网络请求时连接对象没有等待。

更正2:当Redis是主从时,StackExchange。哨兵切换主从关系后,Redis会为我们识别新的主从,我们不需要做任何事情。

到目前为止,我有两个问题。

问题1,看完文件没有确定的结果。作为主从读写分离,当我们在Endpoint Collection集合中添加多个节点时,会自动进行读写分离吗?还是需要指定CommandFlags。读取命令的方法中的PreferSlave?我觉得是后者。所以我在所有的阅读方法中都指定了PreferSlave。老司机怎么说?

问题2:我使用luaScript。准备(lua)然后加载出来。它在执行Lua和LuaScript时总是没有效果。GetCachedScriptCount()为0。但是,直接使用ScriptEvaluateAsync很容易。如果老司机有好的例子,希望老司机能给点指导或者分享一下。

二.代码结构仅供参考

结构大概是这样的。RedisAsyncHelper下的所有类都是分部类,它们的类名是RedisHelper。他们共同实现了IRedisHelper的接口,并留下了详细的评论。

同步和异步版本的目录结构是相同的。

三.准备阶段

CommonHelper中的两个帮助类:

RedisInnerTypeHelper.cs

使用StackExchange。Redis使用系统。集合。通用;使用系统。Linq名称空间幻想。RedisRepository.CommonHelper{内部类redinnertypehelper { public static ListT RedisValuesToGenericListT(RedisValue[]redisValues){ var result=new ListT();redisValues。ToList()。ForEach(r=结果。添加(SerializeHelper。反序列化(r)));返回结果;} public static RedisValue[]genericlistoredivaluest(ListT值){ var redisValues=new ListRedisValue();价值观。ForEach(v=redisValues。添加(SerializeHelper。序列化(值)));返回redisValues。ToArray();} public static RedisKey[]GenericListToRedisKeys(Liststring key){ var redisKeys=new listerdiskey();钥匙。ForEach(k=redisKeys。添加(k));返回redisKeys。ToArray();} }}SerializeHelper.cs

使用系统。IO;使用系统。运行时.序列化.格式化

更多资讯
游戏推荐
更多+