python:redis操作、redis移行

13984 ワード

一、データベース:
データベースはリレーショナル、非リレーショナルに分けられます(No sql)
関係型:mysql、Oracal
  1.sqlでクエリーするには、各テーブル間で連絡します.
  2.非リレーショナル・データベースに比べて速度が遅い
非関係型:mangoDB、redis、memcacheなど
  1.sqlクエリーは適用されません
  2.値の格納方法はkey=valueの形式であり、データ型は制限されません.
  3.スピードが速い
redis:データはメモリに存在し、サーバのメモリサイズに応じて毎秒10万回の読み書きをサポート
欠点:サーバーが停止したり再起動したりすると、なくなります.
頻繁に適用されるデータベースはredisに置くことができ、再起動するとなくなるため、キャッシュデータベースとして一般的に使用されます.
二、redisデータベース操作:
1.redisへの接続:
import redis
r=redis.Redis(host='128.14.3.40',password='HK1bc&*',db=1,decode_responses=True)#db   0  ,          ,     。                  
#           bytes,  decode_responses=True ,             ,    
redis string    :
# TTL:      ,      ,  redis      ttl=-1  ,      ,  redis  


stringタイプ操作
2、データの挿入
#1、    :set()
r.set('xiaoming','11') #  、    ,key,value
r.set('baibai','haha',30)#              ,   S
r.set('hm:hmin','12346')#   ,            。                  。   get      'hm:hmin'
r.set('hm:xiaobai','345678')
r.set('hm:xiaohei:xiao','345678')   #          

3、データを取得する:
print(r.get('nick')) # key ,  value.     bytes  
print(r.get('nick').decode())#     
print(r.keys())#         key,key            
print(r.keys('xx*'))  #   XX     *xx*:  ,xx*: xx  , ,*xx xx  
print(r.exists('jjjj'))   #  key     ,  1, 0 ,1  ,0   

4.データの削除
r.delete('key')  # key ,     key
r.flushdb()   #         key
r.flushall() #           key

5.登録、登録練習:
(1)ユーザを登録し,ユーザ名,パスワードを入力する.パスワードには暗号文が必要です.登録後にredisに存在します.
(2)ログインして、アカウントのパスワードが存在し、正しくログインすることができます.
import hashlib  #      
def reg():
    #  
    username=inpurt("     ").strip()
    password=inpurt("     ").strip()
    if r.get(username):    #        
        print('     ')
    else:
        m=hashlib.md5(password.encode())
        new_password=m.hexdigest()
        r.set(username,new_password)
        print('')

def login():
    #  
    username = input('username:').strip()
    password = input('password:').strip()
    p=r.get(username)            #    
    if p:
       m=hashlib.md5(p.encode()) 
       new_password=m.hexdigest()
       if p ==new_password:
           print('    ')
      elseprint('    ')
   else:
       print('     ')           

hashタイプ操作
1.hashタイプの構造:
データ構造:Key:key:value cnz={'cnz':{'hm':'12345','hh':'3456'},同じタイプのkeyを大きなkeyに入れることができます
2.データの挿入:
r.hset('cnzUser','hanm','123456')#hset()    :(   key,   key,value)。            
r.hset('cnzUser','hn','123456')    #     ,      
print(r.hmset('cnzUser',{'guoya':'12345','hn':'4567890'}))     #    key   Key,value
#
r.expire('cnzUser',60)   # key ,     。 string     
#

3、データの削除
r.hdel('cnzUser','hn')   #  cnzUser hn key
r.delete('cnzUser')             #      key

4.データの取得
print(r.hget('cnzUser','hn'))  #    :( key, key)
print(r.hgetall('cnzUser'))    #   Key   Key,value。    

5.表示タイプ
print(r.type('cnzUser'))    #type()    
print(r.type('xx_:1:xiaohei'))

#redisメモリがいっぱいになると、あまり使わないデータが自動的に削除されます
三、redis移行
# a redis ---> b redis#1.リンクa,b redis#aからすべてのkey#を取得aからkeyのvalues#setからb redisへ
import redis

a = redis.Redis(host='128.14.3.220',password='HK449bc&*',
                db=15,decode_responses=True) #0-16
b = redis.Redis(host='128.14.3.220',password='HK449bc&*',
                db=10,decode_responses=True) #0-16

for k in a.keys():   #
    if a.type(k)=='string':
        value=a.get(k)
        b.set(k,value)
    elif b.type(k)=='hash':
        all_data=a.hgetall(k)   #   Key      
        b.hmset(k,all_data) #      
    else:
        print('')

 
転載先:https://www.cnblogs.com/hancece/p/11126662.html