python操作redis數據庫:string,list,set,hash

Mac 下安裝Redis 圖形化管理工具 Redis DeskTop Manager–rdm:
鏈接:https://pan.baidu.com/s/1eFPf4mzVtdPNIJ9TgwzXKA 密碼:3kce

redis主要存儲類型:字符串,散列,列表,集合,有序集合
啓動數據庫:

$ src/redis-server
$ src/redis-cli

字符串

set --設置值

get – 獲取值

mset --設置多個鍵值對

mget --獲取多個鍵值對

append --添加字符串

del --刪除

incr/decr 增加減少1

列表

lpush/rpush 從左/右插入數據

lrange 獲取指定長度的數據

ltrim 截取一段長度的數據

lpop/rpop 移除最左/最右元素並返回

lpushx/rpushx key存在的時候才插入數據,不存在時不做任何處理

集合

sadd/srem 添加刪除元素

sismember 判斷是否爲set的一個元素

smembers 返回集合的所有成員

sdiff 返回一個集合與其他其他集合的差異

sinter 返回集合的交集

sunion 返回集合的並集

散列

hset/hget 設置獲取散列值

hmset/hmget 設置獲取多對散列值

hsetnx 如果散列存在則不設置

hkeys/hvals 返回所有keys/values

hlen 返回散列包含域field的數量

hdel 刪除散列指定的域

hexists 判斷是否存在

python操作redis

import redis

class RedisBase(object):
    def __init__(self):
        self.r = redis.StrictRedis(host="localhost", port=6379, db=0)

class StringRedis(RedisBase):
    def test_set(self):
        self.r.set('step1','stringRedis')
    def test_get(self):
        print(self.r.get('step1'))

    def test_mset(self):
        d = {
            'name':'ann',
            'age':19,
            'score':20
        }
        self.r.mset(d)
    def test_mget(self):
        list = ['name','age','score']
        print(self.r.mget(list))

    def test_append(self):
        self.r.append('mary','girl')
        print(self.r.get('mary'))
    def test_del(self):
        self.r.delete('name')
        print(self.r.get('name'))
    def test_incr(self):
        self.r.set("ten",10)
        self.r.incr('ten')
        print(self.r.get('ten'))
        self.r.decr('ten')
        print(self.r.get('ten'))

def string_main():
    string_obj = StringRedis()
    string_obj.test_set()
    string_obj.test_get()
    string_obj.test_mset()
    string_obj.test_mget()
    string_obj.test_append()
    string_obj.test_del()
    string_obj.test_incr()
    '''
    b'stringRedis'
    [b'ann', b'19', b'20']
    b'girlgirlgirl'
    None
    b'11'
    b'10'
    '''

class listRedis(RedisBase):
    def test_push(self):
        list = ['one','two','three']
        self.r.lpush('list2',*list)
        print(self.r.lrange('list2', 0, -1))
        list = ['ann','mary','ed']
        self.r.rpush('list2',*list)
        print(self.r.lrange('list2', 0, -1))
    def test_pop(self):
        self.r.lpop('list2')
        print(self.r.lrange('list2', 0, -1))
        self.r.rpop('list2')
        print(self.r.lrange('list2', 0, -1))
    def test_trim(self):
        print(self.r.ltrim('list2',0,2))

def list_main():
    list_obj = listRedis()
    # list_obj.test_push()
    # list_obj.test_pop()
    list_obj.test_trim()

    '''
    [b'three', b'two', b'one']
    [b'three', b'two', b'one', b'ann', b'mary', b'ed']
    [b'two', b'one', b'ann', b'mary', b'ed']
    [b'two', b'one', b'ann', b'mary']
    True
    '''

class setRedis(RedisBase):
    def test_sdd(self):
        l1 = ['apple','orange','pear']
        l2 = ['orange','banana','pear']
        self.r.sadd('ff1',*l1)
        self.r.sadd('ff2',*l2)
        print(self.r.smembers('ff1'))
        print(self.r.smembers('ff2'))
        print(self.r.sinter('ff1','ff2'))
        print(self.r.sunion('ff1','ff2'))
    def test_del(self):
        self.r.srem('ff1','orange')
        print(self.r.smembers('ff1'))

def set_main():
    set_obj = setRedis()
    # set_obj.test_sdd()
    '''
    {b'apple', b'pear', b'orange'}
    {b'banana', b'pear', b'orange'}
    {b'pear', b'orange'}
    {b'banana', b'apple', b'pear', b'orange'}
    '''
    set_obj.test_del()
    '''
    {b'apple', b'pear'}
    '''

class hashRedis(RedisBase):
    def test_hset(self):
        self.r.hset('ann','score',99)
        print(self.r.hget('ann','score'))
        d = {
            'sex':'girl',
            'score':100,
            'is_Student':True
        }
        self.r.hmset('mary2',d)
        # print(self.r.hmget('mary','sex','score'))
        print(self.r.hmget('mary2','sex','score','is_Student'))
        print(self.r.hgetall('mary2'))
        '''
        b'99'
        [b'girl', b'100', b'True']
        {b'sex': b'girl', b'score': b'100', b'is_Student': b'True'}
        '''

def hash_main():
    hash_obj = hashRedis()
    hash_obj.test_hset()

if __name__ == '__main__':
    # list_main()
    # set_main()
    hash_main()
    # string_main()



遇到的bug:

1、

redis.exceptions.DataError: Invalid input of type: 'tuple'. Convert to a bytes, string, int or float first.

在向列表類型傳值時,提示只能傳入字符串,整型,浮點型。

redis升級到3.0後僅接受用戶數據爲字節、字符串或數字(整數,長整數和浮點數),嘗試將鍵或值指定爲任何其他類型將引發DataError異常。

所以需要將redis降級:pip install redis==2.10.6

2、

redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value

設置值時出現了相同的key,將key更名即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章