• Stars
    star
    479
  • Rank 91,752 (Top 2 %)
  • Language
    Python
  • License
    Other
  • Created over 8 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Python cache interface with clean API and built-in memcache & redis + asyncio support.

Ring

Join the chat at https://gitter.im/ring-cache/community

Let's concentrate on code, not on storages.

Ring shows a way to control cache in point of view of code - not about storages. Ring's decorator is convenient but also keeps fluency for general scenarios.

asyncio support for Python3.5+!

Take advantage of perfectly explicit and fully automated cache interface. Ring decorators convert your functions to cached version of them, with extra control methods.

Documentation

Full documentation with examples and references: http://ring-cache.readthedocs.io/

  • Function/method support.
  • asyncio support.
  • Django support.
  • Bulk access support.

Function cache

import ring
import memcache
import requests

mc = memcache.Client(['127.0.0.1:11211'])

# working for mc, expire in 60sec
@ring.memcache(mc, time=60)
def get_url(url):
    return requests.get(url).content

# normal way - it is cached
data = get_url('http://example.com')

It is a normal smart cache flow.

But ring is different when you want to explicitly control it.

# delete the cache
get_url.delete('http://example.com')
# get cached data or None
data_or_none = get_url.get('http://example.com')

# get internal cache key
key = get_url.key('http://example.com')
# and access directly to the backend
direct_data = mc.get(key)

Method cache

import ring
import redis

rc = redis.StrictRedis()

class User(dict):
    def __ring_key__(self):
        return self['id']

    # working for rc, no expiration
    # using json coder for non-bytes cache data
    @ring.redis(rc, coder='json')
    def data(self):
        return self.copy()

    # parameters are also ok!
    @ring.redis(rc, coder='json')
    def child(self, child_id):
        return {'user_id': self['id'], 'child_id': child_id}

user = User(id=42, name='Ring')

# create and get cache
user_data = user.data()  # cached
user['name'] = 'Ding'
# still cached
cached_data = user.data()
assert user_data == cached_data
# refresh
updated_data = user.data.update()
assert user_data != updated_data

# id is the cache key so...
user2 = User(id=42)
# still hitting the same cache
assert updated_data == user2.data()

Installation

PyPI is the recommended way.

$ pip install ring
To browse versions and tarballs, visit:
https://pypi.python.org/pypi/ring/

To use memcached or redis, don't forget to install related libraries. For example: python-memcached, python3-memcached, pylibmc, redis-py, Django etc

It may require to install and run related services on your system too. Look for memcached and redis for your system.

Contributors

See contributors list on:
https://github.com/youknowone/ring/graphs/contributors

More Repositories

1

UI7Kit

Backport flat-style UIKit from iOS7 to iOS5+
Objective-C
1,667
star
2

VisualJSON

JSON pretty-viewer for OS X.
Objective-C
302
star
3

itunes-iap

Apple iTunes In-app purchase verification tool
Python
133
star
4

FoundationExtension

Foundation/Cocoa/UIKit extension kit. Reference document:
Objective-C
121
star
5

UIKitResources

This repository includes UIKit resources of Apple iOS7.
104
star
6

methodtools

Expand functools features(lru_cache) to class - methods, classmethods, staticmethods and even for (unofficial) hybrid methods.
Python
75
star
7

apple-sys

The auto-managed -sys crate for Apple platforms using bindgen directly from build environment
Rust
53
star
8

Say

Convert text to audiable speech. Play it or save it to audio file.
Swift
26
star
9

QRQR

QRQR, the world simplest QR code decoder for iOS
Objective-C
24
star
10

hangul-romanize

Hangul romanization library for academy - 국립국어원 학술 표기법
Python
23
star
11

slairck

Slack as an IRC client
Python
19
star
12

rust-xcode-langspec

xcode langspec for rust
Shell
17
star
13

sqlite3-objc

Sqlite3 Objective-C wrapper
Objective-C
16
star
14

cdebug

Debug mode log/assertion for C/Objective-C in a file
Objective-C
15
star
15

writedown

Markdown editor with realtime preview for OS X
PHP
13
star
16

baembal

Boost ast.parse with RustPython-powered parser technology
Python
12
star
17

xcode-libcxx

The missing libc++ headers in Xcode9 (Sigh).
C++
10
star
18

result-like

Rust
9
star
19

gitstat

Simple, static gitstat generator.
HTML
9
star
20

prettyexc

Make your python exception human readable in easy way.
Python
8
star
21

isNamyang

Swift
8
star
22

python-deadlib

Python dead batteries. See PEP 594.
Python
8
star
23

libintl-alternative

Replace libintl part of gettext runtime with NSBundle localizedString: for OSX/iOS.
C
8
star
24

the-swift-programming-language-ko

7
star
25

coinwraps

Python
7
star
26

wirerope

Python
6
star
27

ObjectXML

Simple XML object model for Objective-C from NSXMLParser
Objective-C
6
star
28

brotli-file

File interface for brotli
Python
5
star
29

DropYourIcons

Create icons for App Store in a minutes / for OS X
Objective-C
5
star
30

ingress-slack

Ingress Slack bot scripts
Python
5
star
31

SocialAccountKit

Social.framework + Account.framework boilerplate kit for iOS6+
Objective-C
5
star
32

cacheobj

Python cache interface with object-property interface.
Python
4
star
33

nonghyeop

농협 서버 체험판
4
star
34

3finalnoshift

세벌식 최종 순아래 (가칭) 자판의 날개셋 설정 파일
4
star
35

hangulize-ios

iOS frontend for http://hangulize.org
Swift
4
star
36

youknowone

4
star
37

koreanbot

An IRC-bot on the easyirc
Python
4
star
38

rust-objc-abandoned

Rust
3
star
39

easyirc

Easy IRC is an IRC toolkit to develop IRC client or bot, especially for Python/IRC beginner.
Python
3
star
40

AdMobHelper

Shortcut function for AdMob
Objective-C
3
star
41

slackcode

General purpose slack outhook bot
Python
3
star
42

macciv5-ko

맥용 문명5를 위한 한국어 팩 설치
Shell
3
star
43

hangeul

Input method library for Hangeul
C++
3
star
44

gcc-arm-mac

Makefile
2
star
45

memvec

Rust
2
star
46

text-ko

2
star
47

RapidForm

RapidForm is a form generator for PHP working with only a file.
PHP
2
star
48

dinomic

Python
2
star
49

syn-ext

Human-friendly an editable extension for https://crates.io/crates/syn
Rust
2
star
50

rust-divide

Rust
1
star
51

JoseonCamera

뭐든 북한산으로 만들어주는 유용한 iOS 앱
Objective-C
1
star
52

apple-sys-prebuilt

Rust
1
star
53

codejam2019

Python
1
star
54

SayKit

Convert text to audible speech
Swift
1
star
55

macmsn-ko

맥 OS X 용 Microsoft Messenger 의 한국어 지역화 리소스
JavaScript
1
star
56

BalloonChat

Balloon chat view for Cocoa
Objective-C
1
star
57

transtool

transtool is dictionary-rewritting-base general-purpose translation copilier.
Python
1
star
58

rrcounter

C++ Round Robin Counter
C++
1
star
59

aheui-rust

Aheui interpreter in Rust
Rust
1
star
60

zxing

zxing unofficial mirror by need (http://zxing.googlecode.com/svn/trunk/)
Java
1
star
61

Digistatic

https://www.codeproject.com/Articles/307/Static-LED-control-CDigiStatic
C++
1
star
62

CaulySDK

Cauly SDK 3 with helper
Objective-C
1
star
63

redistruct

Human-friendly structured redis API wrapper.
Python
1
star
64

github-profile

Github profile generator by manually written data
CSS
1
star
65

xcodepkgtool

Simple .pkg deployment script for xcode OS X project
Shell
1
star
66

DictionaryWrapper

Objective-C
1
star
67

hangeul-rust

hangeul manipulation module for rust
Rust
1
star
68

IdealCocoa

Tiny extensions of Cocoa library
Objective-C
1
star
69

parrotim

Parrot is an Input Method for Mac OS X which speech your typing
Objective-C
1
star
70

redis-pubsub-helper

Redis pubsub non-blocking interface (With a thread).
Python
1
star