Logo

0x5a.live

for different kinds of informations and explorations.

GitHub - yysskk/MemoryCache: LRU, type-safe, thread-safe memory cache class in Swift

LRU, type-safe, thread-safe memory cache class in Swift - yysskk/MemoryCache

Visit SiteGitHub - yysskk/MemoryCache: LRU, type-safe, thread-safe memory cache class in Swift

GitHub - yysskk/MemoryCache: LRU, type-safe, thread-safe memory cache class in Swift

LRU, type-safe, thread-safe memory cache class in Swift - yysskk/MemoryCache

Powered by 0x5a.live ๐Ÿ’—

MemoryCache

CI Status codecov Version License Platform

Overview

MemoryCache is a memory cache class in swift.

  • The MemoryCache class incorporates LRU policies, which ensure that a cache doesnโ€™t use too much of the systemโ€™s memory. If memory is needed by other applications, it removes some items from the cache, minimizing its memory footprint.
  • You can add, remove, and query items with expiration in the cache from different threads without having to lock the cache yourself. ( thread-safe )
  • Unlike the NSCache class, the cache guarantees a type by its key. ( type-safe )
let memoryCache = MemoryCache.default // or initialize

// Defining a string (or hash) key for a dog value.
let dogKey = StringKey<Dog>("dog")

// Setting a dog value in memoryCache.
memoryCache.set(dog, for: dogKey)

// Getting a cached dog value in memoryCache.
let cachedDog = try? memoryCache.value(for: dogKey)

// Removing a cached dog value in memoryCache.
memoryCache.remove(for: dogKey)

Usage

Basic

Defining keys

let dogKey = StringKey<Dog>("dog")

Adding a Cached Value

memoryCache.set(dog, for: dogKey)

Getting a Cached Value

let dog = try? memoryCache.value(for: dogKey)

Removing Cached Values

  • Removes the cache of the specified key.
memoryCache.remove(for: dogKey)
  • Removes the cache of the specified key if it expired.
memoryCache.removeIfExpired(for: dogKey)
  • Removes All.
memoryCache.removeAll()

Others

Properties

/// The maximum total cost that the memoryCache can hold before it starts evicting caches.
var totalCostLimit: Int

/// The maximum number of caches the memoryCache should hold.
var countLimit: Int

/// The total cost of values in the memoryCache.
var totalCost: Int

/// The number of values in the memoryCache.
var count: Int

/// A Boolean value indicating whether the memoryCache has no values.
var isEmpty: Bool

Implement delegate

import MemoryCache

class SomeClass: NSObject, MemoryCacheDelegate {

    let memoryCache: MemoryCache
    
    init() {
        memoryCache = MemoryCache.default
        
        ...
        
        super.init()

        memoryCache.delegate = self
    }
    
    func memoryCache(_ memoryCache: MemoryCache, willEvict cache: Any) {
        // Called when an cache is about to be evicted or removed from the memoryCache.
    }
}

Expiration date

You can specify expiration date for cache. The default expiration is .never.

/// The expiration date is `.never`.
memoryCache.set(dog, for: dogKey, expiration: .never)

/// The expiration date is `.seconds("""10s""")`.
memoryCache.set(dog, for: dogKey, expiration: .seconds(10))

/// The expiration date is `.date("""TOMORROW""")`.
memoryCache.set(dog, for: dogKey, expiration: .date(Date().addingTimeInterval(60 * 60 * 24)))

/// Remove the cache of the specified key if it expired.
memoryCache.removeIfExpired(for: dogKey)

Requirements

  • Swift 4.2 ~
  • Xcode 10.1 ~

Installation

CocoaPods

MemoryCache is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'MemoryCache'

Carthage

You can integrate via Carthage, too. Add the following line to your Cartfile :

github "yysskk/MemoryCache"

and run carthage update

Author

Yusuke Morishita

Support via PayPal

License

MemoryCache is available under the MIT license. See the LICENSE file for more info.

Swift Resources

are all listed below.

Resources

listed to get explored on!!

Made with โค๏ธ

to provide different kinds of informations and resources.