设为首页 收藏本站
查看: 640|回复: 0

[经验分享] NoSql学习之路一redis做消息队列

[复制链接]

尚未签到

发表于 2015-11-12 11:48:35 | 显示全部楼层 |阅读模式
  nosql最近很火,我也研究研究,呵呵,今天来说说redis,简单的那些增删改查 就不说了,网上太多了,我研究了一下,redis做消息队列
  首先是用的redis的发布订阅做的消息队列实现消息队列,
  测试是在本机做的,redis在虚拟机2003的系统,386M内存,本机是8.1的系统,6g内存
  我是用了500个线程模拟并发每个线程发布500条数据,在发布消息的时候,服务器的内存占用并不高,cpu占有率挺高的
  这是每个线程用的时间,都差不多3 4秒



  另一端用sqlserver保存消息,结果插到24万左右的时候报错了,原来是日志文件太大了,超过1G了,而数据库文件只有50M,时间大概用了20多分钟吧,
  今天又用mongodb试了一下,效率比sqlserver高很多,只用了56秒就ok,对了我保存消息的时候,只用一个线程
  下面上代码
  发布端
  namespace publish
{
class Program
{
static void Main(string[] args)
{
for (int b = 0; b < 500; b++)
{
Thread thread = new Thread(new ThreadStart(() =>
{
RedisClient redisClient = RedisClientFactory.Instance.CreateRedisClient(&quot;192.168.189.134&quot;, 6379);
Stopwatch stopwatch1 = new Stopwatch();
stopwatch1.Start();
for (int i = 0; i < 500; i++)
{
UserInfo userInfo = new UserInfo();
userInfo.Age = 1000;
userInfo.Name = &quot;XX&quot;;
userInfo.I = i;
userInfo.ThreadId = Thread.CurrentThread.ManagedThreadId;
redisClient.Publish(&quot;aa&quot;, Encoding.Default.GetBytes(&quot;XX在广播 频道:aa线程:&quot;+Thread.CurrentThread.ManagedThreadId.ToString()));
}
stopwatch1.Stop();
Console.WriteLine(&quot;aa用时:&quot; + stopwatch1.ElapsedMilliseconds + &quot;毫秒&quot;);
}));
thread.Start();
}
Console.ReadKey();
}
}

class UserInfo
{
public string Name { get; set; }
public int Age { get; set; }
public int ThreadId { get; set; }
public int I { get; set; }
}
}

接受端,
   class Program
{
static void Main(string[] args)
{
RedisClient Redis = RedisClientFactory.Instance.CreateRedisClient(&quot;192.168.189.134&quot;, 6379);//redis服务IP和端口
Redis.Subscribe(new string[] { &quot;it&quot;, &quot;aa&quot; });
Thread thread = new Thread(() =>
{
Recode recode = new Recode();
while (true)
{
byte[][] bb =
Redis.ReceiveMessages();
Mongo.Insert(new r()
{
message1 = Encoding.Default.GetString(bb[0]),
message2 = Encoding.Default.GetString(bb[1]),
message3 = Encoding.Default.GetString(bb[2]),
date=DateTime.Now
});
}
});
thread.Start();
Console.WriteLine(&quot;OK&quot;);
Console.ReadKey();
}

sqlserver保存方法
   public void Insert(string message1, string message2, string message3)
{
using (SqlConnection connection = new SqlConnection(&quot;server=localhost;database=ThreeLayer;Integrated Security=true&quot;))
{
connection.Open();
using (SqlCommand command = new SqlCommand(&quot;insert into redis(Date,Message1 , Message2, Message3) values(@d,@m1,@m2,@m3)&quot;, connection))
{
command.Parameters.Add(new SqlParameter(&quot;@d&quot;, DateTime.Now));
command.Parameters.Add(new SqlParameter(&quot;@m1&quot;, message1));
command.Parameters.Add(new SqlParameter(&quot;@m2&quot;, message2));
command.Parameters.Add(new SqlParameter(&quot;@m3&quot;, message3));
command.ExecuteScalar();
}
}
}

mongodb保存
    public static void Insert(r r)
{
string connStr = ConfigurationManager.AppSettings[&quot;MongoServerSettings&quot;];//获取连接字符串
MongoServer _server = MongoServer.Create(connStr);//创建mongodb服务对应的对象
MongoDatabase _db = _server.GetDatabase(&quot;test2&quot;);//获取数据库,如果没有,会自动创建一个
var collectionName = typeof(r).Name;//指定集合的名字
var collection = _db.GetCollection<r>(collectionName);//获取集合,如果集合不存在,那么直接创建一个
collection.Insert(r);//将数据插入到 集合里面去
}

今天到此结束,欢迎小伙伴,提意见
  



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138292-1-1.html 上篇帖子: 基于redis ae实现 Linux中的文件系统监控机制(inotify) 下篇帖子: redis安装使用和命令介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表