redis python 操做 Python操做Redis數據庫

原文章於此:https://www.cnblogs.com/cnkai/p/7642787.htmlhtml

有我的修改與改正python

 

Python操做Redis數據庫

 

鏈接數據庫

StrictRedis
from redis import StrictRedisredis

#!/usr/bin/env python
# coding: utf-8

from redis import StrictRedis
from redis import ConnectionPool

# 使用默認方式1 連接到數據庫
# redis = StrictRedis(host='localhost', port=6397, db=0)

# 使用默認方式2 連接到數據庫
# pool = ConnectionPool(host='localhost', port=6397, db=0)
# redis = StrictRedis(ConnectionPool)

# 使用 url 方法1 連接到數據庫
# redis = StrictRedis.from_url(url='redis://localhost:6379/1')


# 使用url 方法2 連接到數據庫
pool = ConnectionPool.from_url('redis://@localhost:6379/1')
redis = StrictRedis(connection_pool=pool)


"""
構造url方式鏈接到數據庫,有如下三種模式:
redis://[:password]@host:port/db # TCP鏈接
rediss://[:password]@host:port/db # Redis TCP+SSL 鏈接
unix://[:password]@/path/to/socket.sock?db=db # Redis Unix Socket 鏈接
"""

 

redis 裏面具體操做

 

String操做

方法 做用 示例 示例結果
set(name, value) 給name賦值爲value redis.set(‘name’, ‘Bob’) True
get(name) 返回數據庫中key爲name的string的value redis.get(‘name’) b’Bob’
getset(name, value) 給數據庫中key爲name的string賦予值value並返回上次的value redis.getset(‘name’, ‘Mike’) b’Bob’
mget(keys, *args) 返回多個key對應的value redis.mget([‘name’, ‘nickname’]) [b’Mike’, b’Miker’]
setnx(name, value) 若是key不存在才設置value redis.setnx(‘newname’, ‘James’) 第一次運行True,第二次False
setex(name, time, value) 設置能夠對應的值爲string類型的value,並指定此鍵值對應的有效期 redis.setex(‘name’, 1, ‘James’) True
setrange(name, offset, value) 設置指定key的value值的子字符串 redis.set(‘name’, ‘Hello’) redis.setrange(‘name’, 6, ‘World’) 11,修改後的字符串長度
mset(mapping) 批量賦值 redis.mset({‘name1’: ‘Durant’, ‘name2’: ‘James’}) True
msetnx(mapping) key均不存在時才批量賦值 redis.msetnx({‘name3’: ‘Smith’, ‘name4’: ‘Curry’}) True
incr(name, amount=1) key爲name的value增值操做,默認1,key不存在則被建立並設爲amount redis.incr(‘age’, 1) 1,即修改後的值
decr(name, amount=1) key爲name的value減值操做,默認1,key不存在則被建立並設置爲-amount redis.decr(‘age’, 1) -1,即修改後的值
append(key, value) key爲name的string的值附加value redis.append(‘nickname’, ‘OK’) 13,即修改後的字符串長度
substr(name, start, end=-1) 返回key爲name的string的value的子串 redis.substr(‘name’, 1, 4) b’ello’
getrange(key, start, end) 獲取key的value值從start到end的子字符串 redis.getrange(‘name’, 1, 4) b’ello’

Key操做

方法 做用 示例 示例結果
exists(name) 判斷一個key是否存在 redis.exists(‘name’) True
delete(name) 刪除一個key redis.delete(‘name’) 1
type(name) 判斷key類型 redis.type(‘name’) b’string’
keys(pattern) 獲取全部符合規則的key redis.keys(‘n*’) [b’name’]
randomkey() 獲取隨機的一個key randomkey() b’name’
rename(src, dst) 將key重命名 redis.rename(‘name’, ‘nickname’) True
dbsize() 獲取當前數據庫中key的數目 dbsize() 100
expire(name, time) 設定key的過時時間,單位秒 redis.expire(‘name’, 2) True
ttl(name) 獲取key的過時時間,單位秒,-1爲永久不過時 redis.ttl(‘name’) -1
move(name, db) 將key移動到其餘數據庫 move(‘name’, 2) True
flushdb() 刪除當前選擇數據庫中的全部key flushdb() True
flushall() 刪除全部數據庫中的全部key flushall() True

List操做

