使用redis组件如下,至于为什么使用3.9版本,是因为4.0开始商业了,限制了次数

ServiceStack.Common" version="3.9.70"
ServiceStack.Redis" version="3.9.71"
ServiceStack.Text" version="3.9.71"

接口

 public interface ICache
{
#region Key-Value
/// <summary>
/// 读取缓存
/// </summary>
/// <param name="cacheKey">键</param>
/// <returns></returns>
T Read<T>(string cacheKey, long dbId = ) where T : class;
/// <summary>
/// 写入缓存
/// </summary>
/// <param name="value">对象数据</param>
/// <param name="cacheKey">键</param>
void Write<T>(string cacheKey, T value, long dbId = ) where T : class;
/// <summary>
/// 写入缓存
/// </summary>
/// <param name="value">对象数据</param>
/// <param name="cacheKey">键</param>
/// <param name="expireTime">到期时间</param>
void Write<T>(string cacheKey, T value, DateTime expireTime, long dbId = ) where T : class;
/// <summary>
/// 写入缓存
/// </summary>
/// <param name="value">对象数据</param>
/// <param name="cacheKey">键</param>
/// <param name="expireTime">到期时间</param>
void Write<T>(string cacheKey, T value, TimeSpan timeSpan, long dbId = ) where T : class;
/// <summary>
/// 移除指定数据缓存
/// </summary>
/// <param name="cacheKey">键</param>
void Remove(string cacheKey, long dbId = );
/// <summary>
/// 移除全部缓存
/// </summary>
void RemoveAll(long dbId = );
#endregion
}

配置类

public sealed class RedisConfigInfo : ConfigurationSection
{
/// <summary>
/// 获取配置信息
/// </summary>
/// <returns></returns>
public static RedisConfigInfo GetConfig()
{
return GetConfig("redisconfig");
}
/// <summary>
/// 获取配置信息
/// </summary>
/// <param name="sectionName">xml节点名称</param>
/// <returns></returns>
public static RedisConfigInfo GetConfig(string sectionName)
{
RedisConfigInfo section = (RedisConfigInfo)ConfigurationManager.GetSection(sectionName);
if (section == null)
throw new ConfigurationErrorsException("Section " + sectionName + " is not found.");
return section;
}
/// <summary>
/// 可写的Redis链接地址
/// </summary>
[ConfigurationProperty("WriteServerList", IsRequired = false)]
public string WriteServerList
{
get
{
return (string)base["WriteServerList"];
}
set
{
base["WriteServerList"] = value;
}
}
/// <summary>
/// 可读的Redis链接地址
/// </summary>
[ConfigurationProperty("ReadServerList", IsRequired = false)]
public string ReadServerList
{
get
{
return (string)base["ReadServerList"];
}
set
{
base["ReadServerList"] = value;
}
}
/// <summary>
/// 最大写链接数
/// </summary>
[ConfigurationProperty("MaxWritePoolSize", IsRequired = false, DefaultValue = )]
public int MaxWritePoolSize
{
get
{
int _maxWritePoolSize = (int)base["MaxWritePoolSize"];
return _maxWritePoolSize > ? _maxWritePoolSize : ;
}
set
{
base["MaxWritePoolSize"] = value;
}
}
/// <summary>
/// 最大读链接数
/// </summary>
[ConfigurationProperty("MaxReadPoolSize", IsRequired = false, DefaultValue = )]
public int MaxReadPoolSize
{
get
{
int _maxReadPoolSize = (int)base["MaxReadPoolSize"];
return _maxReadPoolSize > ? _maxReadPoolSize : ;
}
set
{
base["MaxReadPoolSize"] = value;
}
}
/// <summary>
/// 自动重启
/// </summary>
[ConfigurationProperty("AutoStart", IsRequired = false, DefaultValue = true)]
public bool AutoStart
{
get
{
return (bool)base["AutoStart"];
}
set
{
base["AutoStart"] = value;
}
}
/// <summary>
/// 本地缓存到期时间,单位:秒
/// </summary>
[ConfigurationProperty("LocalCacheTime", IsRequired = false, DefaultValue = )]
public int LocalCacheTime
{
get
{
return (int)base["LocalCacheTime"];
}
set
{
base["LocalCacheTime"] = value;
}
}
/// <summary>
/// 是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项
/// </summary>
[ConfigurationProperty("RecordeLog", IsRequired = false, DefaultValue = false)]
public bool RecordeLog
{
get
{
return (bool)base["RecordeLog"];
}
set
{
base["RecordeLog"] = value;
}
}
/// <summary>
/// 默认开始db
/// </summary>
[ConfigurationProperty("DefaultDb", IsRequired = false)]
public long DefaultDb
{
get
{
return (long)base["DefaultDb"];
}
set
{
base["DefaultDb"] = value;
}
} }

