Gérez les clés Base91 avec python + redis.

Je souhaite raccourcir facilement la longueur de clé de Redis.

Je veux pouvoir mettre des milliards de types de données dans Redis à une certaine demande commerciale. À ce moment-là, je veux rendre la clé aussi courte que possible. ... Résumé de l'encodage "Base N" J'ai remarqué.

Si vous utilisez Base91, vous pouvez utiliser 7 caractères.

919191919191 >909090909090 = 531,441,000,000> 500B = 500 milliards de voies

Par conséquent, même si le premier caractère est limité à l'alphabet, il est possible d'exprimer le type de clé de mille milliards de chiffres. Ci-dessous, je vais laisser un rapport à quelqu'un qui est (super) occupé qui doit faire quelque chose de similaire. Accédez à redis via python2 (2.7.13).

Chaîne de caractères utilisée dans "Encodage Base91"

Comme suit: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~"

Si défini en python.

C'est comme ça?

baseNN.py


base90 ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~"
base91=base90 + '"'

Test d'entrée de la chaîne de caractères Base91 à redis.

Lancez redis et écrivez les enfants abandonnés.

code python2

test_base91.py


from __future__ import absolute_import
from __future__ import unicode_literals

import redis
import time

r = redis.StrictRedis(host='localhost', port=6379, db=0)

#Base91 encoding 
#ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~"
base90 ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~"
base91=base90 + '"'

#for baseNN (1 <= N <= 95) 
baseNN=base91
LNN = len(baseNN)
test ="test!#$%&()*+,./:;<=>?@[]^_`{|}~"

start = time.time()
print "Insert to redis:"
with r.pipeline() as pipe:
    for key in range(LNN):
        val = baseNN[key]
        #cf "print string," http://www.lifewithpython.com/2013/12/python-print-without-.html
        print key, val, ";",
        pipe.hset(test, key,val)
        pipe.hset(test, val,key)
    pipe.execute()
stop = time.time()

def test_hget(k):
    ret = r.hget(test,k)
    print k,"->",ret, "   ",
print
print "time",(stop - start)
print "Test reads:" 

for key in range(LNN):
    test_hget(key)
    val = baseNN[key]
    test_hget(val)
    print 

résultat

Les données d'entrée à redis comme valeur clé de hachage:

Insert to redis: 0 A ; 1 B ; 2 C ; 3 D ; 4 E ; 5 F ; 6 G ; 7 H ; 8 I ; 9 J ; 10 K ; 11 L ; 12 M ; 13 N ; 14 O ; 15 P ; 16 Q ; 17 R ; 18 S ; 19 T ; 20 U ; 21 V ; 22 W ; 23 X ; 24 Y ; 25 Z ; 26 a ; 27 b ; 28 c ; 29 d ; 30 e ; 31 f ; 32 g ; 33 h ; 34 i ; 35 j ; 36 k ; 37 l ; 38 m ; 39 n ; 40 o ; 41 p ; 42 q ; 43 r ; 44 s ; 45 t ; 46 u ; 47 v ; 48 w ; 49 x ; 50 y ; 51 z ; 52 0 ; 53 1 ; 54 2 ; 55 3 ; 56 4 ; 57 5 ; 58 6 ; 59 7 ; 60 8 ; 61 9 ; 62 ! ; 63 # ; 64 $ ; 65 % ; 66 & ; 67 ( ; 68 ) ; 69 * ; 70 + ; 71 , ; 72 . ; 73 / ; 74 : ; 75 ; ; 76 < ; 77 = ; 78 > ; 79 ? ; 80 @ ; 81 [ ; 82 ] ; 83 ^ ; 84 _ ; 85 ` ; 86 { ; 87 | ; 88 } ; 89 ~ ; 90 " ; time 0.020693063736

Lecture des valeurs de clé Base91 à partir de redis:

