Redis中struct运用
c#操作缓存例如redis比较推荐ServiceStack
在redis中运用key-value存储数据,但是遇到结构体该如何处理,是类可通过get<type>(key)获得,那struct呢,
定义结构:
![](/assets/blank.gif)
![](/assets/blank.gif)
1 public struct Person{ 2 public int id; 3 public double lon; 4 public double lat; 5 }
View Code
redis中设置值:
![](/assets/blank.gif)
![](/assets/blank.gif)
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()等实现。
修改结构体如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
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运用相关推荐
- 函数指针--Nginx和Redis中两种回调函数写法
1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...
- 图解|深入理解跳表及其在Redis中的应用
跳跃链表及其应用是非常热门的问题,深入了解其中奥秘大有裨益,不吹了,快开始品尝这美味的知识吧! 跳跃链表的基本概念 初识跳表 跳跃列表是一种数据结构.它允许快速查询一个有序连续元素的数据链表.跳跃列表 ...
- Redis中五大数据结构的底层实现
来自:DBAplus社群 作者介绍 田兆壮,新炬网络开发工程师.具备扎实的Java.Scala开发经验,熟练使用Python和Shell等脚本语言:具备前后端开发能力,熟练使用关系型数据库和非关系型数 ...
- Redis 中的集合类型是怎么实现的?
本文是<Redis内部数据结构详解>系列的第七篇.在本文中,我们围绕一个Redis的内部数据结构--intset展开讨论. Redis里面使用intset是为了实现集合(set)这种对外的 ...
- PHP 如何在Redis中实现事物(事物提交和事物回滚)
讲了这么多Redis的使用,今天我们来讲下Redis的事物 1.首先,我们来看一下Redis中事物相关的指令, 命令原型 命令描述 MULTI 用于标记事务的开始,其后执行的命令都将被 ...
- Redis中的过期策略
Reids 所有的数据都是存储在内存中的,在某些情况下需要对占用的内存空间进行回收.内存回收主要分为两类,一类是key 过期,一类是内存使用达到上限(max_memory)触发内存淘汰. 过期策略 要 ...
- Redis中的zset 存储结构(实现)原理
同时满足以下条件时使用ziplist 编码: 元素数量小于128 个 所有member 的长度都小于64 字节 在ziplist 的内部,按照score 排序递增来存储.插入的时候要移动之后的数据. ...
- 总结redis中对象的类型与编码
1. 简言 redis中使用对象来表示数据库中的键和值 每当我们在redis的数据库中新建立一个键值对时,redis会至少创建两个对象,一个对象用作键,一个对象用作值,其中键的对象一定是字符串对象,值 ...
- 对 Redis 中的有序集合SortedSet的理解
本篇说一下Redis中的 有序集合类型,曾几何时,我们想把所有数据存到内存中的 数据结构 中,但为了多机器共享内存,不得不将这块内存包装成wcf单独部署,同时还要考虑怎么序列化,烦心事太多太多...后 ...
最新文章
- OpenStack-MitakaCentos7.2双节点搭建--(二)Keystone(认证服务)
- Shouldn't CSRs automatically add default version?
- MongoDB的地理位置索引
- 用jquery + iframe實現iframe子頁面加載完前的緩沖效果
- php httputils,Android 自定义网络加载工具类 HttpURLConnectionUtils
- vue写一个简单的警察抓小偷的打字游戏
- 2022Adobe全套资源|PS PR AE
- Vue.2Vue.3项目引入Element-UI教程踩坑
- C++ vector 初始化大小
- 有哪些文艺而有韵味的句子?
- 用LSTM自动生成古诗
- 微信PC(windows微信)HOOK
- 音乐机器人特奥_意大利机器人特奥·特罗尼科征服中国观众 Il Robot italiano conquista la Cina...
- 名帖109 鲜于枢 小楷《老子道德经卷》
- mixin(公共样式定义)
- 【菜鸟窝阿里算法专家Chris】当机会出现时,多一种武器,就多一分机会。
- 黑马程序员--java基础--异常(二)
- 一键清空朋友圈软件_“一键清空朋友圈”服务走红 收费1元至30元 你清了吗?...
- c语言学生成绩统计问题分析,学生成绩统计c语言教程分析.doc
- python pygame实战《飞船大战外星人》
热门文章
- linux 写地址 hex,你怎么理解Hex文件? (扩展地址记录)
- bp算法运行太慢_神经网络,BP算法的理解与推导
- make clean
- android 查找所有dialog_android 布局文件layout分组的简单使用
- HDU-Keywords Search(AC自动机)
- 神经网络-反向传播算法
- mybatis,mysql,datasource,dpcb连接池的关系
- 执行import xlrd,报错ModuleNotFoundError: No module named 'xlrd'
- Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL
- 从零开始实现一个简易的Java MVC框架(九)--优化MVC代码