处理类

 public class RedisCache
{
#region -- 连接信息 --
/// <summary>
/// redis配置文件信息
/// </summary>
private static RedisConfigInfo redisConfigInfo = RedisConfigInfo.GetConfig();
/// <summary>
/// 创建链接池管理对象
/// </summary>
private static PooledRedisClientManager CreateManager(long dbId)
{
string[] writeServerList = SplitString(redisConfigInfo.WriteServerList, ",");
string[] readServerList = SplitString(redisConfigInfo.ReadServerList, ","); return new PooledRedisClientManager(readServerList, writeServerList,
new RedisClientManagerConfig
{
MaxWritePoolSize = redisConfigInfo.MaxWritePoolSize,
MaxReadPoolSize = redisConfigInfo.MaxReadPoolSize,
AutoStart = redisConfigInfo.AutoStart,
DefaultDb = dbId
});
}
/// <summary>
/// 字串转数组
/// </summary>
/// <param name="strSource">字串</param>
/// <param name="split">分隔符</param>
/// <returns></returns>
private static string[] SplitString(string strSource, string split)
{
return strSource.Split(split.ToArray());
}
/// <summary>
/// 获取redis客户端根据库ID号
/// </summary>
/// <param name="dbId">redis库Id</param>
/// <returns></returns>
private static PooledRedisClientManager GetClientManager(long dbId)
{
return CreateManager(dbId);
} #endregion #region -- Item --
/// <summary>
/// 设置单体
/// </summary>
/// <typeparam name="T">值类型</typeparam>
/// <param name="key">键值</param>
/// <param name="t">值</param>
/// <param name="dbId">库Id</param>
/// <returns></returns>
public static bool Set<T>(string key, T t, long dbId = )
{
var clientManager = GetClientManager(dbId);
IRedisClient redis = clientManager.GetClient();
var res = redis.Set<T>(key, t);
clientManager.DisposeClient((RedisNativeClient)redis);
redis.Dispose();
clientManager.Dispose();
return res;
}
/// <summary>
/// 设置单体
/// </summary>
/// <typeparam name="T">值类型</typeparam>
/// <param name="key">键值</param>
/// <param name="t">值</param>
/// <param name="timeSpan">保存时间</param>
/// <param name="dbId">库Id</param>
/// <returns></returns>
public static bool Set<T>(string key, T t, TimeSpan timeSpan, long dbId = )
{
var clientManager = GetClientManager(dbId);
IRedisClient redis = clientManager.GetClient();
var res = redis.Set<T>(key, t, timeSpan);
clientManager.DisposeClient((RedisNativeClient)redis);
redis.Dispose();
clientManager.Dispose();
return res;
}
/// <summary>
/// 设置单体
/// </summary>
/// <typeparam name="T">值类型</typeparam>
/// <param name="key">键值</param>
/// <param name="t">值</param>
/// <param name="dateTime">过期时间</param>
/// <returns></returns>
public static bool Set<T>(string key, T t, DateTime dateTime, long dbId = )
{
var clientManager = GetClientManager(dbId);
IRedisClient redis = clientManager.GetClient();
var res = redis.Set<T>(key, t, dateTime);
clientManager.DisposeClient((RedisNativeClient)redis);
redis.Dispose();
clientManager.Dispose();
return res;
} /// <summary>
/// 获取单体
/// </summary>
/// <typeparam name="T">值类型</typeparam>
/// <param name="key">键值</param>
/// <returns></returns>
public static T Get<T>(string key, long dbId = ) where T : class
{
var clientManager = GetClientManager(dbId);
IRedisClient redis = clientManager.GetClient();
var res = redis.Get<T>(key);
clientManager.DisposeClient((RedisNativeClient)redis);
redis.Dispose();
clientManager.Dispose();
return res;
}
/// <summary>
/// 移除单体
/// </summary>
/// <param name="key">键值</param>
public static bool Remove(string key, long dbId = )
{
var clientManager = GetClientManager(dbId);
IRedisClient redis = clientManager.GetClient();
var res = redis.Remove(key);
clientManager.DisposeClient((RedisNativeClient)redis);
redis.Dispose();
clientManager.Dispose();
return res;
}
/// <summary>
/// 清空所有缓存
/// </summary>
public static void RemoveAll(long dbId = )
{
var clientManager = GetClientManager(dbId);
IRedisClient redis = clientManager.GetClient();
redis.FlushDb();
clientManager.DisposeClient((RedisNativeClient)redis);
redis.Dispose();
clientManager.Dispose();
}
#endregion #region -- List --
/// <summary>
/// 添加列表
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="t">值</param>
/// <param name="dbId">库</param>
public static void List_Add<T>(string key, T t, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var redisTypedClient = redis.As<T>();
redisTypedClient.AddItemToList(redisTypedClient.Lists[key], t);
}
}
/// <summary>
/// 移除列表某个值
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="t">值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static bool List_Remove<T>(string key, T t, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var redisTypedClient = redis.As<T>();
return redisTypedClient.RemoveItemFromList(redisTypedClient.Lists[key], t) > ;
}
}
/// <summary>
/// 移除列表所有值
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="dbId">库Id</param>
public static void List_RemoveAll<T>(string key, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var redisTypedClient = redis.As<T>();
redisTypedClient.Lists[key].RemoveAll();
}
}
/// <summary>
/// 获取列表数据条数
/// </summary>
/// <param name="key"></param>
/// <param name="dbId"></param>
/// <returns></returns>
public static long List_Count(string key, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
return redis.GetListCount(key);
}
}
/// <summary>
/// 获取指定条数列表数据
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="start">开始编号</param>
/// <param name="count">条数</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static List<T> List_GetRange<T>(string key, int start, int count, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var c = redis.As<T>();
return c.Lists[key].GetRange(start, start + count - );
}
}
/// <summary>
/// 获取列表所有数据
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="dbId">库数据</param>
/// <returns></returns>
public static List<T> List_GetList<T>(string key, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var c = redis.As<T>();
return c.Lists[key].GetRange(, c.Lists[key].Count);
}
}
/// <summary>
/// 获取列表分页数据
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">每页条数</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static List<T> List_GetList<T>(string key, int pageIndex, int pageSize, long dbId = )
{
int start = pageSize * (pageIndex - );
return List_GetRange<T>(key, start, pageSize, dbId);
}
#endregion #region -- Set --
/// <summary>
/// 添加集合
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="t">数值</param>
/// <param name="dbId">库</param>
public static void Set_Add<T>(string key, T t, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var redisTypedClient = redis.As<T>();
redisTypedClient.Sets[key].Add(t);
}
}
/// <summary>
/// 集合是否包含指定数据
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="t">数值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static bool Set_Contains<T>(string key, T t, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var redisTypedClient = redis.As<T>();
return redisTypedClient.Sets[key].Contains(t);
}
}
/// <summary>
/// 移除集合某个值
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="t">数值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static bool Set_Remove<T>(string key, T t, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var redisTypedClient = redis.As<T>();
return redisTypedClient.Sets[key].Remove(t);
}
}
#endregion #region -- Hash --
/// <summary>
/// 判断某个数据是否已经被缓存
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">hashID</param>
/// <param name="dataKey">键值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static bool Hash_Exist<T>(string key, string dataKey, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
return redis.HashContainsEntry(key, dataKey);
}
} /// <summary>
/// 存储数据到hash表
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">hashID</param>
/// <param name="dataKey">键值</param>
/// <param name="t">数值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static bool Hash_Set<T>(string key, string dataKey, T t, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);
return redis.SetEntryInHash(key, dataKey, value);
}
}
/// <summary>
/// 移除hash中的某值
/// </summary>
/// <param name="key">hashID</param>
/// <param name="dataKey">键值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static bool Hash_Remove(string key, string dataKey, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
return redis.RemoveEntryFromHash(key, dataKey);
}
}
/// <summary>
/// 移除整个hash
/// </summary>
/// <param name="key">hashID</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static bool Hash_Remove(string key, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
return redis.Remove(key);
}
}
/// <summary>
/// 从hash表获取数据
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">hashID</param>
/// <param name="dataKey">键值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static T Hash_Get<T>(string key, string dataKey, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
string value = redis.GetValueFromHash(key, dataKey);
return ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(value);
}
}
/// <summary>
/// 获取整个hash的数据
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">hashID</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static List<T> Hash_GetAll<T>(string key, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var list = redis.GetHashValues(key);
if (list != null && list.Count > )
{
List<T> result = new List<T>();
foreach (var item in list)
{
var value = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);
result.Add(value);
}
return result;
}
return null;
}
}
#endregion #region -- SortedSet --
/// <summary>
/// 添加数据到 SortedSet
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">集合id</param>
/// <param name="t">数值</param>
/// <param name="score">排序码</param>
/// <param name="dbId">库</param>
public static bool SortedSet_Add<T>(string key, T t, double score, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);
return redis.AddItemToSortedSet(key, value, score);
}
}
/// <summary>
/// 移除数据从SortedSet
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">集合id</param>
/// <param name="t">数值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static bool SortedSet_Remove<T>(string key, T t, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);
return redis.RemoveItemFromSortedSet(key, value);
}
}
/// <summary>
/// 修剪SortedSet
/// </summary>
/// <param name="key">键值</param>
/// <param name="size">保留的条数</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static long SortedSet_Trim(string key, int size, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
return redis.RemoveRangeFromSortedSet(key, size, );
}
}
/// <summary>
/// 获取SortedSet的长度
/// </summary>
/// <param name="key">键值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static long SortedSet_Count(string key, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
return redis.GetSortedSetCount(key);
}
} /// <summary>
/// 获取SortedSet的分页数据
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">键值</param>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">每页条数</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static List<T> SortedSet_GetList<T>(string key, int pageIndex, int pageSize, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var list = redis.GetRangeFromSortedSet(key, (pageIndex - ) * pageSize, pageIndex * pageSize - );
if (list != null && list.Count > )
{
List<T> result = new List<T>();
foreach (var item in list)
{
var data = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);
result.Add(data);
}
return result;
}
}
return null;
} /// <summary>
/// 获取SortedSet的全部数据
/// </summary>
/// <typeparam name="T">类</typeparam>
/// <param name="key">键值</param>
/// <param name="dbId">库</param>
/// <returns></returns>
public static List<T> SortedSet_GetListALL<T>(string key, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
var list = redis.GetRangeFromSortedSet(key, , );
if (list != null && list.Count > )
{
List<T> result = new List<T>();
foreach (var item in list)
{
var data = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);
result.Add(data);
}
return result;
}
}
return null;
}
#endregion #region 公用方法
/// <summary>
/// 设置缓存过期
/// </summary>
/// <param name="key">键值</param>
/// <param name="datetime">过期时间</param>
/// <param name="dbId">库</param>
public static void SetExpire(string key, DateTime datetime, long dbId = )
{
using (IRedisClient redis = CreateManager(dbId).GetClient())
{
redis.ExpireEntryAt(key, datetime);
}
}
#endregion
}

