redis的三种数据类型以及应用场景

一、hash,业务场景是用于查询数据,具体操作如下:

  1、查看redis中某个hash的所有数据:hgetall baiyibutie(key);

  2、查看redis中某个hash的数据量:hlen baiyibutie(key);

  3、redis写入hash数据:1) conn.hmset("baiyibutie", {"key": "123456", "value": "写入hash数据"},{"key2": "123456", "value": "写入hash数据"}.....) #hmst用于插入多条数据,是这种写法,hset用于插入单条数据,下面那种写法;

             2) conn.hset("baiyibutie", "123456", "写入第二种hash数据") #key field value(key对应"baiyibutie",field对应"123456",value对应"写入第二种hash数据");

  4、查询数据:hget baiyibutie(key) 123456(field)   (key对应"baiyibutie",field对应"123456",value对应"写入第二种hash数据"),程序里面的写法:client.hget('baiyibutie', 'name');

  5、可以用于检测数据库里面是否有原始数据,并插入数据或者更新数据,例如:hset key field value,把key和field绑定成一组数据,如果返回的结果为1表示插入数据成功或者更新数据成功,如果返回为0则表示数据库里面已经有重复数据了。hset tt_tt aaa b,hset tt_tt bbb b(这时会返回1,表示更新数据了),hset tt_tt bbb a(这时会返回0,因为key和field没有变,则没有更新数据也没有插入数据。value在检测更新数据里面没有用处,随便填一个即可)

  6、删除操作,hdel(tt_tt aaa),其中tt_tt表示的是redis的key,aaa表示的是内容里面的键。切记:千万别用delete,如果用delete,那么删除的就是整个key。

  7、分批次取出所有的hash值

conn = redis.Redis(connection_pool=reids_pool)  # 获取连接对象
# k表示下标,第一次设置为0,之后每次返回两个参数,下一个小标值和这次取出来的所有数据。如果没有数据了,那么返回的k就是0
k = 0
while True:
    k, v = conn.hscan("xxxxx", cursor=k, match=None, count=1000)
    for i in v.keys():
        print(i)
     print(conn.hget("xxxxx", i)) time.sleep(0.1) if int(k) == 0: break

 

  8、hash值加一操作,hash中相同的key里面相同的field每次加一操作。这个可以并发操作,并发计数。

conn = redis.Redis(connection_pool=self.reids_pool)  # 获取连接对象
        time_stamp = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
        redis_key = f"xxxxx:{proxy_index}_{time_stamp}"
        try:
            with conn.pipeline() as p:
                p.multi()
                p.hincrby(redis_key, project_name, 1)
                p.expire(redis_key, 1200)
                p.execute()
                return True
        except Exception as ex:
            print(repr(ex))
            return False

  

 

二、list,业务场景是用于队列,例如从左侧插入数据(lpush),从右侧取数据(rpop),具体操作如下:

  1、左侧插入数据:lpush key data,右侧插入数据rpush key data;(可以用该命令创建list)

  2、左侧取一个数据并从redis中删除该数据:lpop key,右侧取一个数据并从redis中删除该数据:rpop key;

  3、取出数据,但是保留数据:lrange key 0 0,后面的两个数字指的是list的下标,可以是多个值,例如,lrange key 0 -1,表示取出所有值;

  4、批量插入数据

  import redis

  r = redis.Redis(host=xxx.xxx.xxx.xxx, port=xxx,password=xxx, db=0)

  with r.pipeline(transaction=False) as p:
  for value in values:
    p.sadd(key, value)
    p.lpush(key,value)
  p.execute()

  5、删除指定数据:lrem key 0 data,其中data是那一条数据

三、set,无序集合,业务场景是判断之前是否有这个数据,具体操作如下:

  1、插入数据:sadd key data;(也用于创建数据库,第一次写数据时)

  2、通过返回值来判断该数据库里面是否存在该数据:如果插入数据后返回值为"1",那么表示该数据库里面没有该数据,插入成功;如果插入数据后返回值为"0",那么表示数据库里面有该数据,插入失败。可以用这个功能判断该数据库里面有没有该数据;

  3、查看数据量:scard key

  

result = redis_client.sadd("coupon_access", coupon_access)
    if int(result) == 1:
        return True
    else:
        return False

  

  

posted @ 2020-10-21 11:04  乔儿  阅读(330)  评论(0编辑  收藏  举报