public void Push(MsgItem msg) { msg = MsgHelper.GetMsgItem(msg); Queue<MsgItem> msgs; try { msgs = cache.Get<Queue<MsgItem>>(MsgKey) ?? new Queue<MsgItem>(); } catch (Exception ex) { msgs = new Queue<MsgItem>(); } msgs.Enqueue(msg); if (msgs.Count > MaxLength) { //多余的 消息放到数据库缓存 准备存到数据库中 IEnumerable<MsgItem> msgsToDBTemp = msgs.Take(msgs.Count - MaxLength).AsEnumerable<MsgItem>(); Queue<MsgItem> msgsToDB = cache.Get<Queue<MsgItem>>(DBKey) ?? new Queue<MsgItem>(); foreach (MsgItem item in msgsToDBTemp) { msgsToDB.Enqueue(msgs.Dequeue()); } if (msgsToDB.Count >= MaxLength) { //写入数据库操作 //并清0 缓存 msgsToDB.Clear(); } cache.Add(DBKey, msgsToDB); } cache.Add(MsgKey, msgs); }