方法 做用 示例 示例結果
rpush(name, *values) 在key爲name的list尾添加值爲value的元素,能夠傳多個 redis.rpush(‘list’, 1, 2, 3) 3,list大小
lpush(name, *values) 在key爲name的list頭添加值爲value的元素,能夠傳多個 redis.lpush(‘list’, 0) 4,list大小
llen(name) 返回key爲name的list的長度 redis.llen(‘list’) 4
lrange(name, start, end) 返回key爲name的list中start至end之間的元素 redis.lrange(‘list’, 1, 3) [b’3’, b’2’, b’1’]
ltrim(name, start, end) 截取key爲name的list,保留索引爲start到end的內容 ltrim(‘list’, 1, 3) True
lindex(name, index) 返回key爲name的list中index位置的元素 redis.lindex(‘list’, 1) b’2’
lset(name, index, value) 給key爲name的list中index位置的元素賦值,越界則報錯 redis.lset(‘list’, 1, 5) True
lrem(name, count, value) 刪除count個key的list中值爲value的元素 redis.lrem(‘list’, 2, 3) 1,即刪除的個數
lpop(name) 返回並刪除key爲name的list中的首元素 redis.lpop(‘list’) b’5’
rpop(name) 返回並刪除key爲name的list中的尾元素 redis.rpop(‘list’) b’2’
blpop(keys, timeout=0) 返回並刪除名稱爲在keys中的list中的首元素,若是list爲空,則會一直阻塞等待 redis.blpop(‘list’) [b’5’]
brpop(keys, timeout=0) 返回並刪除key爲name的list中的尾元素,若是list爲空,則會一直阻塞等待 redis.brpop(‘list’) [b’2’]
rpoplpush(src, dst) 返回並刪除名稱爲src的list的尾元素,並將該元素添加到名稱爲dst的list的頭部 redis.rpoplpush(‘list’, ‘list2’) b’2’

Set操做

方法 做用 示例 示例結果
sadd(name, *values) 向key爲name的set中添加元素 redis.sadd(‘tags’, ‘Book’, ‘Tea’, ‘Coffee’) 3,即插入的數據個數
srem(name, *values) 從key爲name的set中刪除元素 redis.srem(‘tags’, ‘Book’) 1,即刪除的數據個數
spop(name) 隨機返回並刪除key爲name的set中一個元素 redis.spop(‘tags’) b’Tea’
smove(src, dst, value) 從src對應的set中移除元素並添加到dst對應的set中 redis.smove(‘tags’, ‘tags2’, ‘Coffee’) True
scard(name) 返回key爲name的set的元素個數 redis.scard(‘tags’) 3
sismember(name, value) 測試member是不是key爲name的set的元素 redis.sismember(‘tags’, ‘Book’) True
sinter(keys, *args) 返回全部給定key的set的交集 redis.sinter([‘tags’, ‘tags2’]) {b’Coffee’}
sinterstore(dest, keys, *args) 求交集並將交集保存到dest的集合 redis.sinterstore(‘inttag’, [‘tags’, ‘tags2’]) 1
sunion(keys, *args) 返回全部給定key的set的並集 redis.sunion([‘tags’, ‘tags2’]) {b’Coffee’, b’Book’, b’Pen’}
sunionstore(dest, keys, *args) 求並集並將並集保存到dest的集合 redis.sunionstore(‘inttag’, [‘tags’, ‘tags2’]) 3
sdiff(keys, *args) 返回全部給定key的set的差集 redis.sdiff([‘tags’, ‘tags2’]) {b’Book’, b’Pen’}
sdiffstore(dest, keys, *args) 求差集並將差集保存到dest的集合 redis.sdiffstore(‘inttag’, [‘tags’, ‘tags2’]) 3
smembers(name) 返回key爲name的set的全部元素 redis.smembers(‘tags’) {b’Pen’, b’Book’, b’Coffee’}
srandmember(name) 隨機返回key爲name的set的一個元素,但不刪除元素 redis.srandmember(‘tags’)  

Sorted Set操做

