Conjunto de colección de Redis 04 (conjunto de tipo de datos de colección, conjunto ordenado conjunto ordenado)

Conjunto de colección de Redis 04 (conjunto de tipo de datos de colección, conjunto ordenado conjunto ordenado)

portal del directorio de aprendizaje de Python

Mapa de bits de operación de mapa de bits

definición

1、位图不是真正的数据类型,它是定义在字符串类型中
2、一个字符串类型的值最多能存储512M字节的内容,位上限:2^32
# 1MB = 1024KB
# 1KB = 1024Byte(字节)
# 1Byte = 8bit(位)

 000000000000000
    
 6162...

Punto fuerte

可以实时的进行统计,极其节省空间。官方在模拟1亿28百万用户的模拟环境下,在一台MacBookPro上,典型的统计如“日用户数”的时间消耗小于50ms, 占用16MB内存

Comando SETBIT

  • Descripción: establece el valor binario en una posición determinada

  • Sintaxis: valor de compensación de la tecla SETBIT

  • Parámetros: offset: el offset comienza desde 0

    Valor-0 o 1

  • Ejemplo:

# 默认扩展位以0填充
127.0.0.1:6379> SET mykey ab
OK
127.0.0.1:6379> GET mykey
"ab"
127.0.0.1:6379> SETBIT mykey 0 1
(integer) 0
127.0.0.1:6379> GET mykey
"\xe1b"
127.0.0.1:6379> 

Comando GETBIT

  • Descripción: Obtiene el valor de un bit determinado.

  • Sintaxis: compensación de clave GETBIT

  • Ejemplo:

127.0.0.1:6379> GETBIT mykey 3
(integer) 0
127.0.0.1:6379> GETBIT mykey 0
(integer) 1
127.0.0.1:6379> 

Comando BITCOUNT

  • Descripción: ¿Cuántos de los valores correspondientes a la clave de estadísticas son 1?
  • Sintaxis: BITCOUNT key start end
  • Parámetros: inicio / final representa el índice de bytes
  • Ejemplo:
127.0.0.1:6379> SET mykey1 ab
OK
127.0.0.1:6379[4]> BITCOUNT mykey
(integer) 6
127.0.0.1:6379[4]> BITCOUNT mykey 0 0
(integer) 3

Caso de escenario de aplicación

# 网站用户的上线次数统计(寻找活跃用户)
	用户名为key,上线的天作为offset,上线设置为1
# 示例
	用户名为 user1:login 的用户,今年第1天上线,第30天上线
	SETBIT user1:login 0 1 
	SETBIT user1:login 29 1
	BITCOUNT user1:login

Código

r.setbit('user1:login', 0, 1)
r.bitcount('user1:login')

Tipo de datos hash hash

  • definición
1、由field和关联的value组成的键值对 redis_key {
    
    field:value,field1:value1}
2、field和value是字符串类型
3、一个hash中最多包含2^32-1个键值对
  • ventaja
1、节约内存空间 - 特定条件下 【1,字段小于512个,2:value不能超过64字节】

   hash:
   hk1  {
    
    'username':'guoxiaonao', 'age': '18'}
   
   string:
   hk1_username: 'guoxiaonao'
   hk1_age : '18'
    
    
   string:
   hk1 : 'guoxiaonao_18_性别_xxxxx'

2、可按需获取字段的值

  • Desventajas (no apto para condiciones de hash)
1,使用过期键功能:键过期功能只能对键进行过期操作,而不能对散列的字段进行过期操作
2,存储消耗大于字符串结构
  • Operación de comando básica
# 1、设置单个字段
HSET key field value
HSETNX key field value
# 2、设置多个字段
HMSET key field value field value
# 3、返回字段个数
HLEN key
# 4、判断字段是否存在(不存在返回0)
HEXISTS key field
# 5、返回字段值
HGET key field
# 6、返回多个字段值
HMGET key field filed
# 7、返回所有的键值对
HGETALL key
# 8、返回所有字段名
HKEYS key
# 9、返回所有值
HVALS key
# 10、删除指定字段
HDEL key field 
# 11、在字段对应值上进行整数增量运算
HINCRBY key filed increment
# 12、在字段对应值上进行浮点数增量运算
HINCRBYFLOAT key field increment

hash de operación de Python

