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更名即可