方法 做用 示例 示例結果
zadd(name, args, *kwargs) 向key爲name的zset中添加元素member,score用於排序。若是該元素存在,則更新其順序 redis.zadd(‘grade’, 100, ‘Bob’, 98, ‘Mike’) 2,即添加的元素個數
zrem(name, *values) 刪除key爲name的zset中的元素 redis.zrem(‘grade’, ‘Mike’) 1,即刪除的元素個數
zincrby(name, value, amount=1) 若是在key爲name的zset中已經存在元素value,則該元素的score增長amount,不然向該集合中添加該元素,其score的值爲amount redis.zincrby(‘grade’, ‘Bob’, -2) 98.0,即修改後的值
zrank(name, value) 返回key爲name的zset中元素的排名(按score從小到大排序)即下標 redis.zrank(‘grade’, ‘Amy’) 1
zrevrank(name, value) 返回key爲name的zset中元素的倒數排名(按score從大到小排序)即下標 redis.zrevrank(‘grade’, ‘Amy’) 2
zrevrange(name, start, end, withscores=False) 返回key爲name的zset(按score從大到小排序)中的index從start到end的全部元素 redis.zrevrange(‘grade’, 0, 3) [b’Bob’, b’Mike’, b’Amy’, b’James’]
zrangebyscore(name, min, max, start=None, num=None, withscores=False) 返回key爲name的zset中score在給定區間的元素 redis.zrangebyscore(‘grade’, 80, 95) [b’Amy’, b’James’]
zcount(name, min, max) 返回key爲name的zset中score在給定區間的數量 redis.zcount(‘grade’, 80, 95) 2
zcard(name) 返回key爲name的zset的元素個數 redis.zcard(‘grade’) 3
zremrangebyrank(name, min, max) 刪除key爲name的zset中排名在給定區間的元素 redis.zremrangebyrank(‘grade’, 0, 0) 1,即刪除的元素個數
zremrangebyscore(name, min, max) 刪除key爲name的zset中score在給定區間的元素 redis.zremrangebyscore(‘grade’, 80, 90) 1,即刪除的元素個數

Hash操做

方法 做用 示例 示例結果
hset(name, key, value) 向key爲name的hash中添加映射 hset(‘price’, ‘cake’, 5) 1,即添加的映射個數
hsetnx(name, key, value) 向key爲name的hash中添加映射,若是映射鍵名不存在 hsetnx(‘price’, ‘book’, 6) 1,即添加的映射個數
hget(name, key) 返回key爲name的hash中field對應的value redis.hget(‘price’, ‘cake’) 5
hmget(name, keys, *args) 返回key爲name的hash中各個鍵對應的value redis.hmget(‘price’, [‘apple’, ‘orange’]) [b’3’, b’7’]
hmset(name, mapping) 向key爲name的hash中批量添加映射 redis.hmset(‘price’, {‘banana’: 2, ‘pear’: 6}) True
hincrby(name, key, amount=1) 將key爲name的hash中映射的value增長amount redis.hincrby(‘price’, ‘apple’, 3) 6,修改後的值
hexists(name, key) key爲namehash中是否存在鍵名爲key的映射 redis.hexists(‘price’, ‘banana’) True
hdel(name, *keys) key爲namehash中刪除鍵名爲key的映射 redis.hdel(‘price’, ‘banana’) True
hlen(name) 從key爲name的hash中獲取映射個數 redis.hlen(‘price’) 6
hkeys(name) 從key爲name的hash中獲取全部映射鍵名 redis.hkeys(‘price’) [b’cake’, b’book’, b’banana’, b’pear’]
hvals(name) 從key爲name的hash中獲取全部映射鍵值 redis.hvals(‘price’) [b’5’, b’6’, b’2’, b’6’]
hgetall(name) 從key爲name的hash中獲取全部映射鍵值對 redis.hgetall(‘price’) {b’cake’: b’5’, b’book’: b’6’, b’orange’: b’7’, b’pear’: b’6’}

RedisDump & Redis-load 數據導出 和 數據導入

    • redis-load
      將數據導入到數據庫中
    • redis-dump 將數據導出 (redis-dump 工具是用ruby 寫的。因此係統安裝完畢ruby後,要用ruby的gem install redis-dump 來導出數據庫。  redis-dump -u :passwd@127.0.0.1:6379 >test.json

 

redis-load 操做以下數據庫

# 使用Unix pip 方式導入數據
# cat test.json | redis-load -u :password@127.0.0.1:6379 
# 或者這樣 使用Unix 重定向操做
# redis-load -u :password@127.0.0.1:6379 < test.json

 

 

 redis-dump 操做以下json

安裝redis-dump[root@bogon ~] yum install ruby rubygems ruby-devel   //安裝rubygems 以及相關包 (redhat 系列系統,或者debian用apt等)
   
[root@bogon ~] gem sources -a http://gems.ruby-china.org/   //源,ruby china加入,外面的源不能訪問 
http://gems.ruby-china.org/ added to sources 
   
[root@bogon ~] gem install redis-dump -V
 redis-dump導出數據
[root@bogon ~] telnet 127.0.0.1 6379
Trying 127.0.0.1... 
Connected to 127.0.0.1. 
Escape character is '^]'. 
set test 11 //設置一個值 
+OK 
get test //取值 
$2 
11
[root@bogon ~] redis-dump -u :passwd@127.0.0.1:6379 >test.json

這就將數據庫內容導出到 test.json 裏面了ruby

相關文章
相關標籤/搜索