Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Language Pod Version Pod Platform Carthage Compatible License

Track is a thread safe cache write by Swift. Composed of DiskCache and MemoryCache which support LRU.

Features

  • Thread safe: Implement by dispatch_semaphore_t lock and DISPATCH_QUEUE_CONCURRENT. Cache methods are thread safe and no deadlock.

  • LRU: Implement by linkedlist, it`s fast. You can manage a cache through functions to limit size, age of entries and memory usage to eliminate least recently used object.

  • Support async and sync operation.

  • Cache implement SequenceType Generator, support subscrip for ... in map flapmap filter...

Use

Base use

Support Sync and Async Set, Get, RemoveObject, RemoveAll and Subscript.

let track = Cache.shareInstance

track.set(object: "object", forKey: "key")

track.object(forKey: "key")

track.removeObject(forKey: "key") { (cache, key, object) in }

track.removeAllObjects { (cache, key, object) in }

track["key"] = "object"

print(track["key"])

Other use

MemoryCache and DiskCache has feature of LRU, so they can eliminate least recently used object according countLimit, costLimit and ageLimit.

let diskcache = DiskCache.shareInstance

diskcache.countLimit = 20

diskcache.costLimit = 1024 * 10

let memorycache = MemoryCache.shareInstance

memorycache.trim(toAge: 1000) { (cache, key, object) in }

memorycache.trim(toCount: 10) { (cache, key, object) in }

New features: SequenceType Generator

Cache support thread safe for ... in map forEache...

let cache: Cache = Cache.shareInstance

for i in 1 ... 5 {
    cache.set(object: "\(i)", forKey: "\(i)")
}

for object in cache {
    print(object)
}
output: ("5", 5) ("4", 4) ("3", 3) ("2", 2) ("1", 1)
cache.forEach {
    print($0)
}
output: ("1", 1) ("2", 2) ("3", 3) ("4", 4) ("5", 5)
let values = cache.map { return $0 }

print(values)
output: [("5", 5), ("4", 4), ("3", 3), ("2", 2), ("1", 1)]

Installation

CocoaPods

Support Swift 5.0

pod 'Track', :git => 'https://github.com/maquannene/Track.git', :branch => 'master'

Manually

  1. Download and drop /Track folder in your project.
  2. Congratulations!

Thanks

Thanks YYCache,PINCache very much. Some ideas from them.

License

Track is released under the MIT license.

如果来自天朝点击查看更多实现细节文章

About

Track is a thread safe cache write by Swift. Composed of DiskCache and MemoryCache which support LRU.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages