记录redis中string和list一些常用方法的练习:
import redis
import time
def connectRedis():
#decode_responses=True使数据避免为byte格式b'xxx', db=index:可以用来切换redis的不同数据库。
pool = redis.ConnectionPool(host='127.0.0.1',port=6379, decode_responses=True,db=1)
r = redis.Redis(connection_pool=pool)
return r
if __name__ == "__main__":
'''
链接:
1、关于redis持久化的问题:
查看redis持久化的一些信息:https://www.yzlfxy.com/system/redis/326151.html
redis持久化配置的两种方式:
'''
'''
疑问:
为什么redis断开连接或者重启,数据不消失?并未开启持久化
'''
'''
CMD命令:
开启redis,redis目录下cmd执行: redis-server.exe redis.windows.conf
在redis目录下打开一个新的cmd,连接redis进行cmd操作: redis-cli.exe -h 127.0.0.1 -p 6379
查询当前redis数据库存储的数据: keys *
切换redis数据库,index为要切换的数据库索引,默认配置16个数据库: select index
'''
'''
基本命令String:
set(name, value, ex=None, px=None, nx=False, xx=False)
在 Redis 中设置值,默认,不存在则创建,存在则修改。
参数:
ex - 过期时间(秒)
px - 过期时间(毫秒)
nx - 如果设置为True,则只有name不存在时,当前set操作才执行
xx - 如果设置为True,则只有name存在时,当前set操作才执行
'''
'''set(name, value, ex=None, px=None, nx=False, xx=False)不同参数的使用'''
# r = connectRedis()
# r.set('name','Jack',ex=3) #ex为过期时间
# print(r.get('name'))
# # time.sleep(4)
# # print(r.get('name')) #None
# r.set('name','Tom',nx=True,ex=3)
# print(r.get('name')) #name已存在,不执行set,输出为jack
# r.set('name','Locky',xx=True,ex=3)
# print(r.get('name')) #name已存在,执行set,输出为Locky
# time.sleep(4)
# r.set('name','Carry',xx=True,ex=3)
# print(r.get('name')) #name不存在,不执行set,输出为None
# '''mset()一次性设置多个键值对,但无法设置过期时间'''
# #批量设置值
# r.mset({'k1':'v1', 'k2':'v2'})
# print(r.mget("k1","k2"))
# keydict = {'key1':325,'key2':'age'}
# r.mset(keydict)
# keylist = ['key1','key2']
# #批量获取
# print(r.mget(keylist)) #返回['325', 'age']
# print(r.mget('key1','key2')) #返回['325', 'age']
'''
基本命令hash:
hset(name, key, value)
name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
参数:
name - redis的name
key - name对应的hash中的key
value - name对应的hash中的value
'''
# r=connectRedis()
# r.hset("hash1", "k1", "v1")
# r.hset('hash1', 'k2', 'v2')
# print(r.hkeys('hash1')) #hkeys(name):取出hash中所有的key
# print(r.hget('hash1', 'k1')) #hget(name, key):单个取hash得key对应的值
# print(r.hmget('hash1','k1','k2')) #hmget(name, keys): 多个取hash的key对应的值
# r.hsetnx("hash1", "k2", 'v3') #hsetnx(name, key, value),只有在key不存在时,新建!不更新已经有key
# print(r.hget("hash1","k2"))
#批量增加和取出
'''
hmset(name, mapping)
在name对应的hash中批量设置键值对
参数:
name - redis的name
mapping - 字典,如:{'k1':'v1', 'k2': 'v2'}
'''
# r=connectRedis()
# r.hmset("hash2",{"k2":"v2","k3":"v3"}) #批量设置1
# print(r.hget("hash2", "k2")) #取单个hash的key所对应的值,str
# hashDict = {"key1":"cc","key2":'bb'}
# r.hmset('hash2', hashDict) #批量设置2
# print(r.hmget('hash2',"k2","k3","key1")) #批量取多个key的值,返回list
# print(r.hmget('hash2', ['k2','k3','key1'])) #批量取多个key的值,返回list
# print(r.hgetall('hash2')) #取出所有键值对,返回dict
# print(r.hlen('hash2')) #获取name对应的hash中键值对的个数
# print(r.hkeys("hash2")) #hkeys(name):得到所有的keys,返回List
# print(r.hvals("hash2")) #hvals(name):得到所有的value,返回List
# print(r.hexists('hash2',"k2")) #hexists(name, key):判断key是否存在,返回True或False
# print(r.hdel('hash2','k2')) #将name对应的hash中指定key的键值对删除
# print(r.hdel('hash2','k3','key1')) #hdel(name,*keys),删除多个
# print(r.hgetall('hash2'))
'''
redis基本命令list:
'''
'''1.增加(类似于list的append,只是这里是从左边新增加)--没有就新建。
在name对应的list中添加元素,每个新的元素都添加到列表的最左边:lpush(name,values)'''
# r = connectRedis()
# r.lpush("list1", 11, 22, 33) #lpush(name,values),保存顺序为['33','22','11']
# r.lpush('list1', 10) #会添加到列表的最左边:['10','33','22','11']
# print(r.lrange('list1', 0, -1)) #lrange(name,start,end),切片取值: 0表示第一个元素,-1表示最后一个元素
'''2.增加(从右边增加)--没有就新建:rpush(name,values)'''
# r = connectRedis()
# r.rpush("list2", 44,45,66) #rpush(name,values), 在列表的右边,依次添加。
# print(r.llen("list2")) #列表长度
# print(r.lrange("list2",0,-1))
'''3.往已有的name的列表的左边添加一个元素,没有的话就无法创建:lpushx(name,value)'''
# r = connectRedis()
# r.lpushx("list10",10) #list10不存在
# print(r.llen('list10')) #0
# print(r.lrange('list10',0, -1)) #[]
# r.lpushx('list2',77) #list2存在,添加新元素
# print(r.lrange('list2', 0, -1)) #添加到左侧
'''4.往已经有的name的列表的右边添加一个元素,没有的话无法创建:rpushx(name,value)'''
# r = connectRedis()
# r.rpushx("list10", 10) #list10不存在
# print(r.llen('list10')) #0
# print(r.lrange('list10',0,-1)) #[]
# r.rpushx("list2",99) #这里的list2存在
# print(r.lrange('list2',0,-1)) #成功在右侧添加了新元素
'''
5.新增(固定索引号位置插入元素)
linsert(name, where, refvalue, value))
在name对应的列表的某一个值前或后插入一个新值
参数:
name - redis的name
where - BEFORE或AFTER
refvalue - 标杆值,即:在它前后插入数据
value - 要插入的数据
'''
# r = connectRedis()
# print(r.lrange('list2',0,-1))
# r.linsert('list2','before','44', '74') #往左边出现的第一个元素'44'前添加'74'
# print(r.lrange('list2',0,-1))
'''
6.修改(指定索引号进行修改)
r.lset(name, index, value)
对name对应的list中的某一个索引位置重新赋值
参数:
name - redis的name
index - list的索引位置
value - 要设置的值
'''
# r = connectRedis()
# r.lset('list2', 0, -11) #把索引号为0的元素修改成-11
# print(r.lrange('list2',0,-1))
'''
7.删除(指定值进行删除):注意:菜鸟教程的此部分有错。
r.lrem(name, count, value)
在name对应的list中删除指定的值
参数:
name - redis的name
count=0,删除列表中所有的指定值;
count=2 - 从前到后,删除2个, num=1,从前到后,删除左边第1个
count=-2 - 从后向前,删除2个
value - 要删除的值
'''
# r = connectRedis()
# print(r.lrange('list2',0,-1))
# r.lrem('list2',1,"74") #将列表左边第一次出现的“74
# print(r.lrange('list2', 0,-1))
# r.lrem('list2', -1, "66") #将列表中右边第一次出现的'11'删除
# print(r.lrange('list2', 0, -1))
# r.lrem('list2',0, "34") #将列表中全部的“34”删除
# print(r.lrange('list2',0,-1))
'''
8.删除并返回:
lpop(name)
在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
rpop(name)
表示从右向左操作
'''
# r = connectRedis()
# print(r.lrange('list2',0,-1))
# print(r.lpop("list2") ) #删除list中最左边的元素 ,并返回此元素
# print(r.lrange('list2',0,-1))
'''
9.取值(根据索引号取值)
lindex(name, index)
在name对应的列表中根据索引获取列表元素
'''
# r = connectRedis()
# r.lpush("list2", 22,33,44) #将元素依次从左侧添加
# print(r.lindex("list2",0)) #取出索引号为0的值
'''
其他操作
'''
'''delete(*names):删除redis中的任意数据类型(string、hash、list、set、有序set)'''
# r = connectRedis()
# r.delete('hash1','hash2') #删除hash1,hash2
'''exists(name): 检查redis的name是否存在。存在就返回1,不存在返回0'''
# r = connectRedis()
# print(r.exists("list2")) #返回1
# print(r.exists("jj"))
'''expire(name,time):为某个redis的某个name设置超时时间'''
# r =connectRedis()
# r.lpush("list5", 33,44,55)
# r.expire("list5", time=3) #设置超时时间
# print(r.lrange("list5",0,-1))
# time.sleep(3)
# print(r.lrange("list5",0,-1))
'''type(name):获取类型'''
# r = connectRedis()
# print(r.type("list2")) #获取其类型