From c8a641dd784c071f83a0d90c35f617607fd0811b Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期日, 20 十月 2024 02:26:01 +0800 Subject: [PATCH] 修改楼层缓存为双向链表 --- nvcs/cache.go | 29 +++++++++++++++++++++-------- 1 files changed, 21 insertions(+), 8 deletions(-) diff --git a/nvcs/cache.go b/nvcs/cache.go index e792c55..1c78d93 100644 --- a/nvcs/cache.go +++ b/nvcs/cache.go @@ -1,6 +1,7 @@ package nvcs import ( + "container/list" "fmt" "time" @@ -10,13 +11,13 @@ ) type simpleCache struct { - data map[int64]elevatorRunData + data *list.List expiration time.Duration } func newCache(expiration time.Duration) *simpleCache { return &simpleCache{ - data: make(map[int64]elevatorRunData), + data: list.New(), expiration: expiration, } } @@ -31,9 +32,12 @@ data.Floor = gRFIDFloor } + lastData := c.data.Back() + + c.data.PushBack(data) // 濡傛灉妤煎眰鐩稿悓锛屽苟涓旀暟鎹湪1绉掑唴锛屽垯蹇界暐 - if existingData, ok := c.data[data.Timestamp]; ok { - if existingData.Floor == data.Floor { + if lastData.Value.(elevatorRunData).Timestamp == data.Timestamp { + if lastData.Value.(elevatorRunData).Floor == data.Floor { return } } @@ -72,14 +76,23 @@ go addFloorToOSD(floorText) } - c.data[data.Timestamp] = data + c.data.PushBack(data) } // 鍒犻櫎杩囨湡鏁版嵁 func (c *simpleCache) cleanExpired() { - for t := range c.data { - if time.Since(time.Unix(t, 0)) > c.expiration { - delete(c.data, t) + now := time.Now() + + // 浠庨槦鍒楀ご閮ㄥ紑濮嬫鏌ユ槸鍚︽湁杩囨湡鏁版嵁 + for c.data.Len() > 0 { + elem := c.data.Front() // 鑾峰彇闃熷垪澶撮儴鐨勫厓绱� + item := elem.Value.(elevatorRunData) + if now.Sub(time.Unix(item.Timestamp, 0)) > c.expiration { + // 濡傛灉鏁版嵁宸茬粡杩囨湡锛屽垯浠庨槦鍒椾腑鍒犻櫎 + c.data.Remove(elem) + } else { + // 鍥犱负鏁版嵁鎸夋椂闂撮『搴忓瓨鍌紝閬囧埌涓嶈繃鏈熺殑鏁版嵁鍚庡氨鍙互鍋滄妫�鏌� + break } } } -- Gitblit v1.8.0