# 1、更新一条数据的属性,没有则新建
hset(name, key, value) 
# 2、读取这条数据的指定属性, 返回字符串类型
hget(name, key)
# 3、批量更新数据(没有则新建)属性,参数为字典
hmset(name, mapping)
# 4、批量读取数据(没有则新建)属性
hmget(name, keys)
# 5、获取这条数据的所有属性和对应的值,返回字典类型
hgetall(name)
# 6、获取这条数据的所有属性名,返回列表类型
hkeys(name)
# 7、删除这条数据的指定属性
hdel(name, *keys)

Hash del código Python

import redis

r = redis.Redis(host='127.0.0.1', port=6379, db=0)

#r.hset('pyh1', 'uname', 'wangweichao')
#r.hset('pyh1', 'age', 63)
# {b'uname': b'wangweichao', b'age': b'63'}
#print(r.hgetall('pyh1'))

#r.hmset('pyh2', {'uname':'guoxiaonao', 'age':18})
#print(r.hgetall('pyh2'))

print(r.hkeys('pyh2'))
print(r.hvals('pyh1'))

Escenario de aplicación: estadísticas de datos de la dimensión del usuario

用户维度统计
   统计数包括:关注数、粉丝数、喜欢商品数、发帖数
   用户为key,不同维度为field,value为统计数
   比如关注了5人
	 HSET user:10000 fans 5
	 HINCRBY user:10000 fans 1

Escenario de aplicación: uso de combinación de caché-redis + mysql + hash

usuario mysql 表 nombre de usuario edad signo desc

redis - user_guoxiaonao {desc: xxxx, sign: xxxx}

usuario de la aplicación amysite1

usuario 表 - nombre de usuario (11) edad

1, ver la información personal del usuario-agregar hash de caché- / usuario / detalle / identificación de usuario-GET

Ver nombre de usuario y edad

El nombre de usuario de retorno es% s la edad es% s

2. El usuario actualiza la información personal-OBTENER la cadena de consulta / usuario / actualización / 1? Edad = 33

Caché de actualización-eliminación de base de datos

Sugerencia: el objeto de conexión de redis se puede inicializar directamente en la función de vista

La variable global r en la función de vista = redis.Redis ...

  • principio

    用户想要查询个人信息
    1、到redis缓存中查询个人信息
    2、redis中查询不到,到mysql查询,并缓存到redis
    3、再次查询个人信息
    
  • Código

    
    

Tipo de datos de recopilación (conjunto)

  • Características
1、无序、去重
2、元素是字符串类型
3、最多包含2^32-1个元素
  • Comando básico
# 1、增加一个或者多个元素,自动去重;返回值为成功插入到集合的元素个数
SADD key member1 member2
# 2、查看集合中所有元素
SMEMBERS key
# 3、删除一个或者多个元素,元素不存在自动忽略
SREM key member1 member2
# 4、元素是否存在
SISMEMBER key member
# 5、随机返回集合中指定个数的元素,默认为1个
SRANDMEMBER key [count]
# 6、弹出成员
SPOP key [count]
# 7、返回集合中元素的个数,不会遍历整个集合,只是存储在键当中了
SCARD key
# 8、把元素从源集合移动到目标集合
SMOVE source destination member

# 9、差集(number1 1 2 3 number2 1 2 4 结果为3)
SDIFF key1 key2 
# 10、差集保存到另一个集合中
SDIFFSTORE destination key1 key2

# 11、交集
SINTER key1 key2
SINTERSTORE destination key1 key2

# 11、并集
SUNION key1 key2
SUNIONSTORE destination key1 key2

Caso: atención común en Sina Weibo

# 需求: 当用户访问另一个用户的时候,会显示出两个用户共同关注过哪些相同的用户
# 设计: 将每个用户关注的用户放在集合中,求交集即可
# 实现:
	user001 = {
    
    'peiqi','qiaozhi','danni'}
	user002 = {
    
    'peiqi','qiaozhi','lingyang'}
  
user001和user002的共同关注为:
	SINTER user001 user002
	结果为: {
    
    'peiqi','qiaozhi'}

conjunto de operaciones de Python

import redis

r = redis.Redis(host='127.0.0.1', port=6379, db=0)

#r.sadd('pys1', 'Jack', 'qiaozhi')
#print(r.smembers('pys1'))

#print(r.spop('pys1'))

