Redis内存数据库的基本用法

匿名 (未验证) 提交于 2019-12-03 00:44:02

Redis常用操作

from redis import Redis # from redis import ConnectionPool   conn = Redis()  # 实例化对象,创建连接对象  # conn.set('name','dxx')  # 单个插入  # for i in range(1,100): #     conn.set("the %s key"%i, 'the %s value'%i,ex=i)  # 循环插入   # ret = conn.get("the 80 key")  # 取不到是为None  无法指定默认值 # # print(ret)  # conn.set('name','希希')  # 单个插入 中文会自动以utf8编码转码为bytes类型  # # for i in range(1,100): #     conn.set("%skey"%i,'%svalue'%i)  from app01.Redis_POOL import POOL   # 连接池做成单例 conn = Redis(connection_pool=POOL)     print(conn.get("name").decode("utf8"))  # 字符串操作  conn.set('age',19,ex=10,xx=True)    conn.setex('hobby',10,'basketball') # (key,time, value)  # 批量添加,传字典 conn.mset({'k1':'v1','k2':'v2'})  # 批量取值  print([ res.decode("utf8") for res in conn.mget(['k1', 'k2'])])  # 追加  conn.setrange('k1',1,'pp')   conn.set('k3','10') #  conn.setrange('k3',2,'10') # #  print(conn.get('k3'))   # 重点 (网站访问量)   conn.incr('ask_total',amount=1)  # 递增   可指定频率为负数,表示递减  conn.decr('ask_total')   # 与上相反    conn.append('ask_total',22)   # 向原有值后拼接   #hash操作   conn.hset('hax1','k1','v1')  # 存  print(conn.hget("hax1", 'k1'))  # 取   #批量存取  conn.hmset('hax1',{'k2':'v2','k3':'v3'})  print(conn.hmget('hax1', ['k1', 'k2',]))  print(conn.hmget('hax1', 'k1', 'k2'))  # 内部做判断是否列表    print(conn.hgetall('hax1'))   # {b'k1': b'v1', b'k2': b'v2', b'k3': b'v3'}  print(conn.hgetall('hax1')[b"k1"])   # b'v1'    print(conn.hlen('hax1'))  # 3   列表/数组长度    conn.hdel('hax1','k1')    # 哈希删除  print(conn.hget('hax1','k1'))  # 再查询   conn.hset('hax1','k2',22)  conn.hincrby('hax1','k2',amount=-10)  # 哈希递增 或者递减  print(conn.hget('hax1','k2'))  # 重点  hscan  hscan_iter   for i in range(1,1000):      conn.hset('hax2','%skey'%i,'%svalue'%i)  # match 过滤条件    count 取出数据个数  print(conn.hscan('hax2',10,match='350value',count=20))   # (26, {})  print(conn.hscan('hax2',10,match='350',count=20))   # (26, {})  print(conn.hscan('hax2',10,match='350key',count=20))   # (26, {b'350key': b'350value'}) #  conn.hscan_iter('hax2',count=10)     genrator = conn.hscan_iter('hax2',count=10)  # 产生迭代器,迭代器能产生的数据不因count值而变化, #                                               count的作用是限制一次向redis要多少数据,用完了再要  print(genrator)   # 打印的生成器内存地址  print('生成器长度:',len(list(genrator))) # 会取完hax2中所有的数据  for i in genrator:      print(i)    #  由于上方len(list(genrator))已经将生成器迭代完,故迭代器已经无元素可迭代,无值打印   # redis列表操作  conn.lpush('h1','11')  # 列表左追加  conn.rpush('h1','10','9')   # 列表右追加  print(conn.linsert('h1','AFTER','11',99))  # 在元素11后面插入99  print(conn.linsert('h1','AFTER','11','99'))  # 在元素11前面插入99                                                           #如果列表中有多个'11',那么插在第一个'11'的前面或者后面  print(conn.llen('h1'))  conn.lset('h1',1,'1111')  conn.lrem('h1',-5,11)     #lrem(name,count,value)     # count的正负表示从头开始还是从尾巴开始删除和value相同的值,0表示删除所有相同的     #count的数字表示删除几个   print(conn.lindex('h1', 3))  # 取列表索引为3的值  print(conn.lrange('h1', 1, 5)) # 取列表索引1-5的元素,闭区间  print(conn.lrange('h1',0,conn.llen('h1')))  # 取列表所有元素  #blpop  重点   print(conn.lpop('h1'))  print(conn.lpop('h1'))   # 从左删除一个元素  print(conn.rpop('h1'))   # 从右删除一个元素  while True:      print(conn.blpop('h1'))    # 取完了会在这里阻塞,等待有下一个值被添加,你会不会想到队列呢?                                # 是的,它可以实现队列的效果,可以实现分布式                                # 可以同时开多个客户端去blpop,也可以同时开多个客户端去新增    # 自定义列表生成器  def scan_list(name,count=10):      index = 0      while True:          data_list = conn.lrange(name,index,count)          if not data_list:              return          index+= count          count+=index          for item in data_list:              yield item   sa_list = scan_list('h1',5)  for i in sa_list:      print(i)   conn.delete('name')   # 删除  print(conn.exists('hax2'))   # 返回0或1   print(conn.keys('k?'))   # 模糊匹配 print(conn.keys('k*'))    conn.rename('k1','kk')  # 重命名   # 利用管道实现事务操作 pipe = conn.pipeline(transaction=True)    pipe.multi() pipe.set('name','egon') pipe.lpush('h1','aa') pipe.execute()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!