Testreads:
0 -> 52     A -> 0    
1 -> 53     B -> 1    
2 -> 54     C -> 2    
3 -> 55     D -> 3    
4 -> 56     E -> 4    
5 -> 57     F -> 5    
6 -> 58     G -> 6    
7 -> 59     H -> 7    
8 -> 60     I -> 8    
9 -> 61     J -> 9    
10 -> K     K -> 10    
11 -> L     L -> 11    
12 -> M     M -> 12    
13 -> N     N -> 13    
14 -> O     O -> 14    
15 -> P     P -> 15    
16 -> Q     Q -> 16    
17 -> R     R -> 17    
18 -> S     S -> 18    
19 -> T     T -> 19    
20 -> U     U -> 20    
21 -> V     V -> 21    
22 -> W     W -> 22    
23 -> X     X -> 23    
24 -> Y     Y -> 24    
25 -> Z     Z -> 25    
26 -> a     a -> 26    
27 -> b     b -> 27    
28 -> c     c -> 28    
29 -> d     d -> 29    
30 -> e     e -> 30    
31 -> f     f -> 31    
32 -> g     g -> 32    
33 -> h     h -> 33    
34 -> i     i -> 34    
35 -> j     j -> 35    
36 -> k     k -> 36    
37 -> l     l -> 37    
38 -> m     m -> 38    
39 -> n     n -> 39    
40 -> o     o -> 40    
41 -> p     p -> 41    
42 -> q     q -> 42    
43 -> r     r -> 43    
44 -> s     s -> 44    
45 -> t     t -> 45    
46 -> u     u -> 46    
47 -> v     v -> 47    
48 -> w     w -> 48    
49 -> x     x -> 49    
50 -> y     y -> 50    
51 -> z     z -> 51    
52 -> 0     0 -> 52    
53 -> 1     1 -> 53    
54 -> 2     2 -> 54    
55 -> 3     3 -> 55    
56 -> 4     4 -> 56    
57 -> 5     5 -> 57    
58 -> 6     6 -> 58    
59 -> 7     7 -> 59    
60 -> 8     8 -> 60    
61 -> 9     9 -> 61    
62 -> !     ! -> 62    
63 -> #     # -> 63    
64 -> $     $ -> 64    
65 -> %     % -> 65    
66 -> &     & -> 66    
67 -> (     ( -> 67    
68 -> )     ) -> 68    
69 -> *     * -> 69    
70 -> +     + -> 70    
71 -> ,     , -> 71    
72 -> .     . -> 72    
73 -> /     / -> 73    
74 -> :     : -> 74    
75 -> ;     ; -> 75    
76 -> <     < -> 76    
77 -> =     = -> 77    
78 -> >     > -> 78    
79 -> ?     ? -> 79    
80 -> @     @ -> 80    
81 -> [     [ -> 81    
82 -> ]     ] -> 82    
83 -> ^     ^ -> 83    
84 -> _     _ -> 84    
85 -> `     ` -> 85    
86 -> {     { -> 86    
87 -> |     | -> 87    
88 -> }     } -> 88    
89 -> ~     ~ -> 89    
90 -> "     " -> 90    

Du côté du terminal:

./redis-cli 127.0.0.1:6379> keys *

  1. "test!#$%&()*+,./:;<=>?@[]^_`{|}~"

D'accord ♪

Recommended Posts

Gérez les clés Base91 avec python + redis.
Gérez Excel avec python
Manipuler rabbimq avec python
[Astuces] Gérez Athena avec Python
Gérez facilement les listes avec python + sqlite3
Gérer les fichiers Excel CSV avec Python
Essayer de gérer SQLite3 avec Python [Note]
[python, openCV] base64 Reconnaissance faciale dans les images
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Gérer les fichiers zip avec des noms de fichiers japonais dans Python 3
[Rust / Python] Gérer numpy avec PyO3 (version d'août 2020)
[Python] Comment gérer les caractères japonais avec openCV
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Je veux gérer l'optimisation avec python et cplex
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Grattage avec Python + PhantomJS
Publier des tweets avec python
Conduisez WebDriver avec python
Utiliser mecab avec Python 3
[Python] Redirection avec CGIHTTPServer
Analyse vocale par python