熟悉的开场白,大家晚上好啊,今天给大家分享的是Redis在大数据中的使用,可能真正讲的是一些redis的使用技巧,Redis基本的一些东西。
首先给大家个地址,源码以及实例都在里面,当然今天的分享也是按照里面的实例来进行的,大家可以先进行下载。 http://git.newlifex.com/NewLife/NewLife.Redis 当然这里也附上Redis的下载地址: windows:https://github.com/MicrosoftArchive/redis/releases http://x.newlifex.com/Redis-x64-3.2.100.msi Linux:https://redis.io/download
实际上NewLife.Redis是一个完整的Redis协议的功能的实现,但是redis的核心功能并没有在这里面,Redis的核心功能的实现是在NewLife.Core里面。这里可以打开看一下,NewLife.Core里面有一个NewLife.Caching的命名空间,里面有一个Redis类里面实现了Redis的基本功能,另一个类是RedisClient是Redis的客户端。Redis的核心功能就是有这两个类实现。RedisClient代表着Redis客户端对服务器的一个连接。Redis真正使用的时候有一个Redis连接池,里面存放着很多个RedisClient对象。
所以我们Redis的封装有两层,一层是NewLife.Core里面的Redis以及RedisClient。另一层就是NewLife.Redis。这里面的FullRedis是对Redis的实现了Redis的所有的高级功能。这里你也可以认为NewLife.Redis是Redis的一个扩展。
打开Program.cs看下代码
这里XTrace.UseConsole();
是向控制台输出日志,方便调试使用查看结果。
接下来看第一个例子Test1。具体的我都在代码中进行了注释,大家可以看下
static void Test1()
{
var ic = Redis.Create("127.0.0.1:6379", 3);//创建Redis实例,得到FullRedis对象
//var ic = new FullRedis();//另一种实例化的方式
//ic.Server = "127.0.0.1:6379";
//ic.Db = 3;//Redis中数据库
ic.Log = XTrace.Log;//显示日志,进行Redis操作把日志输出,生产环境不用输出日志
// 简单操作
Console.WriteLine("共有缓存对象 {0} 个", ic.Count);//缓存对象数量
ic.Set("name", "大石头");//Set K-V结构,Set第二个参数可以是任何类型
Console.WriteLine(ic.Get<String>("name"));//Get泛型,指定获取的类型
ic.Set("time", DateTime.Now, 1);//过期时间秒
Console.WriteLine(ic.Get<DateTime>("time").ToFullString());
Thread.Sleep(1100);
Console.WriteLine(ic.Get<DateTime>("time").ToFullString());
// 列表
var list = ic.GetList<DateTime>("list");
list.Add(DateTime.Now);
list.Add(DateTime.Now.Date);
list.RemoveAt(1);
Console.WriteLine(list[list.Count - 1].ToFullString());
// 字典
var dic = ic.GetDictionary<DateTime>("dic");
dic.Add("xxx", DateTime.Now);
Console.WriteLine(dic["xxx"].ToFullString());
// 队列
var mq = ic.GetQueue<String>("queue");
mq.Add(new[] { "abc", "g", "e", "m" });
var arr = mq.Take(3);
Console.WriteLine(arr.Join(","));
// 集合
var set = ic.GetSet<String>("181110_1234");
set.Add("xx1");
set.Add("xx2");
set.Add("xx3");
Console.WriteLine(set.Count);
Console.WriteLine(set.Contains("xx2"));
Console.WriteLine("共有缓存对象 {0} 个", ic.Count);
}
ic.Log=XTrace.Log
输出的日志
接下来看第四个例子,我们直接做压力测试,代码如下:
static void Main(String[] args)
{
XTrace.UseConsole();
// 激活FullRedis,否则Redis.Create会得到默认的Redis对象
FullRedis.Register();
Test4();
Console.ReadKey();
}
static void Test4()
{
var ic = Redis.Create("127.0.0.1:6379", 5);
//var ic = new MemoryCache();
ic.Bench();
}
运行的结果如下图所示:
测试就是进行get,set remove,累加等的操作。大家可以看到在我本机上轻轻松松的到了六十万,多线程到时候甚至到了一百多万。为什么会达到这么高的ops呢,下面给大家说一下。
上面的操作如果大家都掌握的基本算Redis入门了,接下来进行进阶。会了基本比别人更胜一筹了。
GetAll:比方说我要取是个key,这个时候可以用getall。这时候redis就执行了一次命令。比方说我要取10个key那么用get的话要取10次,如果用getall的话要用1次。一次getall时间大概是get的一点几倍,但是10次get的话就是10倍的时间,这个账你应该会算吧。强烈推荐大家用getall。
setall 跟getall相似。批量设置K-V.
setall与getall性能很恐怖,官方公布的ops也就10万左右,为什么我们的测试轻轻松松到五十万甚至上百万,因为我们就用了setall,getall。 如果get,set两次以上,建议用getall,setall
比如执行10次命令会打包成一个包集体发过去执行,这里实现的方式是StartPipeline()开始,StopPipeline()结束中间的代码就会以管道的形式执行。这里推荐使用我们的更强的武器,AutoPipeline自动管道属性。管道操作到一定数量时,自动提交,默认0.使用了不需要使用AutoPipeline,就不需要StartPipeline,StopPipeline指定开始结束了!
Add跟Replace就是实现Redis分布式锁的关键
在项目的Readme中,这里摘录下:
程序员终极理念:CPU达到百分百,然后性能达到最优,尽量不要浪费。最痛恨的是:如果cpu不到百分百,性能没法提升了,说明代码有问题!
虽然Redis会用,但是没有像大石头这样的大数据使用场景。今天的视频收获颇丰,可能大部分人跟我一样,没有大石头的使用场景,但是值得借鉴的经验还是很丰富的!期待下一次的精彩分享。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有