Redis官网https://redis.io/

以下内容未全部验证,如有问题请指出

 //static NewtonsoftSerializer serializer = new NewtonsoftSerializer();
//static StackExchangeRedisCacheClient cacheClient = new StackExchangeRedisCacheClient(serializer);
//private static IDatabase db = cacheClient.Database; private static string connstr = System.Configuration.ConfigurationManager.AppSettings["redisCacheClient"];// "127.0.0.1:6379,allowadmin=true";
private static ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(connstr);
private static IDatabase db = conn.GetDatabase(1); /// <summary>
/// 获取系统的redis key前缀
/// </summary>
/// <param name="resourceid">资源Id</param>
/// <returns></returns>
public static string GetMyKey(string resourceid = "")
{ string Key = "report_";
if (!string.IsNullOrWhiteSpace(resourceid))
{
Key = string.Format("report_res_{0}", resourceid);
}
return Key;
} #region String 可以设置过期时间 同步 /// <summary>
/// 保存单个key value
/// </summary>
/// <param name="key">Redis Key</param>
/// <param name="value">保存的值</param>
/// <param name="expiry">过期时间</param>
/// <returns></returns>
public static bool SetStringKey(string key, string value, TimeSpan? expiry = default(TimeSpan?))
{ return db.StringSet(key, value, expiry);
} /// <summary>
/// 保存多个key value
/// </summary>
/// <param name="arr">key</param>
/// <returns></returns>
public static bool SetStringKey(KeyValuePair<RedisKey, RedisValue>[] arr)
{
return db.StringSet(arr);
} /// <summary>
/// 保存一个对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static bool SetStringKey<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))
{
string json = JsonConvert.SerializeObject(obj);
return db.StringSet(key, json, expiry);
} /// <summary>
/// 获取单个key的值
/// </summary>
/// <param name="key">Redis Key</param>
/// <returns></returns> public static RedisValue GetStringKey(string key)
{
return db.StringGet(key);
} /// <summary>
/// 获取多个Key
/// </summary>
/// <param name="listKey">Redis Key集合</param>
/// <returns></returns>
public static RedisValue[] GetStringKey(List<RedisKey> listKey)
{
return db.StringGet(listKey.ToArray());
} /// <summary>
/// 获取一个key的对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T GetStringKey<T>(string key)
{
return JsonConvert.DeserializeObject<T>(db.StringGet(key));
}
/// <summary>
/// 为数字增长val
/// </summary>
/// <param name="key"></param>
/// <param name="val">可以为负</param>
/// <returns>增长后的值</returns>
public double StringIncrement(string key, double val = 1)
{
return db.StringIncrement(key, val);
} /// <summary>
/// 为数字减少val
/// </summary>
/// <param name="key"></param>
/// <param name="val">可以为负</param>
/// <returns>减少后的值</returns>
public double StringDecrement(string key, double val = 1)
{
return db.StringDecrement(key, val);
} #endregion #region String 可以设置过期时间 异步 /// <summary>
/// 保存单个key value
/// </summary>
/// <param name="key">Redis Key</param>
/// <param name="value">保存的值</param>
/// <param name="expiry">过期时间</param>
/// <returns></returns>
public static async Task<bool> SetStringKeyAsync(string key, string value, TimeSpan? expiry = default(TimeSpan?))
{ return await db.StringSetAsync(key, value, expiry);
} /// <summary>
/// 保存多个key value
/// </summary>
/// <param name="arr">key</param>
/// <returns></returns>
public static async Task<bool> SetStringKeyAsync(KeyValuePair<RedisKey, RedisValue>[] arr)
{
return await db.StringSetAsync(arr);
} /// <summary>
/// 保存一个对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static async Task<bool> SetStringKeyAsync<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))
{
string json = JsonConvert.SerializeObject(obj);
return await db.StringSetAsync(key, json, expiry);
} /// <summary>
/// 获取单个key的值
/// </summary>
/// <param name="key">Redis Key</param>
/// <returns></returns> public static async Task<RedisValue> GetStringKeyAsync(string key)
{
return await db.StringGetAsync(key);
} /// <summary>
/// 获取多个Key
/// </summary>
/// <param name="listKey">Redis Key集合</param>
/// <returns></returns>
public static async Task<RedisValue[]> GetStringKeyAsync(List<RedisKey> listKey)
{
return await db.StringGetAsync(listKey.ToArray());
} /// <summary>
/// 获取一个key的对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static async Task<T> GetStringKeyAsync<T>(string key)
{
return JsonConvert.DeserializeObject<T>(await db.StringGetAsync(key));
}
/// <summary>
/// 为数字增长val
/// </summary>
/// <param name="key"></param>
/// <param name="val">可以为负</param>
/// <returns>增长后的值</returns>
public async Task<double> StringIncrementAsync(string key, double val = 1)
{
return await db.StringIncrementAsync(key, val);
} /// <summary>
/// 为数字减少val
/// </summary>
/// <param name="key"></param>
/// <param name="val">可以为负</param>
/// <returns>减少后的值</returns>
public async Task<double> StringDecrementAsync(string key, double val = 1)
{
return await db.StringDecrementAsync(key, val);
}
#endregion #region Hash 同步
/// <summary>
/// 存储数据到hash表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="dataKey"></param>
/// <param name="t"></param>
/// <returns></returns>
public static bool HashSet1<T>(string key, string dataKey, List<T> t)
{
string json = "";
foreach (var item in t)
{
json = JsonConvert.SerializeObject(item);
//listHashEntry.Add(new HashEntry(getModelId(item), json));
}
return db.HashSet(key, dataKey, json); //return await ({
// string json = ConvertJson(t);
// return db.HashSetAsync(key, dataKey, json);
//});
}
/// <summary>
/// 保存一个集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">Redis Key</param>
/// <param name="list">数据集合</param>
/// <param name="getModelId"></param>
public static void HashSet<T>(string key, List<T> list, Func<T, string> getModelId)
{
List<HashEntry> listHashEntry = new List<HashEntry>();
foreach (var item in list)
{
string json = JsonConvert.SerializeObject(item);
listHashEntry.Add(new HashEntry(getModelId(item), json));
}
db.HashSet(key, listHashEntry.ToArray());
} /// <summary>
/// 获取Hash中的单个key的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">Redis Key</param>
/// <param name="hasFildValue">RedisValue</param>
/// <returns></returns>
public static T GetHashKey<T>(string key, string hasFildValue)
{
if (!string.IsNullOrWhiteSpace(key) && !string.IsNullOrWhiteSpace(hasFildValue))
{
RedisValue value = db.HashGet(key, hasFildValue);
if (!value.IsNullOrEmpty)
{
return JsonConvert.DeserializeObject<T>(value);
}
}
return default(T);
} /// <summary>
/// 获取hash中的多个key的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">Redis Key</param>
/// <param name="listhashFields">RedisValue value</param>
/// <returns></returns>
public static List<T> GetHashKey<T>(string key, List<RedisValue> listhashFields)
{
List<T> result = new List<T>();
if (!string.IsNullOrWhiteSpace(key) && listhashFields.Count > 0)
{
RedisValue[] value = db.HashGet(key, listhashFields.ToArray());
foreach (var item in value)
{
if (!item.IsNullOrEmpty)
{
result.Add(JsonConvert.DeserializeObject<T>(item));
}
}
}
return result;
} /// <summary>
/// 获取hashkey所有Redis key
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static List<T> GetHashAll<T>(string key)
{
List<T> result = new List<T>();
RedisValue[] arr = db.HashKeys(key);
foreach (var item in arr)
{
if (!item.IsNullOrEmpty)
{
result.Add(JsonConvert.DeserializeObject<T>(item));
}
}
return result;
} /// <summary>
/// 获取hashkey所有的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static List<T> HashGetAll<T>(string key)
{
List<T> result = new List<T>();
HashEntry[] arr = db.HashGetAll(key);
foreach (var item in arr)
{
if (!item.Value.IsNullOrEmpty)
{
result.Add(JsonConvert.DeserializeObject<T>(item.Value));
}
}
return result;
} /// <summary>
/// 删除hasekey
/// </summary>
/// <param name="key"></param>
/// <param name="hashField"></param>
/// <returns></returns>
public static bool DeleteHase(RedisKey key, RedisValue hashField)
{
return db.HashDelete(key, hashField);
} #endregion #region Hash 异步
/// <summary>
/// 存储数据到hash表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="dataKey"></param>
/// <param name="t"></param>
/// <returns></returns>
public static async Task<bool> HashSetAsync<T>(string key, string dataKey, List<T> t)
{
string json = "";
foreach (var item in t)
{
json = JsonConvert.SerializeObject(item);
}
return await db.HashSetAsync(key, dataKey, json); } /// <summary>
/// 获取Hash中的单个key的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">Redis Key</param>
/// <param name="hasFildValue">RedisValue</param>
/// <returns></returns>
public static async Task<T> GetHashKeyAsync<T>(string key, string hasFildValue)
{
if (!string.IsNullOrWhiteSpace(key) && !string.IsNullOrWhiteSpace(hasFildValue))
{
RedisValue value = await db.HashGetAsync(key, hasFildValue);
if (!value.IsNullOrEmpty)
{
return JsonConvert.DeserializeObject<T>(value);
}
}
return default(T);
} /// <summary>
/// 获取hash中的多个key的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">Redis Key</param>
/// <param name="listhashFields">RedisValue value</param>
/// <returns></returns>
public static async Task<List<T>> GetHashKeyAsync<T>(string key, List<RedisValue> listhashFields)
{
List<T> result = new List<T>();
if (!string.IsNullOrWhiteSpace(key) && listhashFields.Count > 0)
{
RedisValue[] value = await db.HashGetAsync(key, listhashFields.ToArray());
foreach (var item in value)
{
if (!item.IsNullOrEmpty)
{
result.Add(JsonConvert.DeserializeObject<T>(item));
}
}
}
return result;
} /// <summary>
/// 获取hashkey所有Redis key
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static async Task<List<T>> GetHashAllAsync<T>(string key)
{
List<T> result = new List<T>();
RedisValue[] arr =await db.HashKeysAsync(key);
foreach (var item in arr)
{
if (!item.IsNullOrEmpty)
{
result.Add(JsonConvert.DeserializeObject<T>(item));
}
}
return result;
} /// <summary>
/// 获取hashkey所有的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static async Task<List<T>> HashGetAllAsync<T>(string key)
{
List<T> result = new List<T>();
HashEntry[] arr =await db.HashGetAllAsync(key);
foreach (var item in arr)
{
if (!item.Value.IsNullOrEmpty)
{
result.Add(JsonConvert.DeserializeObject<T>(item.Value));
}
}
return result;
} /// <summary>
/// 删除hasekey
/// </summary>
/// <param name="key"></param>
/// <param name="hashField"></param>
/// <returns></returns>
public static async Task<bool> DeleteHaseAsync(RedisKey key, RedisValue hashField)
{
return await db.HashDeleteAsync(key, hashField);
} #endregion #region key 同步 /// <summary>
/// 删除单个key
/// </summary>
/// <param name="key">redis key</param>
/// <returns>是否删除成功</returns>
public static bool KeyDelete(string key)
{
return db.KeyDelete(key);
} /// <summary>
/// 删除多个key
/// </summary>
/// <param name="keys">rediskey</param>
/// <returns>成功删除的个数</returns>
public static long keyDelete(RedisKey[] keys)
{
return db.KeyDelete(keys);
} /// <summary>
/// 判断key是否存储
/// </summary>
/// <param name="key">redis key</param>
/// <returns></returns>
public static bool KeyExists(string key)
{
return db.KeyExists(key);
} /// <summary>
/// 重新命名key
/// </summary>
/// <param name="key">就的redis key</param>
/// <param name="newKey">新的redis key</param>
/// <returns></returns>
public static bool KeyRename(string key, string newKey)
{
return db.KeyRename(key, newKey);
} /// <summary>
/// 设置Key的时间
/// </summary>
/// <param name="key">redis key</param>
/// <param name="expiry"></param>
/// <returns></returns>
public static bool KeyExpire(string key, TimeSpan? expiry = default(TimeSpan?))
{
return db.KeyExpire(key, expiry);
}
#endregion #region key 异步 /// <summary>
/// 删除单个key
/// </summary>
/// <param name="key">redis key</param>
/// <returns>是否删除成功</returns>
public static async Task<bool> KeyDeleteAsync(string key)
{
return await db.KeyDeleteAsync(key);
} /// <summary>
/// 删除多个key
/// </summary>
/// <param name="keys">rediskey</param>
/// <returns>成功删除的个数</returns>
public static async Task<long> keyDeleteAsync(RedisKey[] keys)
{
return await db.KeyDeleteAsync(keys);
} /// <summary>
/// 判断key是否存储
/// </summary>
/// <param name="key">redis key</param>
/// <returns></returns>
public static async Task<bool> KeyExistsAsync(string key)
{
return await db.KeyExistsAsync(key);
} /// <summary>
/// 重新命名key
/// </summary>
/// <param name="key">就的redis key</param>
/// <param name="newKey">新的redis key</param>
/// <returns></returns>
public static async Task<bool> KeyRenameAsync(string key, string newKey)
{
return await db.KeyRenameAsync(key, newKey);
} /// <summary>
/// 设置Key的时间
/// </summary>
/// <param name="key">redis key</param>
/// <param name="expiry"></param>
/// <returns></returns>
public static async Task<bool> KeyExpireAsync(string key, TimeSpan? expiry = default(TimeSpan?))
{
return await db.KeyExpireAsync(key, expiry);
}
#endregion #region List 同步 /// <summary>
/// 移除指定ListId的内部List的值
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void ListRemove<T>(string key, T value)
{
db.ListRemove(key, JsonConvert.SerializeObject(value));
} /// <summary>
/// 获取指定key的List
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public List<T> ListRange<T>(string key)
{
var values = db.ListRange(key);
List<T> result = new List<T>();
foreach (var item in values)
{
var model = JsonConvert.DeserializeObject<T>(item);
result.Add(model);
}
return result;
} /// <summary>
/// 入队
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void ListRightPush<T>(string key, T value)
{
db.ListRightPush(key, JsonConvert.SerializeObject(value));
} /// <summary>
/// 出队
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T ListRightPop<T>(string key)
{
var value = db.ListRightPop(key);
return JsonConvert.DeserializeObject<T>(value);
} /// <summary>
/// 获取集合中的数量
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public long ListLength(string key)
{
return db.ListLength(key);
} #endregion 同步方法 #region List 异步 /// <summary>
/// 移除指定ListId的内部List的值
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public async Task<long> ListRemoveAsync<T>(string key, T value)
{
return await db.ListRemoveAsync(key, JsonConvert.SerializeObject(value));
} /// <summary>
/// 获取指定key的List
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public async Task<List<T>> ListRangeAsync<T>(string key)
{
var values =await db.ListRangeAsync(key);
List<T> result = new List<T>();
foreach (var item in values)
{
var model = JsonConvert.DeserializeObject<T>(item);
result.Add(model);
}
return result;
} /// <summary>
/// 入队
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public async Task<long> ListRightPushAsync<T>(string key, T value)
{
return await db.ListRightPushAsync(key, JsonConvert.SerializeObject(value));
} /// <summary>
/// 出队
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public async Task<T> ListRightPopAsync<T>(string key)
{
var value = await db.ListRightPopAsync(key);
return JsonConvert.DeserializeObject<T>(value);
} /// <summary>
/// 获取集合中的数量
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public async Task<long> ListLengthAsync(string key)
{
return await db.ListLengthAsync(key);
} #endregion 异步方法 #region SortedSet 同步 /// <summary>
/// 添加
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="score"></param>
public static bool SortedSetAdd<T>(string key, T value, double score)
{
return db.SortedSetAdd(key, JsonConvert.SerializeObject(value), score);
} /// <summary>
/// 删除
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static bool SortedSetRemove<T>(string key, T value)
{
return db.SortedSetRemove(key, JsonConvert.SerializeObject(value));
} /// <summary>
/// 获取全部
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static List<T> SortedSetRangeByRank<T>(string key)
{
var values = db.SortedSetRangeByRank(key); List<T> result = new List<T>();
foreach (var item in values)
{
var model = JsonConvert.DeserializeObject<T>(item);
result.Add(model);
}
return result;
} /// <summary>
/// 获取集合中的数量
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static long SortedSetLength(string key)
{
return db.SortedSetLength(key);
} #endregion 同步方法 #region SortedSet 异步 /// <summary>
/// 添加
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="score"></param>
public static async Task<bool> SortedSetAddAsync<T>(string key, T value, double score)
{
return await db.SortedSetAddAsync(key, JsonConvert.SerializeObject(value), score);
} /// <summary>
/// 删除
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static async Task<bool> SortedSetRemoveAsync<T>(string key, T value)
{
return await db.SortedSetRemoveAsync(key, JsonConvert.SerializeObject(value));
} /// <summary>
/// 获取全部
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static async Task<List<T>> SortedSetRangeByRankAsync<T>(string key)
{
var values = await db.SortedSetRangeByRankAsync(key);
List<T> result = new List<T>();
foreach (var item in values)
{
var model = JsonConvert.DeserializeObject<T>(item);
result.Add(model);
}
return result;
} /// <summary>
/// 获取集合中的数量
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static async Task<long> SortedSetLengthAsync(string key)
{
return await db.SortedSetLengthAsync(key);
} #endregion 异步方法 /// <summary>
/// 追加值
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static void StringAppend(string key, string value)
{
////追加值,返回追加后长度
long appendlong = db.StringAppend(key, value);
}

