zoukankan      html  css  js  c++  java
  • Redis

    import redis  # 这个相当于是在pycharm中操作MySQL的pymysql,只不过Redis中的就叫redis
    
    # r = redis.Redis()  # 不带decode_responses取出来的是字节.另连接自己电脑的不用写host和port了
    # r = redis.Redis(decode_responses=True)  #带decode_responses取出来的是字符串
    # print(r.get('name')) #b'yy'    'yy'
    
    pool = redis.ConnectionPool(decode_responses=True) # 数据库连接池,decode_responses写在数据库连接池中
    r = redis.Redis(connection_pool=pool)
    
    
    ##############字符串操作###################
    
    # r.set('name','dayangge',10)  # 10是过期时间,单位是秒
    # r.set('name','dayangge')
    
    # r.setnx('name','chao')  # 设置值,只有name不存在时,执行设置操作(添加)
    
    #批量设置值
    # r.mset({'k1':'v1','k2':'v2'})
    #批量取值
    # print(r.mget(['k1','k2'])) #['v1', 'v2']
    # print(r.get('k1'))
    
    #更新值,并获取原来的值
    # print(r.getset('name','anan'))  # 得到dayangge
    # print(r.get('name'))  # 得到 anan
    
    # r.set('name','安安')
    
    
    #取子序列,左右都包,是字节,如果是汉字的话,上面utf-8编码的一个"安"是(0,2),如果取的不是刚好一个完整的中文,会报错,比如(0,4):0-2是第一个"安",3-5是第二个"安"
    # print(r.getrange('name',0,2))  # 得到ana 或  安
    
    #setrange 替换子序列
    # r.set('movie','fuchouzhelianmeng4')
    # r.setrange('movie',2,'xxxx')  # 2代表是从第2个字节开始往后替换
    # print(r.get('movie'))
    
    #字节长度
    # print(r.strlen('name'))  # 返回name对应值的字节长度(一个汉字3个字节)
    
    #incr自增
    # r.set('age',18)
    # print(type(r.get('age')))  # <class 'str'>
    # r.incr('age',1) #19(在原来的基础上自增1),针对的是数字类型的. incr自增 name对应的值,当name不存在时,则创建name=amount(必须是整数),否则,则自增。
    # print(r.get('age'))
    
    # r.append('name','大长腿')
    
    # print(r.get('name'))
    
    ##############列表操作###################
    # r.lpush('l1',11,22,33) #['33', '22', '11']  从左边添加到列表中
    # print(r.lrange('l1',0,-1))  # 列表没有像字符串那样的直接的取值的操作,使用range切片取值,数字是索引
    # r.rpush('l2',11,22,33)  # 从右边添加到列表中
    # print(r.lrange('l2',0,-1)) #['11', '22', '33']
    #列表长度
    # print(r.llen('l1'))
    
    #插入 linsert
    # r.linsert('l2','AFTER','22','66')
    #更新值
    # r.lset('l2',1,'chao')
    
    #删除值 remove,l代表list的意思.在name对应的list中删除指定的值,num=0,删除列表中所有的指定值;
    # r.lrem('l2','66',2)  #没有两个66也不报错
    # r.lrem('l1','22',2)  #要删除的元素的个数
    
    # r.lpush('name_list','yy','wd','chao')
    # print(r.lpop('name_list'))  # 从左边删除
    # print(r.rpop('name_list'))  # 从右边删除
    #根据索引查找值
    # print(r.lindex('name_list',1))  # 在name对应的列表中根据索引获取列表元素
    
    # print(r.lrange('name_list',0,-1))  # 在name对应的列表分片获取数据
    
    
    
    
    ##################hash操作####################
    
    #设置值,获取值
    # r.hset('d1','name','chao')  #d1:{'key','value'}
    # print(r.hget('d1','name'))
    
    # r.hmset('xx', {'k1':'v1', 'k2': 'v2'})#'xx':{'k1':'v1', 'k2': 'v2'}
    # print(r.hget('xx','k1'))
    #批量获取值
    # print(r.hmget('xx',['k1','k2']))
    #获取name对应的所有的键值对
    # print(r.hgetall('xx')) #{'k1': 'v1', 'k2': 'v2'},类型是dict
    #统计name对应的字典的键值对个数
    # print(r.hlen('xx'))
    # print(r.hkeys('xx')) # ['k1','k2']
    # print(r.keys())  # 这个获取的是Redis中所有的name,结果也是列表
    # print(r.hexists('xx','xxx'))  # 检查name对应的hash是否存在当前传入的key
    
    # r.hdel('xx','k1')
    # print(r.hkeys('xx'))
    
    #######注意################
    import json
    #关于内层嵌套字典格式数据时的处理方式
    # r.hmset('Jaden',{'k1':json.dumps({'a':111}),'hobby':'girl'})  # 方法一:将内层的字典先进行json序列化,否则Redis会自动帮你转化成str类型的,但是不是json的字符串
    # r.set('Jaden',json.dumps({'k1':{'a':111},'hobby':'girl'}))  # 方法二:不存储为hash的数据类型了,直接存储为string类型的,将整个字典序列化为json字符串,作为name对应的值
    # res = r.hget('Jaden','k1')
    # print(type(res))
    # res = json.loads(res)
    # print(res['a'])
    # print(r.hgetall('Jaden'))
    
    
    # r.delete('Jaden') #删除一个键
    # print(r.get('Jaden')) # None
    
    # 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.hset('xxx','hobby','girls') # # # r.expire('xxx',10) #对hash数据设置过期时间,3是秒数 # print(r.keys()) # print(r.hget('xxx','hobby')) ############################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()) # r.delete(*r.keys()) # print(r.keys()) # r.hmset('name_list',{'k1':'v1','k2':'v2'}) # r.hmset('hobby_list',{'h1':'d1'}) # print(r.keys()) #获取所有的name # print(r.keys('h*')) #获取所有的以h开头的name # print(r.hkeys('name_list')) #Redis的name=name_list对应的字典的所有的key
  • 相关阅读:
    Google File System(中文翻译)
    Hadoop学习之路一 Single Node Setup
    大数据建模比赛--金融市场板块划分和轮动规律研究.
    华中建模-人脸识别
    计算循环队列的元素个数
    低价租用高性能GPU进行深度学习
    vscode+PyQt+QtDesigner
    mask_rcnn(Keras+TensorFlow)环境搭建_新手向(毕业设计使用,亲测可用)
    博客园美化
    Task1 赛题理解
  • 原文地址:https://www.cnblogs.com/lyfstorm/p/11378868.html
Copyright © 2011-2022 走看看