接口实现

  public class CacheByRedis : ICache
{
#region Key-Value
/// <summary>
/// 读取缓存
/// </summary>
/// <param name="cacheKey">键</param>
/// <returns></returns>
public T Read<T>(string cacheKey, long dbId = ) where T : class
{
return RedisCache.Get<T>(RedisPrev + cacheKey, dbId);
}
/// <summary>
/// 写入缓存
/// </summary>
/// <param name="value">对象数据</param>
/// <param name="cacheKey">键</param>
public void Write<T>(string cacheKey, T value, long dbId = ) where T : class
{
RedisCache.Set(RedisPrev + cacheKey, value, dbId);
}
/// <summary>
/// 写入缓存
/// </summary>
/// <param name="value">对象数据</param>
/// <param name="cacheKey">键</param>
/// <param name="expireTime">到期时间</param>
public void Write<T>(string cacheKey, T value, DateTime expireTime, long dbId = ) where T : class
{
RedisCache.Set(RedisPrev + cacheKey, value, expireTime, dbId);
}
/// <summary>
/// 写入缓存
/// </summary>
/// <param name="value">对象数据</param>
/// <param name="cacheKey">键</param>
/// <param name="TimeSpan">缓存时间</param>
public void Write<T>(string cacheKey, T value, TimeSpan timeSpan, long dbId = ) where T : class
{
RedisCache.Set(RedisPrev + cacheKey, value, timeSpan, dbId);
}
/// <summary>
/// 移除指定数据缓存
/// </summary>
/// <param name="cacheKey">键</param>
public void Remove(string cacheKey, long dbId = )
{
RedisCache.Remove(RedisPrev + cacheKey, dbId);
}
/// <summary>
/// 移除全部缓存
/// </summary>
public void RemoveAll(long dbId = )
{
RedisCache.RemoveAll(dbId);
} /// <summary>
/// 缓存前缀
/// </summary>
private static string _RedisPrev = "";
private string RedisPrev
{
get
{
if (_RedisPrev.Length == )
_RedisPrev = ConfigurationManager.AppSettings["RedisPrev"].ToString();
return _RedisPrev;
}
}
#endregion
}

