net 4.0 Get Set怎么给sql 修改字段默认值设置默认值

C#中使用Redis学习二 在.NET4.5中使用redis hash操作 - 推酷
C#中使用Redis学习二 在.NET4.5中使用redis hash操作
上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis。本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表。并且会将封装的一些代码贴一下。在讲解的过程中,我打算结合redis操作命令一起叙述,算是作为对比吧。这样也能让读者清楚了 解,所分装的代码对应的redis的哪一些操作命令。
hash哈希表简介
这里仅仅是对哈希表作简单概念级介绍(摘自csdn),如果需要,自己去研究。
1、哈希表的概念
哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。
2、哈希表查找的时间复杂度
哈希表存储的是键值对,其查找的时间复杂度与元素数量多少无关,哈希表在查找元素时是通过计算哈希码值来定位元素的位置从而直接访问元素的,因此,哈希表查找的时间复杂度为O(1)。
如何在.NET4.0/4.5中安装redis组件?
在上一篇博文中,安装好的redis服务器端,要记得开启服务。然后再在.NET4.5(.NET4.0同理)项目中添加对redis操作的dll文件的引用。引用的步骤如下:
第一步:右键项目中的引用,选择“管理NuGet程序包”;
第二步:在搜索栏中输入“Redis client for the Redis NoSQL DB”,联机查找;如下图:
联机搜索结构中的第一个(如上图红色区域的组件,其版本号为 4.0.35)就是要安装的组件了。接下来我们就继续点击“安装”按钮,进入下载组件,等下载完成后,继续选择“接受条款”,然后继续安装。安装过程中会出现下图情况:
这句红色错误的意思是我们安装的ServiceStack.Interfaces 4.0.35版本与当前的.NET4.5框架中组件不兼容。这说明我们需要降低或是提高.NET版本解决此问题。我安装的是.NET4.5,所以我只能降 低版本。降低.NET版本的方法大家应该都知道的。我就在累述一次,希望大家不要嫌烦,毕竟还有新手在。方法:右键项目文件选择“属性”==》“应用程 序”==》“目标框架”,然后选择各个版本去尝试之前的两步操作,直到可以安装为止。
我试过了,.NET4.0也会遇到同样问题,直到.NET3.5才可以。当然此时安装的ServiceStack.Interfaces 版本是1.0.0.0 ,这样我们再把.NET版本恢复4.5即可使用了。,其实是变相在.NET4.0/4.5下使用redis客户端。不知道各位有没有遇到这样的问题,还是 直接拷贝别人的dll文件。当自己亲自去操作的时候,才会发现,其实就算是安装一个组件都可能会出现各种各样的问题。所以,要想了解全过程的话,我们还是 要身体力行的啊。好了,这样就说明在.NET4.5下安装好了redis client了。
实战:在项目中运用redis代码详解
这部分主要是讲解怎样连接到redis服务器。其中包含很多配置,我就用代码去说明一切了。配置文件如下代码:
&configSections&
&section name=&RedisConfig& type=&mon.Redis.RedisConfigInfo, RedisDemo&/&
&/configSections&
&RedisConfig WriteServerList=&127.0.0.1:6379& ReadServerList=&127.0.0.1:6379& MaxWritePoolSize=&60&   MaxReadPoolSize=&60& AutoStart=&true& LocalCacheTime=&180& RecordeLog=&false&/&
在这里对RedisConfig这段配置文件的属性作下说明。
WriteServerList:可写的Redis链接地址。
ReadServerList:可读的Redis链接地址。
MaxWritePoolSize:最大写链接数。
MaxReadPoolSize:最大读链接数。
AutoStart:自动重启。
LocalCacheTime:本地缓存到期时间,单位:秒。
RecordeLog:是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项。
RedisConfigInfo类是记录redis连接信息,此信息和配置文件中的RedisConfig相呼应。cs代码如下:(这段代码不是我自己写的,但是我觉得应该这样设计。所以,copy了一下别人的代码。)
1 using System.C
3 namespace mon.Redis
public sealed class RedisConfigInfo : ConfigurationSection
public static RedisConfigInfo GetConfig()
var section = (RedisConfigInfo)ConfigurationManager.GetSection(&RedisConfig&);
public static RedisConfigInfo GetConfig(string sectionName)
var section = (RedisConfigInfo)ConfigurationManager.GetSection(&RedisConfig&);
if (section == null)
throw new ConfigurationErrorsException(&Section & + sectionName + & is not found.&);
/// &summary&
/// 可写的Redis链接地址
/// &/summary&
[ConfigurationProperty(&WriteServerList&, IsRequired = false)]
public string WriteServerList
return (string)base[&WriteServerList&];
base[&WriteServerList&] =
/// &summary&
/// 可读的Redis链接地址
/// &/summary&
[ConfigurationProperty(&ReadServerList&, IsRequired = false)]
public string ReadServerList
return (string)base[&ReadServerList&];
base[&ReadServerList&] =
/// &summary&
/// 最大写链接数
/// &/summary&
[ConfigurationProperty(&MaxWritePoolSize&, IsRequired = false, DefaultValue = 5)]
public int MaxWritePoolSize
var maxWritePoolSize = (int)base[&MaxWritePoolSize&];
return maxWritePoolSize & 0 ? maxWritePoolSize : 5;
base[&MaxWritePoolSize&] =
/// &summary&
/// 最大读链接数
/// &/summary&
[ConfigurationProperty(&MaxReadPoolSize&, IsRequired = false, DefaultValue = 5)]
public int MaxReadPoolSize
var maxReadPoolSize = (int)base[&MaxReadPoolSize&];
return maxReadPoolSize & 0 ? maxReadPoolSize : 5;
base[&MaxReadPoolSize&] =
/// &summary&
/// 自动重启
/// &/summary&
[ConfigurationProperty(&AutoStart&, IsRequired = false, DefaultValue = true)]
public bool AutoStart
return (bool)base[&AutoStart&];
base[&AutoStart&] =
/// &summary&
/// 本地缓存到期时间,单位:秒
/// &/summary&
[ConfigurationProperty(&LocalCacheTime&, IsRequired = false, DefaultValue = 36000)]
public int LocalCacheTime
return (int)base[&LocalCacheTime&];
base[&LocalCacheTime&] =
/// &summary&
/// 是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项
/// &/summary&
[ConfigurationProperty(&RecordeLog&, IsRequired = false, DefaultValue = false)]
public bool RecordeLog
return (bool)base[&RecordeLog&];
base[&RecordeLog&] =
RedisConfigInfo 类
RedisManager类主要是创建链接池管理对象的。
1 using System.L
2 using ServiceStack.R
3 using System.Collections.G
5 namespace mon.Redis
public class RedisManager
/// &summary&
/// redis配置文件信息
/// &/summary&
private static readonly RedisConfigInfo RedisConfigInfo = RedisConfigInfo.GetConfig();
private static PooledRedisClientManager _
/// &summary&
/// 静态构造方法,初始化链接池管理对象
/// &/summary&
static RedisManager()
CreateManager();
/// &summary&
/// 创建链接池管理对象
/// &/summary&
private static void CreateManager()
var writeServerList = SplitString(RedisConfigInfo.WriteServerList, &,&);
var readServerList = SplitString(RedisConfigInfo.ReadServerList, &,&);
_prcm = new PooledRedisClientManager(readServerList, writeServerList,
new RedisClientManagerConfig
MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize,
MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize,
AutoStart = RedisConfigInfo.AutoStart,
private static IEnumerable&string& SplitString(string strSource, string split)
return strSource.Split(split.ToArray());
/// &summary&
/// 客户端缓存操作对象
/// &/summary&
public static IRedisClient GetClient()
if (_prcm == null)
CreateManager();
return _prcm.GetClient();
RedisManager 类
实战:封装redis对哈希表操作的代码
实战中,我们操作redis最好还是要封装提炼一下的。提炼的目的是为了以后代码的重用。代码封装重用的好处我就不多说了,这个不是本次主要讨论的。下面是我所用项目中分装的代码,其中有的部分我修改过了,贴出来让大家看下。个人感觉不错:^_^
RedisOperatorBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存。
2 using ServiceStack.R
4 namespace mon.Redis.RedisOperator
public abstract class RedisOperatorBase : IDisposable
protected IRedisClient Redis { get; private set; }
private bool _disposed = false;
protected RedisOperatorBase()
Redis = RedisManager.GetClient();
protected virtual void Dispose(bool disposing)
if (!this._disposed)
if (disposing)
Redis.Dispose();
Redis = null;
this._disposed = true;
public void Dispose()
Dispose(true);
GC.SuppressFinalize(this);
/// &summary&
/// 保存数据DB文件到硬盘
/// &/summary&
public void Save()
Redis.Save();
/// &summary&
/// 异步保存数据DB文件到硬盘
/// &/summary&
public void SaveAsync()
Redis.SaveAsync();
RedisOperatorBase 类
HashOperator类,是操作哈希表类。继承自RedisOperatorBase类,代码中有详细注释,理解起来一目了然。
2 using System.Collections.G
3 using ServiceStack.T
5 namespace mon.Redis.RedisOperator
public class HashOperator : RedisOperatorBase
public HashOperator() : base() { }
/// &summary&
/// 判断某个数据是否已经被缓存
/// &/summary&
public bool Exist&T&(string hashId, string key)
return Redis.HashContainsEntry(hashId, key);
/// &summary&
/// 存储数据到hash表
/// &/summary&
public bool Set&T&(string hashId, string key, T t)
var value = JsonSerializer.SerializeToString&T&(t);
return Redis.SetEntryInHash(hashId, key, value);
/// &summary&
/// 移除hash中的某值
/// &/summary&
public bool Remove(string hashId, string key)
return Redis.RemoveEntryFromHash(hashId, key);
/// &summary&
/// 移除整个hash
/// &/summary&
public bool Remove(string key)
return Redis.Remove(key);
/// &summary&
/// 从hash表获取数据
/// &/summary&
public T Get&T&(string hashId, string key)
string value = Redis.GetValueFromHash(hashId, key);
return JsonSerializer.DeserializeFromString&T&(value);
/// &summary&
/// 获取整个hash的数据
/// &/summary&
public List&T& GetAll&T&(string hashId)
var result = new List&T&();
var list = Redis.GetHashValues(hashId);
if (list != null && list.Count & 0)
list.ForEach(x =&
var value = JsonSerializer.DeserializeFromString&T&(x);
result.Add(value);
/// &summary&
/// 设置缓存过期
/// &/summary&
public void SetExpire(string key, DateTime datetime)
Redis.ExpireEntryAt(key, datetime);
HashOperator 类
实战:redis
hash哈希表的增删改查
本来打算这部分把我demo中的操作代码贴出来的,想想,全是代码,看着都烦,还不如讲解一下这部分的操作对应于redis客户端操作命令呢。还有一个原因 就是,上面都已经对hash操作进行了分装,其实如果贴代码也就是调用封装的代码罢了。感觉没啥意思,相信大家都会调用。没啥好讲的。那么接下来我就说 下,上面封装的代码与客户端操作的对应关系。
Exist&T&方法:对应于redis操作的hexists。返回字段是否是 key 指定的哈希集中存在的字段。true:存在& false:不存在
Set&T&方法:对应于redis操作的hget。设置 key 指定的哈希集中指定字段的值。如果 key 指定的哈希集不存在,会创建一个新的哈希集并与 key 关联。如果字段在哈希集中存在,它将被重写。
Remove(string hashId, string key)方法:对应于redis操作的hdel。从 key 指定的哈希集中移除指定的域。在哈希集中不存在的域将被忽略。如果 key 指定的哈希集不存在,它将被认为是一个空的哈希集,该命令将返回false。
Remove(string key)方法:对应于redis操作的del。直接删除key。
Get&T&方法:对应于redis操作的hget。返回该字段所关联的值。
GetAll&T&方法:对应于redis操作的hvals。获取哈希集中的值的列表,当 key 指定的哈希集不存在时返回空列表。
SetExpire方法:对应于redis操作的expire。设置缓存过期。
redis操作很多很多,其实说是封装,也只是封装其中的一些常用操作。有兴趣的朋友可以用反编译工具去看下源码,就可以知道所有操作对应于redis 操作命令了。其实我个人觉得,使用C#操作redis只是语言需要,我们还是要学习它的客户端操作的。开发中,很多时候调试很慢的,我们可以直接通过 redis客户端操作去找,这样效率会更高一点。而且当操作命令熟练的时候,你会发现,客户端操作比调试操作快很多很多。所以,建议大家多多使用客户端操 作。刚开始会感觉很多需要记,熟能生巧,多操作,自然会很好。
在redis学习过程中,希望大神们能不吝赐教。同时也希望和我一样,在研究路上的同仁,有好的见解或是资料能跟小弟分享下,大家一起探讨学习下。我的QQ联系方式:&随时联系,备注注明园友就好。大家秉承共同探讨、共同进步!如有转载,请注明出处,谢谢!^_^
还有,如果大家想要源代码的,可以说下,我会把自己用的放到网盘中或者通过QQ等其他方式发给需要的你。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示新手求解释下关于c#的属性_百度知道
新手求解释下关于c#的属性
书上说作用是封装,感觉完全可以用方法来封装?求给个简单解释吧不太明白呢,还有set里面总有个value,希望大家帮我解释下,value是干啥的呀
提问者采纳
那? :_xx=value(就是 &#39:A = &#39,这可得去问微软为什么要搞这个; }}你在使用时;总之;publict String A{set {
_xx= value。 至于为什么要这样:private String _xx,传递来的值, 用就是属性是方法的一种;12'12'),我建议别管这个,你就认为它是一种特殊的方法;D不过;。比如。value 就是你在赋值的时候
提问者评价
其他类似问题
为您推荐:
其他4条回答
属性的访问器包含与获取(读取或计算)或设置(写)属性有关的可执行语句。访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。声明采用下列形式之一:
get 访问器
get 访问器体与方法体相似。它必须返回属性类型的值。执行 get 访问器相当于读取字段的值。以下是返回私有字段 name 的值的 get 访问器:
// the name field
public string Name
// the Name property
当引用属性时,除非该属性为赋值目标,否则将调用 get 访问器读取该属性的值。例如:
Employee e1 = new Employee();
Console.Write(e1.Name);
// The get accessor is invoked here
get 访问器必须...
你说的是get set访问器是吧。封装后这样可以写入和读取
属性看似是字段,实际上不是字段,他可以进行非法值控制,可是设置字段值的只读、只写属性。value是个关键字用来代表用户调用该属性时赋值过来的值
属性是用来封装字段的,字段是通过属性来赋值的。例如:private int age;public int Age{
get{return age}
set{age=value}}value可以看做是一个隐含的输入参数 value=Age
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于C#的属性问题_百度知道
关于C#的属性问题
&#47.FirstN &#47,不是个人习惯),3}}3个地方分别是怎么命名(规范?
}还有,然后就有疑问了; } }
public string LastName
{ get { return mLastN
public string FirstName
{ get { return mFirstName,原来函数也可以这么写(我一直以为只用在接口中)public string FirstName{ get。但实际在类中使用很爽,N}set{name=}}public void test(){string name=/ } set { mFirstName = }public string LastName { get.FirstName?_此处使用this今天才发现;&#47,mName,既然可以这么用那为什么还要采用这种
string mFirstN1public string Name
/ }因为我以为GET.empty.mFirstName,正常情况下这几个地方应该怎么命名public class A{2{get{// } set { mLastName = value,和SET为空的话就只能用于接口; set,还是 } }难道仅仅是因为这样使用时能在get和set里面做更多的事吗,
string mLastName?那如果这样的话假设下面还有一个函数
public string GetString()
提问者采纳
FirstName,简化了属性的写法。也可以用get和set控制访问器。所以,一般习惯是除首字母外单词首字母大写或单词首字母大写,如private string _ } &#47。当然,用get和set的理由不仅在于此public string FirstName{ get,进行一些运算或者直接写方法也可以;} &#47,则使用另外一种方法,这样就相当于一个访问器,看个人习惯;这个是设置时,比如 A;set,实际上是对A的值进行增加。我们看这个 public string FirstName { get { return mFirstN&#47,一般是公用和私有共存的情况私有的用下划线开始,用方法时用第二种,也没有什么标准,当你的属性字段和私有字段相同,返回的值,通常将属性和私有变量分开来写,如A; } 这种方法是在;这个是当获取时;set.FirstN /我们设置XX.FirstName=1时赋值给mFirstName}在早期版本中。推荐用这种方法,比如public int A{set { a+=publist string name{get.A时;/这个当然是}至于大小写,就是只允许设置或者只允许读取这样。return
this,就是外问设置和访问的时候用FirstName。关于命名规范;}即可,内部使用的时候用私有的mFirstName,且在设置或获取时不进行处理时,而在于当请求或返回的值并不是该字段或者需要进行其它处理时;&#47。这就是可以在get或者set 的时候,但要是其它时候,直接用 {get。如firstNameFirstName不过我个人习惯一般在定义变时是用第一种.net 3以后支持的; }
&#47.FirstName 获取到mFirstNameset { mFirstName =&#47
有在前面加小m的规范吗?我遇到有人在私有变量前加&m&的,还有如果类的私有变量加“_&,那么在过程里面的变量前面加什么呢?平时类的私有变量和过程(方法,函数)的内部变量怎么区分开呢?还有就是过程(方法、函数,在类的内部)内部调用类的数据时,是偏向用属性还是私有变量(我好规范我的程序写法)?
其他类似问题
为您推荐:
其他3条回答
0以后才支持的写法public string FirstName{ }这种写法貌似是c# 2,你翻看以前的
定义:同一类型的一组变量
元素:数组中包含的变量称为数组的元素.
注意:所有元素必须具有相同的数据类型.
声明格式: 数据类型[] 名称;
如: int [] myarray=new int[N]
T:基本数据类型,初始化0;
N:元素的个数
N可以省略;
可以声明数组的同时就创建数组。
例:decimal[] myexpense=new decimal[30];
等价于:decimal[] myexpense;
Myexpense= new decimal[30];
声明数组并不创建它们,必须对它进行实例化.在C#中,使用new运算符创建数组对象.并将数组元素初始化为它们的默认值。
下标:索引 下标必须是整型常数或整型表达式
数组名〔下标〕 例:int a=myarray[3];
数组初始化
一.格式: 数据类型〔〕 标识符=new 数据类型〔〕{ , , };
例如:string[] month...
你牛X,风马牛不相及的东西。
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 mysql 字段默认值 的文章

 

随机推荐