功能比较全的StackExchange.Redis封装帮助类(.Net/C#)的更多相关文章

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

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

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

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

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

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

  4. StackExchange.Redis 封装

    博主最近开始玩Redis啊~~ 看了很多Redis的文章,感觉有点云里雾里的,之前看到是ServiceStack.Redis,看了一些大佬封装的Helper类,还是懵懵的QAQ 没办法啊只能硬着**上 ...

  5. c#使用 StackExchange.Redis 封装 RedisHelper

    公司一直在用.net自带的缓存,大家都知道.net自带缓存的缺点,就不多说了,不知道的可以查一查,领导最近在说分布式缓存,我们选的是redis,领导让我不忙的时候封装一下,搜索了两天,选了选第三方的插 ...

  6. PHP 操作redis 封装的类 转的

    <?php/** * Redis 操作,支持 Master/Slave 的负载集群 * * @author jackluo */class RedisCluster{           // ...

  7. DotNet Core 使用 StackExchange.Redis 简单封装和实现分布式锁

    前言 公司的项目以前一直使用 CSRedis 这个类库来操作 Redis,最近增加了一些新功能,会存储一些比较大的数据,内测的时候发现其中有两台服务器会莫名的报错 Unexpected respons ...

  8. redis的安装、启动、主从配置,以及.Net下StackExchange.Redis的使用

    开门见山,Linux下配个环境真是苦逼死了,这里记录一下,囧 一.环境 服务端:Ubuntu16.04 LTS(虚拟机,redis官方没有window发布版本,而且在Linux下运行更稳定) 客户端: ...

  9. C# StackExchange.Redis 用法总结

    安装 StackExchange.Redis 在 NuGet 中搜索 StackExchange.Redis 和 Newtonsoft.Json,直接点击按钮安装即可. StackExchange.R ...

随机推荐

  1. java线程系列之三(线程协作)

    本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/7433673,转载请注明. 上一篇讲述了线程的互斥(同步),但是在很多情况 ...

  2. 在 CentOS7 安装 ELK

    ELK是一个成熟的日志系统,主要功能有收集.分析.检索,详细见 elastic官网. 本文主要介绍如何在CentOS7下安装最新版本的ELK,当然现在docker已经有完全配置成功的elk容器,安装配 ...

  3. maven入门概念及使用

    Maven 一.Maven概念 1.maven是什么:Maven 是一个项目管理工具.它负责管理项目开发过程中的几乎所有的东西. 版本.构建.输出物管理.依赖关系.文档和构建结果.项目关系.移植性管理 ...

  4. ArcGIS JavaScript开发过程中,底图产生拼接缝问题

    ArcGIS JS开发过程中,地图产生了拼接缝 上图调用的是天地图,确认原地图服务是没有这种缝隙的. 其他人电脑上测试,发现没有此问题. 纠结了半天,群里问了大神,大神说是浏览器设置了缩放.... 取 ...

  5. Spark 实现wordcount

    配置完spark之后,使用spark实现wordcount,这一部分完全参考<深入理解Spark:核心思想与源码分析> 依然使用hadoop wordcountTest的那几个txt文件 ...

  6. LeetCode 50 - Pow(x, n) - [快速幂]

    实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 1: 输入: 2.00000, 10输出: 1024.00000 示例 2: 输入: 2.10000, 3输出: 9.26100 示例 ...

  7. 【Python基础】lpthw - Exercise 41 学习面向对象术语

    一.专有词汇 类(class):告诉python创建新类型的东西. 对象(object):两个意思,即最基本的东西,或者某样东西的实例. 实例(instance):让python创建一个类时得到的东西 ...

  8. NodeJS笔记(六)-Express HTTP服务器启动后如何关闭

    npm start启动网站,提示“3000”端口已经被使用的问题 nodejs WEB服务器并不随着cmd的关闭而终止 查看任务管理器可以看到nodejs的启动进程 可以手动关闭 如果是一直处于cmd ...

  9. 【托业】【怪兽】TEST04

    ❤ admit doing sth 承认做某事 ❤revelation n.揭露,揭示 ❤dazzling adj. 炫目的 ❤intentionally adv.刻意地 ❤metropolitan ...

  10. Linux主机之间ssh免密登录配置方法

    由于公司的生产环境有很多台Linux的CentOS服务器, 为了方便机子(假设两台机子A,B)互相之间免密ssh, scp命令操作,配置如下 1. 在A.B上分别创建本机的公钥和私钥,输入命令后连续三 ...