热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

redis专题(一)字符串操作

这章开始进入主题,讲redis如何存储。以下示例客户端均为netcore版本的,redis客户端为ServiceStack.Redis ,github地址:https:github

这章开始进入主题,讲redis如何存储。以下示例客户端均为 net core版本的,redis客户端为ServiceStack.Redis ,github地址:https://github.com/ServiceStack/ServiceStack.Redis

对于net来说,redis客户端一般使用 ServiceStack.Redis  或 StackExchange.Redis。但总体来说,ServiceStack.Redis性能更优。

 以下内容,均基于  ServiceStack.Redis  作为操作的中间件。

客户端连接字符串支持以下几种格式:

localhost
127.0.0.1:6379
redis:
//localhost:6379
password@localhost:6379
clientid:password@localhost:
6379
redis:
//clientid:password@localhost:6380?ssl=true&db=1

 下面开始上示例代码

using (RedisClient client = new RedisClient("127.0.0.1", 6379))
{
//删除当前数据库中的所有Key 默认删除的是db0
//client.FlushDb();
//删除所有数据库中的key
//client.FlushAll();
//统计网站访问数量、当前在线人数、微博数、粉丝数等,全局递增ID等
#region 设置key的value
//client.Set("name", "科易网");
//Console.WriteLine("正确输出如下");
//Console.WriteLine(client.Get("name"));
//Console.WriteLine("第二种姿势输出");
//Console.WriteLine(client.GetValue("name"));
//Console.WriteLine(JsonConvert.DeserializeObject(client.GetValue("name")));
#endregion
#region 设置多个key的value
//批量的写入redis key
client.SetAll(new Dictionary<string, string> { { "id", "001" }, { "name", "张无忌" } });
//批量读取内存中多个key的结果 如果我们获取的key不存在,程序会返回一个空的字符串
// 来判断当前用户是否是老用户
var getall = client.GetAll<string>(new string[] { "id", "name", "number" });
foreach (var item in getall)
{
Console.WriteLine(item.Key
+":"+item.Value);
}
#endregion
#region 设置key的value并设置过期时间
//client.Set("name", "科易网", TimeSpan.FromSeconds(1));
//Task.Delay(1 * 1000).Wait();
//Console.WriteLine(client.Get("name"));
#endregion
#region 设置key的value并设置过期时间
//client.Set("name", "科易网", DateTime.Now.AddSeconds(1));
////client.Set("name", "科易网", DateTime.Now.AddDays(1));
//Console.WriteLine("刚写进去的结果");
//Console.WriteLine(client.Get("name"));
//Task.Delay(1 * 1000).Wait();
//Console.WriteLine("1秒钟之后的结果");
//Console.WriteLine(client.Get("name"));
//client.Set("class", "优秀班级", TimeSpan.FromSeconds(10));
//Task.Delay(1 * 1000).Wait();
//Console.WriteLine(client.Get("class"));
#endregion
#region 在原有key的value值之后追加value
//client.AppendToValue("name", "I");
//client.AppendToValue("name", " ");
//client.AppendToValue("name", "LOVE YOU");
//Console.WriteLine(client.Get("name"));
#endregion
#region 获取旧值赋上新值
//client.Set("name", "科易网");
////获取当前key的之前的值,然后把新的结果替换进入
//var value = client.GetAndSetValue("name", "张无忌");
//Console.WriteLine("原先的值"+value);
//Console.WriteLine("新值"+client.GetValue("name"));
#endregion
#region 自增1,返回自增后的值
//给key为sid的键自增1 ,返回了自增之后的结果
//Console.WriteLine(client.Incr("sid"));
//Console.WriteLine(client.Incr("sid"));
//Console.WriteLine(client.Incr("sid"));
//Console.WriteLine("华丽丽的结束");
//Console.WriteLine(client.GetValue("sid"));
//每次通过传递的count累计,count就是累加的值
//client.IncrBy("sid", 2);
//Console.WriteLine(client.Get("sid"));
//client.IncrBy("sid", 100);
//Console.WriteLine("最后的结果***"+client.GetValue("sid"));
#endregion
#region 自减1,返回自减后的值
//Console.WriteLine(client.Decr("sid"));
//Console.WriteLine(client.Decr("sid"));
//Console.WriteLine(client.Decr("sid"));
//Console.WriteLine("最后的结果"+client.GetValue("sid"));
////通过传入的count去做减肥 之前的结果-count
//client.DecrBy("sid", 2);
//Console.WriteLine("最终的结果"+client.GetValue("sid"));
#endregion
#region add 和set 的区别?
// 当使用add 方法去操作redis的时候,如果key存在的话,则不会再次进行操作 返回false 如果操作成功返回true
//Console.WriteLine(client.Add("name", "张无忌"));
//Console.WriteLine(client.Add("name", "你很好张无忌"));
//Console.WriteLine(client.Get("name"));
//使用set去操作 redis的时候,如果key不存在则写入当前值,并且返回true,通过存在,则对之前的值进行了一个替换 返回操作的结果
//Console.WriteLine(client.Set("name", "张无忌"));
//Console.WriteLine(client.Set("name", "你很好张无忌"));
//Console.WriteLine(client.Get("name"));
#endregion
}

 


