redis简单操作
关于redis的简单操作:
#链接:https://www.cnblogs.com/wupeiqi/articles/5132791.html # 下载地址:https://github.com/MicrosoftArchive/redis/releases 下载那个msi的就行 import redis #简单连接 # r = redis.Redis() # r.set('what1','哈哈哈') # r.set('what2','hello') # print(r.get('what1').decode('utf-8')) # print(r.get('what2').decode('utf-8')) #redia连接池 # pool = redis.ConnectionPool(host="127.0.0.1",port=6379,decode_responses=True) #加上decode_responses=True返回的就是字符串形式了,不再是bytes类型了 pool = redis.ConnectionPool(host="127.0.0.1",port=6379) r = redis.Redis(connection_pool=pool) # 玩的数据类型操作 # { # "name":"chao",值为字符串数字操作 # "name":[11,22,33],值为列表时的操作 # "name":"chao",值为字典(hash)时的操作 # } # # 字符串操作 # #1 简单设置,有效期 # r.set('name','chao',5) #5的意思是5秒后失效 # # setnx:没有就创建,有就不创建,还用原来的 # r.setnx('name','chaoren') # print(r.get('name')) # # #2 批量设置值和获取值 # r.mset({'k1':'v1','k2':'v2'}) # print(r.mget(['k1','k2'])) # # #3 getset 设置新值并获取原来的值,如果之前的key没有,这里返回一个None # print(r.getset('name','hhh')) # print(r.get('name')) # # #4 getrange 对取的值切片,取子序列 # # r.set('kk','你好') # r.set('kk','helloworld') # print(r.getrange('kk',0,2).decode('utf-8')) #左右都包括,按字节取,不是按字符取 # #5 setrange # r.set('name','wudixiaobawang') # r.setrange('name',2,'sss') # # r.setrange('name',2,'sssssssssssssssssssssssss') # print(r.get('name')) # # #6 查看字符串长度 # print(r.strlen('name')) # # #7 incr 自增 # r.set('age',100) # print(r.get('age')) #b'100',虽然存的是数字,但是还是按字符串处理的 # print(r.incr('age',1)) #加一操作,101,如果这个key存在就给值加1,不存在就给设置值age2=1,这个方法的返回值是个数字,如果值是字符串,会报错昂 # print(r.incr('age2',1)) #加一操作,101,如果这个key存在就给值加1,不存在就给设置值age2=1,这个方法的返回值是个数字 # # #8 decr 自减 # # #9 append 在某个值后面追加一些内容 # r.append('name','???') # print(r.get('name')) ############################list操作####################### # 1. 插入列表数据 # r.lpush('gf','铁锤','钢蛋') #多次运行,会给gf多次添加,先推进去的在最后,这样一个顺序 # print([i.decode('utf-8') for i in r.lrange('gf',0,-1)]) #取值,中文 # r.lpush('cc',22,33,11) # print(r.lrange('cc',0,-1)) #[b'11', b'33', b'22'] # r.lpushx('cc','xxx') #这个没啥说的 # print(r.lrange('cc',0,-1)) #没有直接获取列表的方法,只能通过lrange来取 #2 llen 查看当前的列表长度 # print(r.llen('cc')) #3 linsert 插入,在某个值的前面或者后面插入值: # r.linsert('cc','AFTER','11','chao') # print(r.lrange('cc',0,-1)) #4 lset 根据索引替换内容 # r.lset('cc',1,'Jaden') # print(r.lrange('cc',0,-1)) #5 lrem 删除 # r.lrem('cc','chao') #删除所有的chao # r.lrem('cc','chao',1) #删除第一个的chao,从左往右 # print(r.lrange('cc',0,-1)) #6. lpop 删除, # print(r.lpop('cc')) #从左往右删,一个一个删除,返回删除的元素 # print(r.lrange('cc',0,-1)) # r.rpop('cc') #从右往左删 #7 lindex,根据索引查找对应元素 # print(r.lindex('cc',1)) # print(r.lrange('cc',0,-1)) #还有好多其他的,不挨个试了 ###################hash操作########################## import json #1 hset 设置值 # r.hset('info','name','chao') #info:{'name':'chao'} # print(r.hget('info','name')) #取值 # 2 hmset 批量设置值 # r.hmset('chao',{'age':18,'hobby':'girl'}) # print(r.hmget('chao','age','hobby')) #[b'18', b'girl'] # print(r.hmget('chao',['age','hobby'])) #[b'18', b'girl'] # print(r.hgetall('chao')) #{b'age': b'18', b'hobby': b'girl'} 字典 # # r.hmset('Jaden',{'k1':{'a':111},'hobby':'girl'}) # print(r.hgetall('Jaden')) #{b'k1': b"{'a': 111}", b'hobby': b'girl'}注意我们存的深层的字典变成了字符串"{'a':111}",所以注意取出来的值,这个不是json字符串,所以没办法反序列化,所以我们存的时候,可以直接存json字符串r.hmset('Jaden',json.dumps({'k1':{'a':111}),'hobby':'girl'}),还有一种方法: #r.set('Jaden',json.dumps({'k1':{'a':111},'hobby':'girl'})) #直接将所有的数据都搞成json字符串形式的,插入值不用hset了,直接用set,这个点用的比较多昂 #3 hlen(name),统计name对应的字典的键值对个数 #4 hkeys 取所有的键 # print(r.hkeys('Jaden')) #[b'k1', b'hobby'] #5 r.keys() # print(r.keys()) # redis 下面的数据结构是: { # keys:{hkeys:'xxx'} # } #取所有的值:hvals(name) #6 hexists(name,key) 查看name对应的字典中有没有这个key # print(r.hexists('Jaden','k1')) # print(r.exists('Jaden')) #7 hdel删除某个key # r.hdel('Jaden','k1') # print(r.hkeys('Jaden')) # print(r.hgetall('Jaden')) ###集合不咋用就不说了### #############来几个总体的redis层操作 # print(r.keys()) # r.delete('what2') #删除一个键 # print(r.keys()) # r.delete(*r.keys()) #删除所有的key,如果没有键,你执行这个指令会报错 # 模糊查询key # print(r.keys('what*')) #[b'what', b'what1'],模糊查询,*任意多个,?任意一个,h[ae]llo,能匹配hello,hallo,但不能匹配haello,不能匹配hillo,类似正则,但是是人家redis提供的一些模糊匹配的规则 #为某个name设置超时时间 #r.set是对字符串设置过期时间 # r.expire('what',3) #对hash数据设置过期时间,3是秒数 # print(r.keys())
#链接:https://www.cnblogs.com/wupeiqi/articles/5132791.html
# 下载地址:https://github.com/MicrosoftArchive/redis/releases 下载那个msi的就行
import redis
#简单连接
# r = redis.Redis()
# r.set('what1','哈哈哈')
# r.set('what2','hello')
# print(r.get('what1').decode('utf-8'))
# print(r.get('what2').decode('utf-8'))
#redia连接池
# pool = redis.ConnectionPool(host="127.0.0.1",port=6379,decode_responses=True) #加上decode_responses=True返回的就是字符串形式了,不再是bytes类型了
pool = redis.ConnectionPool(host="127.0.0.1",port=6379)
r = redis.Redis(connection_pool=pool)
# 玩的数据类型操作
# {
# "name":"chao",值为字符串数字操作
# "name":[11,22,33],值为列表时的操作
# "name":"chao",值为字典(hash)时的操作
# }
# # 字符串操作
# #1 简单设置,有效期
# r.set('name','chao',5) #5的意思是5秒后失效
# # setnx:没有就创建,有就不创建,还用原来的
# r.setnx('name','chaoren')
# print(r.get('name'))
#
# #2 批量设置值和获取值
# r.mset({'k1':'v1','k2':'v2'})
# print(r.mget(['k1','k2']))
#
# #3 getset 设置新值并获取原来的值,如果之前的key没有,这里返回一个None
# print(r.getset('name','hhh'))
# print(r.get('name'))
#
# #4 getrange 对取的值切片,取子序列
# # r.set('kk','你好')
# r.set('kk','helloworld')
# print(r.getrange('kk',0,2).decode('utf-8')) #左右都包括,按字节取,不是按字符取
# #5 setrange
# r.set('name','wudixiaobawang')
# r.setrange('name',2,'sss')
# # r.setrange('name',2,'sssssssssssssssssssssssss')
# print(r.get('name'))
#
# #6 查看字符串长度
# print(r.strlen('name'))
#
# #7 incr 自增
# r.set('age',100)
# print(r.get('age')) #b'100',虽然存的是数字,但是还是按字符串处理的
# print(r.incr('age',1)) #加一操作,101,如果这个key存在就给值加1,不存在就给设置值age2=1,这个方法的返回值是个数字,如果值是字符串,会报错昂
# print(r.incr('age2',1)) #加一操作,101,如果这个key存在就给值加1,不存在就给设置值age2=1,这个方法的返回值是个数字
#
# #8 decr 自减
#
# #9 append 在某个值后面追加一些内容
# r.append('name','???')
# print(r.get('name'))
############################list操作#######################
# 1. 插入列表数据
# r.lpush('gf','铁锤','钢蛋') #多次运行,会给gf多次添加,先推进去的在最后,这样一个顺序
# print([i.decode('utf-8') for i in r.lrange('gf',0,-1)]) #取值,中文
# r.lpush('cc',22,33,11)
# print(r.lrange('cc',0,-1)) #[b'11', b'33', b'22']
# r.lpushx('cc','xxx') #这个没啥说的
# print(r.lrange('cc',0,-1)) #没有直接获取列表的方法,只能通过lrange来取
#2 llen 查看当前的列表长度
# print(r.llen('cc'))
#3 linsert 插入,在某个值的前面或者后面插入值:
# r.linsert('cc','AFTER','11','chao')
# print(r.lrange('cc',0,-1))
#4 lset 根据索引替换内容
# r.lset('cc',1,'Jaden')
# print(r.lrange('cc',0,-1))
#5 lrem 删除
# r.lrem('cc','chao') #删除所有的chao
# r.lrem('cc','chao',1) #删除第一个的chao,从左往右
# print(r.lrange('cc',0,-1))
#6. lpop 删除,
# print(r.lpop('cc')) #从左往右删,一个一个删除,返回删除的元素
# print(r.lrange('cc',0,-1))
# r.rpop('cc') #从右往左删
#7 lindex,根据索引查找对应元素
# print(r.lindex('cc',1))
# print(r.lrange('cc',0,-1))
#还有好多其他的,不挨个试了
###################hash操作##########################
import json
#1 hset 设置值
# r.hset('info','name','chao') #info:{'name':'chao'}
# print(r.hget('info','name')) #取值
# 2 hmset 批量设置值
# r.hmset('chao',{'age':18,'hobby':'girl'})
# print(r.hmget('chao','age','hobby')) #[b'18', b'girl']
# print(r.hmget('chao',['age','hobby'])) #[b'18', b'girl']
# print(r.hgetall('chao')) #{b'age': b'18', b'hobby': b'girl'} 字典
#
# r.hmset('Jaden',{'k1':{'a':111},'hobby':'girl'})
# print(r.hgetall('Jaden')) #{b'k1': b"{'a': 111}", b'hobby': b'girl'}注意我们存的深层的字典变成了字符串"{'a':111}",所以注意取出来的值,这个不是json字符串,所以没办法反序列化,所以我们存的时候,可以直接存json字符串r.hmset('Jaden',json.dumps({'k1':{'a':111}),'hobby':'girl'}),还有一种方法:
#r.set('Jaden',json.dumps({'k1':{'a':111},'hobby':'girl'})) #直接将所有的数据都搞成json字符串形式的,插入值不用hset了,直接用set,这个点用的比较多昂
#3 hlen(name),统计name对应的字典的键值对个数
#4 hkeys 取所有的键
# print(r.hkeys('Jaden')) #[b'k1', b'hobby']
#5 r.keys()
# print(r.keys())
# redis 下面的数据结构是: {
# keys:{hkeys:'xxx'}
# }
#取所有的值:hvals(name)
#6 hexists(name,key) 查看name对应的字典中有没有这个key
# print(r.hexists('Jaden','k1'))
# print(r.exists('Jaden'))
#7 hdel删除某个key
# r.hdel('Jaden','k1')
# print(r.hkeys('Jaden'))
# print(r.hgetall('Jaden'))
###集合不咋用就不说了###
#############来几个总体的redis层操作
# print(r.keys())
# r.delete('what2') #删除一个键
# print(r.keys())
# r.delete(*r.keys()) #删除所有的key,如果没有键,你执行这个指令会报错
# 模糊查询key
# print(r.keys('what*')) #[b'what', b'what1'],模糊查询,*任意多个,?任意一个,h[ae]llo,能匹配hello,hallo,但不能匹配haello,不能匹配hillo,类似正则,但是是人家redis提供的一些模糊匹配的规则
#为某个name设置超时时间
#r.set是对字符串设置过期时间
# r.expire('what',3) #对hash数据设置过期时间,3是秒数
# print(r.keys())

浙公网安备 33010602011771号