Redis简介
Redis是完全开源免费的高性能Key-Value数据库,有以下几个特点:
- Redis支持数据持久化,可以将内存中的数据保存至磁盘中,重启可以再次加载进行使用。
- Redis不仅仅支持简单的Key-Value类型的额数据,同时还提供list,set,zset(有序集合),hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis基本操作
1、字符串相关操作
方法 |
说明 |
参数 |
说明 |
示例 |
set |
设置值 |
EX |
设定缓存时间/过期时间 |
set animal 'cat' EX 5 |
|
|
|
使用多个字段设置一个值,如设置一个用户信息 |
set user:Joshua;age:24 "19950427" |
get |
获取值 |
|
|
get animal |
|
|
|
通过多个字段获取值 |
get user:Joshua;age:24 |
append |
添加字符串 |
|
|
append animal " Dog" |
mset |
添加多个值 |
|
|
mset user1 'Joshua' user2 'root' |
mget |
获取多个值 |
|
|
mget user1 user2 animal |
del |
删除 |
|
|
del del animal |
incr/decr |
增加1/减少1 |
|
|
incr numdecr num #num事先设定了值 |
2、列表相关操作
方法 |
说明 |
示例 |
rpush |
向列表的右端推入一个或多个值 |
rpush mylist Joshua |
lpush |
向列表的左端推入一个或多个值 |
lpush mylist Hello |
rpop |
移除列表最右端的元素 |
rpop mylist |
lpop |
移除列表最左端的元素 |
lpop mylist |
lindex |
查询某个偏移量的值 |
lindex mylist 0 |
lrange |
查询某个偏移量范围的元素 |
lrange mylist 0 2 |
ltrim |
截取一段值,其他值删掉 |
ltrim mylist 0 3 |
blpop |
从非空列表最左端提取并删除一个元素,或者在timeout秒内等待可以弹出的元素出现 |
blpop mylist 0 |
brpop |
从非列表最右端提取并删除一个元素,或者在timeout秒内等待可以弹出的元素出现 |
brpop mylist 0 |
rpoplpush |
从source_list右端提取并删除一个元素,加入到desc_lsit 的最左边 |
rpoplpush mylist youlist |
brpoplpush |
从source_list最右端在timeout秒内提取元素并删除,加入到desc_list的最左边,如果source_list为空,则在timeout秒内等待元素弹出 |
brpoplpjush mylist youlist 5 |
lpushx |
当key存在的时候向列表左端推入一个或多个值,否则不做任何处理 |
lpushx itslist 0 |
rpushx |
当key存在的时候向列表的右端推入一个或多个值,否则不做任何操作 |
|
3、集合相关操作
方法 |
说明 |
示例 |
sadd/srem |
集合增加一个元素/删除一个元素 |
sadd myset cat dog / srem myset cat |
smembers |
获得集合的所有元素 |
smembers myset |
sismember |
查看某个元素是否在集合中 |
sismember myset cat |
sdiff |
返回一个集合与其他集合不同的地方 |
sdiff myset1 myset2 # 注意是myset2中没有myset1的元素 |
sinter |
返回几个集合的交集 |
sinter myset1 myset2 |
sunion |
返回几个集合的并集 |
sunion myset1 myset2 |
4、散列(hash)操作
方法 |
说明 |
示例 |
hset |
设置一个散列值 |
hset News:1 title "News Title" # News:1的意思是设置id为1的News |
hget |
获取一个散列值 |
hget News:1 title |
hsetnx |
设置一个散列值,如果存在则不设置 |
hsetnx News:1 title "Title" |
hmset |
设置多个散列值 |
hmset News:1 title content "Content" is_valid 1 |
hmget |
获取多个散列值 |
hmget News:1 title content is_valid |
hdel |
删除一个散列值 |
hdel News:1 title |
hkeys |
获取所有keys |
hkeys News:1 |
hvals |
获取所有的values |
hvals News:1 |
hlen |
获取散列包含域(属性)的数量 |
hlen News:1 |
hexists |
判断是否存在 |
hexists News:1 title |
python操作string
import redis
class Test_String(object):
def __init__(self):
self.r = redis.StrictRedis(host='localhost', port=6379, db=0)
def test_set(self):
"""
设置一个值
:return:
"""
res = self.r.set('user2','Joshua')
print(res)
def test_get(self):
"""
获取一个值
:return:
"""
res = self.r.get('user2')
print(res)
def test_mset(self):
"""
设置多个键值对
:return:
"""
d = {'user3': 'qi', 'user4': 'shuai'}
res = self.r.mset(d)
print(res)
def test_mget(self):
"""
获取多个键值对
:return:
"""
d = ['user3', 'user4']
res = self.r.mget(d)
print(res)
def test_del(self):
"""
删除一个键值对
:return:
"""
res = self.r.delete('user3')
print(res)
def test_incr(self):
"""
增加1
:return:
"""
res = self.r.incr('num')
print(res)
def test_decr(self):
"""
减少1
:return:
"""
res = self.r.decr('num')
print(res)
def test_append(self):
"""
添加字符串
:return:
"""
res = self.r.append('user3','qi')
print(res)
def main():
t = Test_String()
# t.test_mset()
# t.test_mget()
# t.test_del()
# t.test_set()
# t.test_get()
# t.test_incr()
# t.test_decr()
t.test_append()
if __name__ == '__main__':
main()
python 操作列表
import redis
class Test_List(object):
def __init__(self):
self.r = redis.StrictRedis(host='localhost', port=6379, db=0)
def test_push(self):
l_eat = ['Joshua', 'Amy']
lres = self.r.lpush('eat2', *l_eat)
print(lres)
rres = self.r.rpush('eat2', *l_eat)
print(rres)
def test_pop(self):
res = self.r.lpop('eat2')
print(res)
res = self.r.rpop('eat2')
print(res)
def test_lindex(self):
# 获取某个偏移量的值
res = self.r.lindex('eat2',0)
print(res)
def test_lrange(self):
res = self.r.lrange('eat2',0,2) # 获取某段偏移量的值
print(res)
res = self.r.lrange('eat2',0,-1) # 获取列表所有值
print(res)
def test_ltrim(self):
res = self.r.ltrim('eat2', 1,2) # 窃取一段值,其他值删除掉
print(res)
res = self.r.lrange('eat2', 0, -1)
print(res)
def test_bpop(self):
res = self.r.blpop('eat2',timeout=3) # 在3秒内从列表左端删除一个元素
print(res)
res = self.r.brpop('eat2',timeout=3) # 在3秒内从列表右端删除一个元素
print(res)
def test_rpoplpush(self):
res = self.r.rpoplpush('mylist', 'youlist') # 从mylist的右端删除一个元素,添加到youlist的最左边
print(res)
def test_brpoplpush(self):
# 从mylist的右端删除一个元素,添加到youlist的最左边,如果mylist为空则等待3秒
res = self.r.brpoplpush('mylist', 'youlist',timeout=3)
print(res)
def test_pushx(self):
# 当key存在的时候才往列表左端插入一个数据
res = self.r.lpushx('youlist', 1)
print(res)
# ~右端
res = self.r.rpushx('itslist',1)
print(res)
if __name__ == '__main__':
t = Test_List()
# t.test_push()
# t.test_pop()
# t.test_lindex()
# t.test_lrange()
# t.test_ltrim()
# t.test_blpop()
# t.test_rpoplpush()
# t.test_brpoplpush()
t.test_pushx()
python操作集合
import redis
class Test_Set(object):
def __init__(self):
self.r = redis.StrictRedis(host='localhost',port=6379,db=0)
def test_sadd(self):
data = ['cat', 'dog']
res = self.r.sadd('zoo1', *data)
print(res)
res = self.r.smembers('zoo1') # 获得集合的所有元素
print(res)
def test_srem(self):
# data = ['cat', 'dog']
# res = self.r.srem('zoo', *data) # 删除多个元素
res = self.r.srem('zoo','dog') # 删除单个元素
print(res)
res = self.r.smembers('zoo')
print(res)
def test_sinter(self): # 获取两个集合的交集
res = self.r.sinter('zoo','zoo1')
print(res)
def test_sunion(self): # 获取两个集合的并集
res = self.r.sunion('zoo','zoo1')
print(res)
def test_sdiff(self): # 获取两个集合不同之处
res = self.r.sdiff('zoo','zoo1')
print(res)
if __name__ == '__main__':
t = Test_Set()
# t.test_sadd()
# t.test_srem()
# t.test_sinter()
# t.test_sunion()
t.test_sdiff()
python操作散列
import redis
class Test_Hash(object):
def __init__(self):
self.r = redis.StrictRedis(host='localhost', port=6379, db=0)
def test_hset(self): # 设置一个哈希值
res = self.r.hset('News:1', 'Title', 'News Title')
print(res)
def test_hdel(self): # 删除一个哈希值
res = self.r.hdel('News:1', 'Title')
print(res)
def test_hget(self): # 获取一个值
res = self.r.hget('News:1', 'Title')
print(res)
def test_heists(self): # 判断是否存在
res = self.r.hexists('News:1', 'Title')
print(res)
def test_hgetall(self): # 获取所有哈希
res = self.r.hgetall('News:1')
print(res)
def test_hmset(self): # 设置多个哈希
data = {'content':'this is content', 'data':'20190101'}
res = self.r.hmset('News:1', data)
print(res)
def test_hmget(self): # 获取多个哈希
fields = ['content', 'data']
res = self.r.hmget('News:1',fields)
print(res)
def test_hkeys(self): # 获取所有keys
res = self.r.hkeys('News:1')
print(res)
def test_hvalues(self): # 获取所有values
res = self.r.hvals('News:1')
print(res)
def test_hlen(self): # 获取fields的数量
res = self.r.hlen('News:1')
print(res)
def test_hsetnx(self): # 设置一个哈希值,如果存在则不设置
res = self.r.hsetnx('News:1', 'content', 'fuck')
print(res)
if __name__ == '__main__':
t = Test_Hash()
# t.test_hset()
# t.test_hdel()
# t.test_hget()
# t.test_heists()
# t.test_hgetall()
# t.test_hmset()
# t.test_hmget()
# t.test_hkeys()
# t.test_hvalues()
# t.test_hlen()
t.test_hsetnx()