.Net操作Redis数据类型String

public class DoRedisString : DoRedisBase
{
#region 赋值
///


/// 设置key的value
///

public bool Set(string key, string value)
{
return RedisBase.Core.Set<string>(key, value);
}
///
/// 设置key的value并设置过期时间
///

public bool Set(string key, string value, DateTime dt)
{
return RedisBase.Core.Set<string>(key, value, dt);
}
///
/// 设置key的value并设置过期时间
///

public bool Set(string key, string value, TimeSpan sp)
{
return RedisBase.Core.Set<string>(key, value, sp);
}
///
/// 设置多个key/value
///

public void Set(Dictionary<string, string> dic)
{
RedisBase.Core.SetAll(dic);
}
#endregion
#region 追加
///
/// 在原有key的value值之后追加value
///

public long Append(string key, string value)
{
return RedisBase.Core.AppendToValue(key, value);
}
#endregion
#region 获取值
///
/// 获取key的value值
///

public string Get(string key)
{
return RedisBase.Core.GetValue(key);
}
///
/// 获取多个key的value值
///

public List<string> Get(List<string> keys)
{
return RedisBase.Core.GetValues(keys);
}
///
/// 获取多个key的value值
///

public List Get(List<string> keys)
{
return RedisBase.Core.GetValues(keys);
}
#endregion
#region 获取旧值赋上新值
///
/// 获取旧值赋上新值
///

public string GetAndSetValue(string key, string value)
{
return RedisBase.Core.GetAndSetValue(key, value);
}
#endregion
#region 辅助方法
///
/// 获取值的长度
///

public long GetCount(string key)
{
return RedisBase.Core.GetStringCount(key);
}
///
/// 自增1,返回自增后的值
///

public long Incr(string key)
{
return RedisBase.Core.IncrementValue(key);
}
///
/// 自增count,返回自增后的值
///

public double IncrBy(string key, double count)
{
return RedisBase.Core.IncrementValueBy(key, count);
}
///
/// 自减1,返回自减后的值
///

public long Decr(string key)
{
return RedisBase.Core.DecrementValue(key);
}
///
/// 自减count ,返回自减后的值
///

///


///


///
public long DecrBy(string key, int count)
{
return RedisBase.Core.DecrementValueBy(key, count);
}
#endregion
}

 



推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 打开文件管理器_【教程】模组管理器3.1食用指南
    文编:byakko最近有部分小伙伴反应还不会使用unity模组管理器,现在我就给大家讲一下unity模组管理器——从下载到使用。完整视频版以下是无WiF ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
author-avatar
手机用户2502881937
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有