c#操作缓存例如redis比较推荐ServiceStack

  在redis中运用key-value存储数据,但是遇到结构体该如何处理,是类可通过get<type>(key)获得,那struct呢,

  定义结构:

1 public struct Person{
2         public int id;
3         public double lon;
4         public double lat;
5     }

View Code

  redis中设置值:

1 Random rand=new Random();
2 Person info=new Person();
3 for(int i=0;i<3;i++)
4 {
5     info.id=id+i;
6     info.lon=rand.NextDouble();
7     info.lat=rand.NextDouble();
8     client.Set<string>(info.id.ToString(),info.ToString());
9 }

View Code

  运行查看出现异常:

  

  为什么在使用结构体时候会出现异常,而class确可以。

  涉及到.net中对结构体与class直接区别,结构体是一种值类型非引用类型

  C#的所有值类型均隐式派生自System.ValueType:

      结构体:struct(直接派生于System.ValueType)

  难道ServiceStack只能存储不能获取struct么?

  非也,进入ServiceStack text项目:https://github.com/ServiceStack/ServiceStack.Text

  会发现如下一段内容,在项目中如何处理值类型与结构体:

C# Structs and Value TypesBecause a C# struct is a value type whose public properties are normally just convenience properties around a single scalar value, they are ignored instead the TStruct.ToString() method is used to serialize and either the static TStruct.ParseJson()/static TStruct.ParseJsv() methods or new TStruct(string) constructor will be used to deserialize the value type if it exists.

存在TStruct.ToString()及static TStruct.ParseJson()/static TStruct.ParseJsv() 可以实现反序列化。

 可以通过重写ToString()方法及新增static ParseJson()等实现。

修改结构体如下:

 1 public struct Person{
 2         public int id;
 3         public double lon;
 4         public double lat;
 5
 6         public override string ToString()
 7         {
 8             return string.Format("[{0}, {1}, {2}]", id, lon, lat);
 9         }
10
11         public static Person Parse(string json){
12             var arr=json.Trim('[',']').Split(',');
13             return new Person{ id=int.Parse(arr[0]),lon=double.Parse(arr[1]),lat=double.Parse(arr[2])};
14         }
15     }

View Code

 之前异常部分代码:

  

结构体是否可以转化呢?

转载于:https://www.cnblogs.com/MR520/p/4191885.html

Redis中struct运用相关推荐

  1. 函数指针--Nginx和Redis中两种回调函数写法

    1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...

  2. 图解|深入理解跳表及其在Redis中的应用

    跳跃链表及其应用是非常热门的问题,深入了解其中奥秘大有裨益,不吹了,快开始品尝这美味的知识吧! 跳跃链表的基本概念 初识跳表 跳跃列表是一种数据结构.它允许快速查询一个有序连续元素的数据链表.跳跃列表 ...

  3. Redis中五大数据结构的底层实现

    来自:DBAplus社群 作者介绍 田兆壮,新炬网络开发工程师.具备扎实的Java.Scala开发经验,熟练使用Python和Shell等脚本语言:具备前后端开发能力,熟练使用关系型数据库和非关系型数 ...

  4. Redis 中的集合类型是怎么实现的?

    本文是<Redis内部数据结构详解>系列的第七篇.在本文中,我们围绕一个Redis的内部数据结构--intset展开讨论. Redis里面使用intset是为了实现集合(set)这种对外的 ...

  5. PHP 如何在Redis中实现事物(事物提交和事物回滚)

    讲了这么多Redis的使用,今天我们来讲下Redis的事物 1.首先,我们来看一下Redis中事物相关的指令, 命令原型       命令描述 MULTI   用于标记事务的开始,其后执行的命令都将被 ...

  6. Redis中的过期策略

    Reids 所有的数据都是存储在内存中的,在某些情况下需要对占用的内存空间进行回收.内存回收主要分为两类,一类是key 过期,一类是内存使用达到上限(max_memory)触发内存淘汰. 过期策略 要 ...

  7. Redis中的zset 存储结构(实现)原理

    同时满足以下条件时使用ziplist 编码: 元素数量小于128 个 所有member 的长度都小于64 字节 在ziplist 的内部,按照score 排序递增来存储.插入的时候要移动之后的数据. ...

  8. 总结redis中对象的类型与编码

    1. 简言 redis中使用对象来表示数据库中的键和值 每当我们在redis的数据库中新建立一个键值对时,redis会至少创建两个对象,一个对象用作键,一个对象用作值,其中键的对象一定是字符串对象,值 ...

  9. 对 Redis 中的有序集合SortedSet的理解

    本篇说一下Redis中的 有序集合类型,曾几何时,我们想把所有数据存到内存中的 数据结构 中,但为了多机器共享内存,不得不将这块内存包装成wcf单独部署,同时还要考虑怎么序列化,烦心事太多太多...后 ...

最新文章

  1. OpenStack-MitakaCentos7.2双节点搭建--(二)Keystone(认证服务)
  2. Shouldn't CSRs automatically add default version?
  3. MongoDB的地理位置索引
  4. 用jquery + iframe實現iframe子頁面加載完前的緩沖效果
  5. php httputils,Android 自定义网络加载工具类 HttpURLConnectionUtils
  6. vue写一个简单的警察抓小偷的打字游戏
  7. 2022Adobe全套资源|PS PR AE
  8. Vue.2Vue.3项目引入Element-UI教程踩坑
  9. C++ vector 初始化大小
  10. 有哪些文艺而有韵味的句子?
  11. 用LSTM自动生成古诗
  12. 微信PC(windows微信)HOOK
  13. 音乐机器人特奥_意大利机器人特奥·特罗尼科征服中国观众 Il Robot italiano conquista la Cina...
  14. 名帖109 鲜于枢 小楷《老子道德经卷》
  15. mixin(公共样式定义)
  16. 【菜鸟窝阿里算法专家Chris】当机会出现时,多一种武器,就多一分机会。
  17. 黑马程序员--java基础--异常(二)
  18. 一键清空朋友圈软件_“一键清空朋友圈”服务走红 收费1元至30元 你清了吗?...
  19. c语言学生成绩统计问题分析,学生成绩统计c语言教程分析.doc
  20. python pygame实战《飞船大战外星人》

热门文章

  1. linux 写地址 hex,你怎么理解Hex文件? (扩展地址记录)
  2. bp算法运行太慢_神经网络,BP算法的理解与推导
  3. make clean
  4. android 查找所有dialog_android 布局文件layout分组的简单使用
  5. HDU-Keywords Search(AC自动机)
  6. 神经网络-反向传播算法
  7. mybatis,mysql,datasource,dpcb连接池的关系
  8. 执行import xlrd,报错ModuleNotFoundError: No module named 'xlrd'
  9. Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL
  10. 从零开始实现一个简易的Java MVC框架(九)--优化MVC代码