# r.sadd('pys2', 'a', 'b')
# r.sadd('pys3', 'b', 'c')
# r.sadd('pys4', 'b', 'c', 'd')
# print(r.sinter('pys2', 'pys3', 'pys4'))
print(r.sunionstore('pys5', 'pys2', 'pys3', 'pys4'))
print(r.smembers('pys5'))

Conjunto ordenado (sortedset)

  • Características
1、有序、去重
2、元素是字符串类型
3、每个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序排列集合中的元素(分值可以相同)
4、最多包含2^32-1元素
  • Ejemplo

    Una colección ordenada de precios de frutas.

Puntos 2.0 4.0 6.0 8.0 10.0
elemento sandía uva Mango plátano manzana

Ahorre el salario de una colección ordenada por el personal

Puntos 6000 8000 10000 12000
elemento lucy Tomás Jim Jacobo

Salvar a un número de personas que están leyendo los libros de ciertas tecnologías.

Puntos 300 400 555 666 777
elemento Programación básica Avanti Osama bin Laden Armstrong Bill Gates
  • Colección ordenada de comandos de uso común
# 在有序集合中添加一个成员 返回值为 成功插入到集合中的元素个数
zadd key score member
# 查看指定区间元素(升序)
zrange key start stop [withscores]
# 查看指定区间元素(降序)
zrevrange key start stop [withscores]
# 查看指定元素的分值
zscore key member

# 返回指定区间元素
# offset : 跳过多少个元素
# count : 返回几个
# 小括号 : 开区间  zrangebyscore fruits (2.0 8.0
zrangebyscore key min max [withscores] [limit offset count]
# 每页显示10个成员,显示第5页的成员信息: 
# limit 40 10    (m-1)*n  n
# MySQL: 每页显示10条记录,显示第5页的记录
# limit 40,10
# limit 2,3   显示: 第3 4 5条记录

# 删除成员
zrem key member
# 增加或者减少分值
zincrby key increment member
# 返回元素排名
zrank key member
# 返回元素逆序排名
zrevrank key member
# 删除指定区间内的元素
zremrangebyscore key min max
# 返回集合中元素个数
zcard key
# 返回指定范围中元素的个数
zcount key min max
zcount salary 6000 8000 
zcount salary (6000 8000# 6000<salary<=8000
zcount salary (6000 (8000#6000<salary<8000               
# 并集
zunionstore destination numkeys key [weights 权重值] [AGGREGATE SUM|MIN|MAX]
# zunionstore salary3 2 salary salary2 weights 1 0.5 AGGREGATE MAX
# 2代表集合数量,weights之后 权重1给salary,权重0.5给salary2集合,算完权重之后执行聚合AGGREGATE
                     
# 交集:和并集类似,只取相同的元素
zinterstore destination numkeys key1 key2 weights weight AGGREGATE SUM(默认)|MIN|MAX

Conjunto ordenado de operaciones de Python

import redis

r = redis.Redis(host='127.0.0.1', port=6379, db=0)

r.zadd('pyz1',{
    
    'tom':6000, 'jim':3000, 'jack':12000})
#[(b'jim', 3000.0), (b'tom', 6000.0), (b'jack', 12000.0)]
#print(r.zrange('pyz1', 0, -1, withscores=True))
#print(r.zrangebyscore('pyz1',3000, 12000,start=1, num=2))

#print(r.zrank('pyz1','jim'))
#[(b'jim', 3000.0), (b'tom', 6000.0), (b'jack', 12000.0)]
#print(r.zcount('pyz1', '(6000', 12000))


#r.zadd('pyz2', {'jim':8000,'gxn':10000})
r.zinterstore('pyz3', ('pyz1','pyz2'), aggregate='max')
print(r.zrange('pyz1', 0, -1, withscores=True))
print(r.zrange('pyz2', 0, -1, withscores=True))
print(r.zrange('pyz3', 0, -1, withscores=True))

Aquí, el editor es muy sincero para agradecerle por leer este artículo. Si es útil para su estudio técnico, espero que pueda ofrecer sus valiosos tres combos [Me gusta, Favorito, Compartir], su aliento, comentarios y Sugerencias es mi mayor ¡motivación! ¡Soy un trabajador tenaz y duro en la industria de Internet! Ollie

Supongo que te gusta

Origin blog.csdn.net/weixin_38640052/article/details/107812631
Recomendado
Clasificación