然后再弄个小工厂妥妥的

 public static ICache CaChe()
{
return new CacheByRedis();
}

代码到此结束,使用的话自己慢慢玩

c# RedisHelper的更多相关文章

  1. Basic Tutorials of Redis(9) -First Edition RedisHelper

    After learning the basic opreation of Redis,we should take some time to summarize the usage. And I w ...

  2. C# Azure 存储-分布式缓存Redis工具类 RedisHelper

    using System; using System.Collections.Generic; using Newtonsoft.Json; using StackExchange.Redis; na ...

  3. Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例

    本文目录 1. 摘要 2. Redis配置 3. RedisHelper 4.使用实例 5. 总结 1.  摘要 由于內存存取速度远高于磁盘读取的特性,为了程序效率提高性能,通常会把常用的不常变动的数 ...

  4. [C#] 使用 StackExchange.Redis 封装属于自己的 RedisHelper

    使用 StackExchange.Redis 封装属于自己的 RedisHelper 目录 核心类 ConnectionMultiplexer 字符串(String) 哈希(Hash) 列表(List ...

  5. RedisHelper帮助类

    using Newtonsoft.Json; using RedLockNet.SERedis; using RedLockNet.SERedis.Configuration; using Stack ...

  6. RedisHelper in C#

    自己写了一个RedisHelper,现贴出来,希望各位大神能够指正和优化. using System; using StackExchange.Redis; using System.Configur ...

  7. 使用 StackExchange.Redis 封装属于自己的 RedisHelper

    目录 核心类 ConnectionMultiplexer 字符串(String) 哈希(Hash) 列表(List) 有序集合(sorted set) Key 操作 发布订阅 其他 简介 目前 .NE ...

  8. RedisHelper (C#)

    <add key="RedisServers" value="172.20.2.90:9379,password=Aa+123456789" /> ...

  9. RedisHelper Redis帮助类

    using StackExchange.Redis; using System; using System.Collections.Generic; using System.IO; using Sy ...

  10. Redis:RedisHelper(5)

    /// <summary> /// Redis 助手 /// </summary> public class RedisHelper { /// <summary> ...

随机推荐

  1. Android实现手机拍照功能

    一.布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmln ...

  2. codeblocks如何设置,启动后自动打开上次未关闭的workspace

    设置--环境--普通设置--on application start-up -------default 关闭code::blocks时不要关那个workspace就可以.至于其它方法就不知道了.

  3. switch语句中default用法详解

    当年学C语言switch开关语句的时候,很多人会告诉你它是这么用的: switch(表达式){ case常量表达式1: 语句1;break; case常量表达式2: 语句2;break; - case ...

  4. 查看系统中安装了那些dotnet core 的SDK和运行时的命令

    原文:查看系统中安装了那些dotnet core 的SDK和运行时的命令 1.查看SDK dotnet --list-sdks 2.查看运行时 dotnet --list-runtimes 效果如下图 ...

  5. 《冰球撞击》Android休闲桌球类游戏现已面试,快来下载吧!

    <冰球撞击>Android休闲桌球类游戏现已完工上市快来下载吧! http://pan.baidu.com/s/1dD9vIRv <冰球撞击>是一个类似玩投篮机操作方式的And ...

  6. 0-1分布(伯努利分布)、n 重伯努利分布(二项分布)

    1. 0-1 分布(伯努利分布) 0-1分布又名两点分布,或叫伯努利分布. P{X=k}=pk(1−p)1−k 其中 k=0,1. 伯努利分布未必一定是 0-1 分布,也可能是 a-b 分布,只需满足 ...

  7. Java编程思想里的泛型实现一个堆栈类

    觉得作者写得太好了,不得不收藏一下. 对这个例子的理解: //类型参数不能用基本类型,T和U其实是同一类型. //每次放新数据都成为新的top,把原来的top往下压一级,通过指针建立链接. //末端哨 ...

  8. java socket 的参数选项解读

    java socket中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅. 1.java socket参数选项总览 在JDK1.6中有如下参数选项: public fin ...

  9. Jenkins 部署

    1  修改jenkins的根目录,默认地在C:\Documents and Settings\AAA\.jenkins . .jenkins ├─jobs│  └─JavaHelloWorld│    ...

  10. C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码

    原文:C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码 C#WPF 如何绘制几何图形? 怎么绘制坐标系?绘制sin曲线(正弦曲线)? 这离不开Path(Syst ...