Cómo diseñar una cola eficiente de primero en entrar, primero en salir usando Java y Redis
Análisis:
La capa inferior de la lista de Redis es una lista vinculada "bidireccional" compuesta por múltiples estructuras de listas zip. La parte media también está un poco comprimida.
La capa más externa es un dict compuesto por dos tablas hash.
La complejidad temporal de get(key) de la tabla hash es O(1), y este O(1) teóricamente no cambiará debido al tamaño de la memoria ocupada y la cantidad de elementos. Las operaciones de sacar y poner en cola de la lista también son O(1).
La complejidad del tiempo de cola de Java también debería ser O(1).
¿Puedo usar directamente la lista de Redis para hacer primero en entrar, primero en salir?
Caso 1, la cantidad de datos no es grande, se puede usar
Caso 2, la cantidad de datos es grande, pero los datos almacenados son un valor simple como la activación código, se puede utilizar.
En el caso 3, la lista almacena el índice de los datos a obtener, y los valores de una gran cantidad de datos ya están almacenados en la estructura KV de redis.
En este momento, si los datos tienen que realizar una búsqueda de hash de Redis (O (1)) cada vez que los datos obtienen los siguientes datos, entonces la lista de Redis aparecerá desde el principio o el final. Después de regresar de la red IO, el programa Java usa la clave para solicitar que redis obtenga (clave) (O (1)). Aquí hay dos IO de red o IO entre procesos.
En este momento, no puede usar la lista de Redis para almacenar el índice, sino simplemente usar la estructura hash KV grande de Redis para almacenar el valor clave. Utilice ① la cola de Java primero en entrar, primero en salir para obtener la siguiente clave o ② utilice reglas de generación de claves preespecificadas para que las claves sean regulares y ordenadas, como ID de incremento automático, y luego cada adquisición es ID ++, directamente desde redis. get(ID.next()); para obtener el valor.
El último es el método más eficiente, diseñado para quitar la cola de manera eficiente en escenarios especiales. Pero si se trata sólo de una cantidad general de datos, no es mala idea utilizar la lista de Redis.