Redis lists
Introduction to Redis lists
Redis lists are linked lists of string values. Redis lists are frequently used to:
- Implement stacks and queues.
- Build queue management for background worker systems.
Examples
-
Treat a list like a queue (first in, first out):
Queue pattern: Use LPUSH to add items and RPOP to remove them in FIFO order when you need to process items in the order they were added> LPUSH bikes:repairs bike:1 (integer) 1 > LPUSH bikes:repairs bike:2 (integer) 2 > RPOP bikes:repairs "bike:1" > RPOP bikes:repairs "bike:2"""" Code samples for List doc pages: https://redis.io/docs/latest/develop/data-types/lists/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.lpush("bikes:repairs", "bike:1") print(res1) # >>> 1 res2 = r.lpush("bikes:repairs", "bike:2") print(res2) # >>> 2 res3 = r.rpop("bikes:repairs") print(res3) # >>> bike:1 res4 = r.rpop("bikes:repairs") print(res4) # >>> bike:2 res5 = r.lpush("bikes:repairs", "bike:1") print(res5) # >>> 1 res6 = r.lpush("bikes:repairs", "bike:2") print(res6) # >>> 2 res7 = r.lpop("bikes:repairs") print(res7) # >>> bike:2 res8 = r.lpop("bikes:repairs") print(res8) # >>> bike:1 res9 = r.llen("bikes:repairs") print(res9) # >>> 0 res10 = r.lpush("bikes:repairs", "bike:1") print(res10) # >>> 1 res11 = r.lpush("bikes:repairs", "bike:2") print(res11) # >>> 2 res12 = r.lmove("bikes:repairs", "bikes:finished", "LEFT", "LEFT") print(res12) # >>> 'bike:2' res13 = r.lrange("bikes:repairs", 0, -1) print(res13) # >>> ['bike:1'] res14 = r.lrange("bikes:finished", 0, -1) print(res14) # >>> ['bike:2'] r.delete("bikes:repairs") res15 = r.rpush("bikes:repairs", "bike:1") print(res15) # >>> 1 res16 = r.rpush("bikes:repairs", "bike:2") print(res16) # >>> 2 res17 = r.lpush("bikes:repairs", "bike:important_bike") print(res17) # >>> 3 res18 = r.lrange("bikes:repairs", 0, -1) print(res18) # >>> ['bike:important_bike', 'bike:1', 'bike:2'] r.delete("bikes:repairs") res19 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res19) # >>> 3 res20 = r.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike") print(res20) # >>> 5 res21 = r.lrange("bikes:repairs", 0, -1) print( res21 ) # >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... r.delete("bikes:repairs") res22 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res22) # >>> 3 res23 = r.rpop("bikes:repairs") print(res23) # >>> 'bike:3' res24 = r.lpop("bikes:repairs") print(res24) # >>> 'bike:1' res25 = r.rpop("bikes:repairs") print(res25) # >>> 'bike:2' res26 = r.rpop("bikes:repairs") print(res26) # >>> None res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", 0, 2) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:1', 'bike:2', 'bike:3'] r.delete("bikes:repairs") res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", -3, -1) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:3', 'bike:4', 'bike:5'] r.delete("bikes:repairs") res31 = r.rpush("bikes:repairs", "bike:1", "bike:2") print(res31) # >>> 2 res32 = r.brpop("bikes:repairs", timeout=1) print(res32) # >>> ('bikes:repairs', 'bike:2') res33 = r.brpop("bikes:repairs", timeout=1) print(res33) # >>> ('bikes:repairs', 'bike:1') res34 = r.brpop("bikes:repairs", timeout=1) print(res34) # >>> None res35 = r.delete("new_bikes") print(res35) # >>> 0 res36 = r.lpush("new_bikes", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 r.delete("new_bikes") res37 = r.set("new_bikes", "bike:1") print(res37) # >>> True res38 = r.type("new_bikes") print(res38) # >>> 'string' try: res39 = r.lpush("new_bikes", "bike:2", "bike:3") # >>> redis.exceptions.ResponseError: # >>> WRONGTYPE Operation against a key holding the wrong kind of value except redis.exceptions.ResponseError as e: print(e) r.delete("bikes:repairs") r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 res40 = r.exists("bikes:repairs") print(res40) # >>> 1 res41 = r.lpop("bikes:repairs") print(res41) # >>> 'bike:3' res42 = r.lpop("bikes:repairs") print(res42) # >>> 'bike:2' res43 = r.lpop("bikes:repairs") print(res43) # >>> 'bike:1' res44 = r.exists("bikes:repairs") print(res44) # >>> False r.delete("bikes:repairs") res45 = r.delete("bikes:repairs") print(res45) # >>> 0 res46 = r.llen("bikes:repairs") print(res46) # >>> 0 res47 = r.lpop("bikes:repairs") print(res47) # >>> None r.delete("bikes:repairs") res48 = r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res48) # >>> 5 res49 = r.ltrim("bikes:repairs", 0, 2) print(res49) # >>> True res50 = r.lrange("bikes:repairs", 0, -1) print(res50) # >>> ['bike:5', 'bike:4', 'bike:3']import { createClient } from 'redis'; const client = createClient(); await client.connect(); const res1 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res1); // 1 const res2 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res2); // 2 const res3 = await client.rPop('bikes:repairs'); console.log(res3); // bike:1 const res4 = await client.rPop('bikes:repairs'); console.log(res4); // bike:2 const res5 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res5); // 1 const res6 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res6); // 2 const res7 = await client.lPop('bikes:repairs'); console.log(res7); // bike:2 const res8 = await client.lPop('bikes:repairs'); console.log(res8); // bike:1 const res9 = await client.lLen('bikes:repairs'); console.log(res9); // 0 const res10 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res10); // 1 const res11 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res11); // 2 const res12 = await client.lMove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); console.log(res12); // 'bike:2' const res13 = await client.lRange('bikes:repairs', 0, -1); console.log(res13); // ['bike:1'] const res14 = await client.lRange('bikes:finished', 0, -1); console.log(res14); // ['bike:2'] await client.del('bikes:repairs'); const res15 = await client.rPush('bikes:repairs', 'bike:1'); console.log(res15); // 1 const res16 = await client.rPush('bikes:repairs', 'bike:2'); console.log(res16); // 2 const res17 = await client.lPush('bikes:repairs', 'bike:important_bike'); console.log(res17); // 3 const res18 = await client.lRange('bikes:repairs', 0, -1); console.log(res18); // ['bike:important_bike', 'bike:1', 'bike:2'] await client.del('bikes:repairs'); const res19 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res19); // 3 const res20 = await client.lPush( 'bikes:repairs', ['bike:important_bike', 'bike:very_important_bike'] ); console.log(res20); // 5 const res21 = await client.lRange('bikes:repairs', 0, -1); console.log(res21); // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3'] await client.del('bikes:repairs'); const res22 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res22); // 3 const res23 = await client.rPop('bikes:repairs'); console.log(res23); // 'bike:3' const res24 = await client.lPop('bikes:repairs'); console.log(res24); // 'bike:1' const res25 = await client.rPop('bikes:repairs'); console.log(res25); // 'bike:2' const res26 = await client.rPop('bikes:repairs'); console.log(res26); // null const res27 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27); // 5 const res28 = await client.lTrim('bikes:repairs', 0, 2); console.log(res28); // OK const res29 = await client.lRange('bikes:repairs', 0, -1); console.log(res29); // ['bike:5', 'bike:4', 'bike:3'] await client.del('bikes:repairs'); const res27eol = await client.rPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27eol); // 5 const res28eol = await client.lTrim('bikes:repairs', -3, -1); console.log(res28eol); // 'OK' const res29eol = await client.lRange('bikes:repairs', 0, -1); console.log(res29eol); // ['bike:3', 'bike:4', 'bike:5'] await client.del('bikes:repairs'); const res31 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2']); console.log(res31); // 2 const res32 = await client.brPop('bikes:repairs', 1); console.log(res32); // { key: 'bikes:repairs', element: 'bike:2' } const res33 = await client.brPop('bikes:repairs', 1); console.log(res33); // { key: 'bikes:repairs', element: 'bike:1' } const res34 = await client.brPop('bikes:repairs', 1); console.log(res34); // null const res35 = await client.del('new_bikes'); console.log(res35); // 0 const res36 = await client.lPush('new_bikes', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 await client.del('new_bikes'); const res37 = await client.set('new_bikes', 'bike:1'); console.log(res37); // 'OK' const res38 = await client.type('new_bikes'); console.log(res38); // 'string' try { const res39 = await client.lPush('new_bikes', 'bike:2', 'bike:3'); // redis.exceptions.ResponseError: // [SimpleError: WRONGTYPE Operation against a key holding the wrong kind of value] } catch(e){ console.log(e); } await client.del('bikes:repairs'); await client.lPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 const res40 = await client.exists('bikes:repairs') console.log(res40); // 1 const res41 = await client.lPop('bikes:repairs'); console.log(res41); // 'bike:3' const res42 = await client.lPop('bikes:repairs'); console.log(res42); // 'bike:2' const res43 = await client.lPop('bikes:repairs'); console.log(res43); // 'bike:1' const res44 = await client.exists('bikes:repairs'); console.log(res44); // 0 await client.del('bikes:repairs'); const res45 = await client.del('bikes:repairs'); console.log(res45); // 0 const res46 = await client.lLen('bikes:repairs'); console.log(res46); // 0 const res47 = await client.lPop('bikes:repairs'); console.log(res47); // null await client.del('bikes:repairs'); const res48 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res48); // 5 const res49 = await client.lTrim('bikes:repairs', 0, 2); console.log(res49); // 'OK' const res50 = await client.lRange('bikes:repairs', 0, -1); console.log(res50); // ['bike:5', 'bike:4', 'bike:3'] await client.close();import redis.clients.jedis.UnifiedJedis; import redis.clients.jedis.args.ListDirection; import java.util.List; public class ListExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res2); // >>> 2 String res3 = jedis.rpop("bikes:repairs"); System.out.println(res3); // >>> bike:1 String res4 = jedis.rpop("bikes:repairs"); System.out.println(res4); // >>> bike:2 long res5 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res5); // >>> 1 long res6 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res6); // >>> 2 String res7 = jedis.lpop("bikes:repairs"); System.out.println(res7); // >>> bike:2 String res8 = jedis.lpop("bikes:repairs"); System.out.println(res8); // >>> bike:1 long res9 = jedis.llen("bikes:repairs"); System.out.println(res9); // >>> 0 long res10 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res10); // >>> 1 long res11 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res11); // >>> 2 String res12 = jedis.lmove("bikes:repairs", "bikes:finished", ListDirection.LEFT, ListDirection.LEFT); System.out.println(res12); // >>> bike:2 List<String> res13 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res13); // >>> [bike:1] List<String> res14 = jedis.lrange("bikes:finished", 0, -1); System.out.println(res14); // >>> [bike:2] jedis.del("bikes:repairs"); long res15 = jedis.rpush("bikes:repairs", "bike:1"); System.out.println(res15); // >>> 1 long res16 = jedis.rpush("bikes:repairs", "bike:2"); System.out.println(res16); // >>> 2 long res17 = jedis.lpush("bikes:repairs", "bike:important_bike"); System.out.println(res17); // >>> 3 List<String> res18 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res18); // >>> [bike:important_bike, bike:1, bike:2] jedis.del("bikes:repairs"); long res19 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res19); // >>> 3 long res20 = jedis.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); System.out.println(res20); // >>> 5 List<String> res21 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res21); // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); long res22 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res22); // >>> 3 String res23 = jedis.rpop("bikes:repairs"); System.out.println(res23); // >>> bike:3 String res24 = jedis.lpop("bikes:repairs"); System.out.println(res24); // >>> bike:1 String res25 = jedis.rpop("bikes:repairs"); System.out.println(res25); // >>> bike:2 String res26 = jedis.rpop("bikes:repairs"); System.out.println(res26); // >>> null long res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 String res28 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res28); // >>> OK List<String> res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 res28 = jedis.ltrim("bikes:repairs", -3, -1); System.out.println(res2); // >>> OK res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:3, bike:4, bike:5] jedis.del("bikes:repairs"); long res31 = jedis.rpush("bikes:repairs", "bike:1", "bike:2"); System.out.println(res31); // >>> 2 List<String> res32 = jedis.brpop(1, "bikes:repairs"); System.out.println(res32); // >>> (bikes:repairs, bike:2) List<String> res33 = jedis.brpop(1,"bikes:repairs"); System.out.println(res33); // >>> (bikes:repairs, bike:1) List<String> res34 = jedis.brpop(1,"bikes:repairs"); System.out.println(res34); // >>> null jedis.del("new_bikes"); long res36 = jedis.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 jedis.del("new_bikes"); String res37 = jedis.set("new_bikes", "bike:1"); System.out.println(res37); // >>> OK String res38 = jedis.type("new_bikes"); System.out.println(res38); // >>> string try { long res39 = jedis.lpush("new_bikes", "bike:2", "bike:3"); } catch (Exception e) { e.printStackTrace(); // >>> redis.clients.jedis.exceptions.JedisDataException: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } jedis.del("bikes:repairs"); jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 boolean res40 = jedis.exists("bikes:repairs"); System.out.println(res40); // >>> true String res41 = jedis.lpop("bikes:repairs"); System.out.println(res41); // >>> bike:3 String res42 = jedis.lpop("bikes:repairs"); System.out.println(res42); // >>> bike:2 String res43 = jedis.lpop("bikes:repairs"); System.out.println(res43); // >>> bike:1 boolean res44 = jedis.exists("bikes:repairs"); System.out.println(res44); // >>> false jedis.del("bikes:repairs"); long res46 = jedis.llen("bikes:repairs"); System.out.println(res46); // >>> 0 String res47 = jedis.lpop("bikes:repairs"); System.out.println(res47); // >>> null jedis.del("bikes:repairs"); long res48 = jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res48); // >>> 5 String res49 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res49); // >>> OK List<String> res50 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res50); // >>> [bike:5, bike:4, bike:3] jedis.close(); } }package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.concurrent.CompletableFuture; public class ListExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> queue = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 2 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res3 -> { System.out.println(res3); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:2 .toCompletableFuture(); queue.join(); CompletableFuture<Void> stack = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res4 -> { System.out.println(res4); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res6 -> { System.out.println(res6); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:1 .toCompletableFuture(); stack.join(); CompletableFuture<Void> llen = asyncCommands.llen("bikes:repairs") .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); llen.join(); CompletableFuture<Void> lmovelrange = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res7 -> { System.out.println(res7); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res8 -> { System.out.println(res8); // >>> 2 return asyncCommands.lmove("bikes:repairs", "bikes:finished", LMoveArgs.Builder.leftLeft()); }).thenCompose(res9 -> { System.out.println(res9); // >>> bike:2 return asyncCommands.lrange("bikes:repairs", 0, -1); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:1] return asyncCommands.lrange("bikes:finished", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:2] .toCompletableFuture(); lmovelrange.join(); CompletableFuture<Void> lpushrpush = asyncCommands.rpush("bikes:repairs", "bike:1").thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.rpush("bikes:repairs", "bike:2"); }).thenCompose(res12 -> { System.out.println(res12); // >>> 2 return asyncCommands.lpush("bikes:repairs", "bike:important_bike"); }).thenCompose(res13 -> { System.out.println(res13); // >>> 3 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:important_bike, bike:1, bike:2] .toCompletableFuture(); lpushrpush.join(); CompletableFuture<Void> variadic = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res14 -> { System.out.println(res14); // >>> 3 return asyncCommands.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); }).thenCompose(res15 -> { System.out.println(res15); // >>> 5 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] .toCompletableFuture(); variadic.join(); CompletableFuture<Void> lpoprpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res16 -> { System.out.println(res16); // >>> 3 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res17 -> { System.out.println(res17); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res18 -> { System.out.println(res18); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res19 -> { System.out.println(res19); // >>> bike:2 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); lpoprpop.join(); CompletableFuture<Void> ltrim = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res20 -> { System.out.println(res20); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res21 -> { System.out.println(res21); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim.join(); CompletableFuture<Void> ltrimendoflist = asyncCommands .rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res22 -> { System.out.println(res22); // >>> 5 return asyncCommands.ltrim("bikes:repairs", -3, -1); }).thenCompose(res23 -> { System.out.println(res23); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:3, bike:4, bike:5] .toCompletableFuture(); ltrimendoflist.join(); CompletableFuture<Void> brpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2").thenCompose(res24 -> { System.out.println(res24); // >>> 2 return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res25 -> { System.out.println(res25); // >>> KeyValue[bikes:repairs, bike:2] return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res26 -> { System.out.println(res26); // >>> KeyValue[bikes:repairs, bike:1] return asyncCommands.brpop(1, "bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); brpop.join(); CompletableFuture<Void> rule1 = asyncCommands.del("new_bikes").thenCompose(res27 -> { System.out.println(res27); // >>> 0 return asyncCommands.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); rule1.join(); CompletableFuture<Void> rule11 = asyncCommands.set("new_bikes_string", "bike:1").thenCompose(res28 -> { System.out.println(res28); // >>> OK return asyncCommands.type("new_bikes_string"); }).thenCompose(res29 -> { System.out.println(res29); // >>> string return asyncCommands.lpush("new_bikes_string", "bike:2", "bike:3"); }).handle((res, ex) -> { if (ex == null) { return res; } else { System.out.println(ex); // >>> java.util.concurrent.CompletionException: // >>> io.lettuce.core.RedisCommandExecutionException: // >>> WRONGTYPE Operation against a key holding the wrong // >>> kind of value return -1L; } }) .thenAccept(System.out::println) // >>> -1 .toCompletableFuture(); rule11.join(); CompletableFuture<Void> rule2 = asyncCommands.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res30 -> { System.out.println(res30); // >>> 3 return asyncCommands.exists("bikes:repairs"); }).thenCompose(res31 -> { System.out.println(res31); // >>> 1 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res32 -> { System.out.println(res32); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res33 -> { System.out.println(res33); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res34 -> { System.out.println(res34); // >>> bike:1 return asyncCommands.exists("bikes:repairs"); }) .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); rule2.join(); CompletableFuture<Void> rule3 = asyncCommands.del("bikes:repairs").thenCompose(res35 -> { System.out.println(res35); // >>> 0 return asyncCommands.llen("bikes:repairs"); }).thenCompose(res36 -> { System.out.println(res36); // >>> 0 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); rule3.join(); CompletableFuture<Void> ltrim1 = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res37 -> { System.out.println(res37); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res38 -> { System.out.println(res38); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim1.join(); } finally { redisClient.shutdown(); } } }package example_commands_test import ( "context" "fmt" "github.com/redis/go-redis/v9" ) func ExampleClient_queue() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 2 res3, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> bike:1 res4, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> bike:2 } func ExampleClient_stack() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res5, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> 1 res6, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> 2 res7, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> bike:2 res8, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> bike:1 } func ExampleClient_llen() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 0 } func ExampleClient_lmove_lrange() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res10, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res10) // >>> 1 res11, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> 2 res12, err := rdb.LMove(ctx, "bikes:repairs", "bikes:finished", "LEFT", "LEFT").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> bike:2 res13, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res13) // >>> [bike:1] res14, err := rdb.LRange(ctx, "bikes:finished", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:2] } func ExampleClient_lpush_rpush() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res15, err := rdb.RPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res15) // >>> 1 res16, err := rdb.RPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> 2 res17, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> 3 res18, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res18) // >>> [bike:important_bike bike:1 bike:2] } func ExampleClient_variadic() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res19, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 3 res20, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike", "bike:very_important_bike").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> 5 res21, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res21) // >>> [bike:very_important_bike bike:important_bike bike:1 bike:2 bike:3] } func ExampleClient_lpop_rpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res22, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> 3 res23, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res23) // >>> bike:3 res24, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res24) // >>> bike:1 res25, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res25) // >>> bike:2 res26, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res26) // >>> <empty string> } func ExampleClient_ltrim() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res27, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res27) // >>> 5 res28, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res28) // >>> OK res29, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res29) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_ltrim_end_of_list() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res30, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res30) // >>> 5 res31, err := rdb.LTrim(ctx, "bikes:repairs", -3, -1).Result() if err != nil { panic(err) } fmt.Println(res31) // >>> OK res32, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res32) // >>> [bike:3 bike:4 bike:5] } func ExampleClient_brpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res33, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res33) // >>> 2 res34, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res34) // >>> [bikes:repairs bike:2] res35, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res35) // >>> [bikes:repairs bike:1] res36, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res36) // >>> [] } func ExampleClient_rule1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res37, err := rdb.Del(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res37) // >>> 0 res38, err := rdb.LPush(ctx, "new_bikes", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res38) // >>> 3 } func ExampleClient_rule11() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "new_bikes") res39, err := rdb.Set(ctx, "new_bikes", "bike:1", 0).Result() if err != nil { panic(err) } fmt.Println(res39) // >>> OK res40, err := rdb.Type(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res40) // >>> string res41, err := rdb.LPush(ctx, "new_bikes", "bike:2", "bike:3").Result() if err != nil { fmt.Println(err) // >>> WRONGTYPE Operation against a key holding the wrong kind of value } fmt.Println(res41) } func ExampleClient_rule2() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res42, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res42) // >>> 3 res43, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res43) // >>> 1 res44, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res44) // >>> bike:3 res45, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res45) // >>> bike:2 res46, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res46) // >>> bike:1 res47, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res47) // >>> 0 } func ExampleClient_rule3() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res48, err := rdb.Del(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res48) // >>> 0 res49, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res49) // >>> 0 res50, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res50) // >>> <empty string> } func ExampleClient_ltrim1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res51, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res51) // >>> 5 res52, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res52) // >>> OK res53, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res53) // >>> [bike:5 bike:4 bike:3] }using NRedisStack; using StackExchange.Redis; public class ListExample { public void Run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res1); // >>> 1 long res2 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res2); // >>> 2 RedisValue res3 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res3); // >>> "bike:1" RedisValue res4 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res4); // >>> "bike:2" long res5 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res5); // >>> 1 long res6 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res6); // >>> 2 RedisValue res7 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res7); // >>> "bike:2" RedisValue res8 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res8); // >>> "bike:1" long res9 = db.ListLength("bikes:repairs"); Console.WriteLine(res9); // >>> 0 long res10 = db.ListLeftPush("{bikes}:repairs", "bike:1"); Console.WriteLine(res10); // >>> 1 long res11 = db.ListLeftPush("{bikes}:repairs", "bike:2"); Console.WriteLine(res11); // >>> 2 RedisValue res12 = db.ListMove("{bikes}:repairs", "{bikes}:finished", ListSide.Left, ListSide.Left); Console.Write(res12); // >>> "bike:2" RedisValue[] res13 = db.ListRange("{bikes}:repairs", 0, -1); Console.WriteLine(string.Join(", ", res13)); // >>> "bike:1" RedisValue[] res14 = db.ListRange("{bikes}:finished", 0, -1); Console.WriteLine(string.Join(", ", res14)); // >>> "bike:2" db.KeyDelete("bikes:repairs"); long res15 = db.ListRightPush("bikes:repairs", "bike:1"); Console.WriteLine(res15); // >>> 1 long res16 = db.ListRightPush("bikes:repairs", "bike:2"); Console.WriteLine(res16); // >>> 2 long res17 = db.ListLeftPush("bikes:repairs", "bike:important_bike"); Console.WriteLine(res17); // >>> 3 RedisValue[] res18 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res18)); // >>> "bike:important_bike, bike:1, bike:2" db.KeyDelete("bikes:repairs"); long res19 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res19); // >>> 3 long res20 = db.ListLeftPush("bikes:repairs", ["bike:important_bike", "bike:very_important_bike"]); Console.WriteLine(res20); // >>> 5 RedisValue[] res21 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res21)); // >>> "bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3" db.KeyDelete("bikes:repairs"); long res22 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res22); // >>> 3 RedisValue res23 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res23); // >>> "bike:3" RedisValue res24 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res24); // >>> "bike:1" RedisValue res25 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res25); // >>> "bike:2" RedisValue res26 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res26); // >>> <Empty string> long res27 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res27); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res28 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res28)); // "bike:5, bike:4, bike:3" db.KeyDelete("bikes:repairs"); long res29 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res29); // >>> 5 db.ListTrim("bikes:repairs", -3, -1); RedisValue[] res30 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res30)); // >>> "bike:3, bike:4, bike:5" db.KeyDelete("bikes:repairs"); long res31 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2"]); Console.WriteLine(res31); // >>> 2 Tuple<RedisKey, RedisValue>? res32 = db.BRPop(["bikes:repairs"], 1); if (res32 != null) Console.WriteLine($"{res32.Item1} -> {res32.Item2}"); // >>> "bikes:repairs -> bike:2" Tuple<RedisKey, RedisValue>? res33 = db.BRPop(["bikes:repairs"], 1); if (res33 != null) Console.WriteLine($"{res33.Item1} -> {res33.Item2}"); // >>> "bikes:repairs -> bike:1" Tuple<RedisKey, RedisValue>? res34 = db.BRPop(["bikes:repairs"], 1); Console.WriteLine(res34); // >>> "Null" db.KeyDelete("new_bikes"); long res36 = db.ListRightPush("new_bikes", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res36); // >>> 3 db.KeyDelete("new_bikes"); bool res37 = db.StringSet("new_bikes", "bike:1"); Console.WriteLine(res37); // >>> True RedisType res38 = db.KeyType("new_bikes"); Console.WriteLine(res38); // >>> RedisType.String try { long res39 = db.ListRightPush("new_bikes", ["bike:2", "bike:3"]); } catch (Exception e) { Console.WriteLine(e); } db.KeyDelete("bikes:repairs"); long res40 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res40); // >>> 3 bool res41 = db.KeyExists("bikes:repairs"); Console.WriteLine(res41); // >>> True RedisValue res42 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res42); // >>> "bike:3" RedisValue res43 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res43); // >>> "bike:2" RedisValue res44 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res44); // >>> "bike:1" bool res45 = db.KeyExists("bikes:repairs"); Console.WriteLine(res45); // >>> False db.KeyDelete("bikes:repairs"); long res47 = db.ListLength("bikes:repairs"); Console.WriteLine(res47); // >>> 0 RedisValue res48 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res48); // >>> Null db.KeyDelete("bikes:repairs"); long res49 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res49); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res50 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res50)); // >>> "bike:5, bike:4, bike:3" } }<?php require 'vendor/autoload.php'; use Predis\Client as PredisClient; class DtListTest { public function testDtList() { $r = new PredisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'database' => 0, ]); $res1 = $r->lpush('bikes:repairs', 'bike:1'); echo $res1 . PHP_EOL; // >>> 1 $res2 = $r->lpush('bikes:repairs', 'bike:2'); echo $res2 . PHP_EOL; // >>> 2 $res3 = $r->rpop('bikes:repairs'); echo $res3 . PHP_EOL; // >>> bike:1 $res4 = $r->rpop('bikes:repairs'); echo $res4 . PHP_EOL; // >>> bike:2 $res5 = $r->lpush('bikes:repairs', 'bike:1'); echo $res5 . PHP_EOL; // >>> 1 $res6 = $r->lpush('bikes:repairs', 'bike:2'); echo $res6 . PHP_EOL; // >>> 2 $res7 = $r->lpop('bikes:repairs'); echo $res7 . PHP_EOL; // >>> bike:2 $res8 = $r->lpop('bikes:repairs'); echo $res8 . PHP_EOL; // >>> bike:1 $res9 = $r->llen('bikes:repairs'); echo $res9 . PHP_EOL; // >>> 0 $res10 = $r->lpush('bikes:repairs', 'bike:1'); echo $res10 . PHP_EOL; // >>> 1 $res11 = $r->lpush('bikes:repairs', 'bike:2'); echo $res11 . PHP_EOL; // >>> 2 $res12 = $r->lmove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); echo $res12 . PHP_EOL; // >>> 'bike:2' $res13 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res13) . PHP_EOL; // >>> ['bike:1'] $res14 = $r->lrange('bikes:finished', 0, -1); echo json_encode($res14) . PHP_EOL; // >>> ['bike:2'] $r->del('bikes:repairs'); $res15 = $r->rpush('bikes:repairs', 'bike:1'); echo $res15 . PHP_EOL; // >>> 1 $res16 = $r->rpush('bikes:repairs', 'bike:2'); echo $res16 . PHP_EOL; // >>> 2 $res17 = $r->lpush('bikes:repairs', 'bike:important_bike'); echo $res17 . PHP_EOL; // >>> 3 $res18 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res18) . PHP_EOL; // >>> ['bike:important_bike', 'bike:1', 'bike:2'] $r->del('bikes:repairs'); $res19 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res19 . PHP_EOL; // >>> 3 $res20 = $r->lpush('bikes:repairs', 'bike:important_bike', 'bike:very_important_bike'); echo $res20 . PHP_EOL; // >>> 5 $res21 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res21) . PHP_EOL; // >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... $r->del('bikes:repairs'); $res22 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res22 . PHP_EOL; // >>> 3 $res23 = $r->rpop('bikes:repairs'); echo $res23 . PHP_EOL; // >>> 'bike:3' $res24 = $r->lpop('bikes:repairs'); echo $res24 . PHP_EOL; // >>> 'bike:1' $res25 = $r->rpop('bikes:repairs'); echo $res25 . PHP_EOL; // >>> 'bike:2' $res26 = $r->rpop('bikes:repairs'); echo $res26 . PHP_EOL; // >>> None $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', 0, 2); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:1', 'bike:2', 'bike:3'] $r->del('bikes:repairs'); $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', -3, -1); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:3', 'bike:4', 'bike:5'] $r->del('bikes:repairs'); $res31 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2'); echo $res31 . PHP_EOL; // >>> 2 $res32 = $r->brpop('bikes:repairs', 1); echo json_encode($res32) . PHP_EOL; // >>> ['bikes:repairs', 'bike:2'] $res33 = $r->brpop('bikes:repairs', 1); echo json_encode($res33) . PHP_EOL; // >>> ['bikes:repairs', 'bike:1'] $res34 = $r->brpop('bikes:repairs', 1); echo json_encode($res34) . PHP_EOL; // >>> None $res35 = $r->del('new_bikes'); echo $res35 . PHP_EOL; // >>> 0 $res36 = $r->lpush('new_bikes', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $r->del('new_bikes'); $res37 = $r->set('new_bikes', 'bike:1'); echo $res37 . PHP_EOL; // >>> True $res38 = $r->type('new_bikes'); echo $res38 . PHP_EOL; // >>> 'string' try { $res39 = $r->lpush('new_bikes', 'bike:2', 'bike:3'); // >>> redis.exceptions.ResponseError: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } catch (\Predis\Response\ServerException $e) { echo $e->getMessage() . PHP_EOL; } $r->del('bikes:repairs'); $res36 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $res40 = $r->exists('bikes:repairs'); echo $res40 . PHP_EOL; // >>> 1 $res41 = $r->lpop('bikes:repairs'); echo $res41 . PHP_EOL; // >>> 'bike:3' $res42 = $r->lpop('bikes:repairs'); echo $res42 . PHP_EOL; // >>> 'bike:2' $res43 = $r->lpop('bikes:repairs'); echo $res43 . PHP_EOL; // >>> 'bike:1' $res44 = $r->exists('bikes:repairs'); echo $res44 . PHP_EOL; // >>> False $res45 = $r->del('bikes:repairs'); echo $res45 . PHP_EOL; // >>> 0 $res46 = $r->llen('bikes:repairs'); echo $res46 . PHP_EOL; // >>> 0 $res47 = $r->lpop('bikes:repairs'); echo $res47 . PHP_EOL; // >>> None $res48 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res48 . PHP_EOL; // >>> 5 $res49 = $r->ltrim('bikes:repairs', 0, 2); echo $res49 . PHP_EOL; // >>> True $res50 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res50) . PHP_EOL; // >>> ['bike:5', 'bike:4', 'bike:3'] } } -
Treat a list like a stack (first in, last out):
Stack pattern: Use LPUSH to add items and LPOP to remove them in LIFO order when you need to process items in reverse order> LPUSH bikes:repairs bike:1 (integer) 1 > LPUSH bikes:repairs bike:2 (integer) 2 > LPOP bikes:repairs "bike:2" > LPOP bikes:repairs "bike:1"""" Code samples for List doc pages: https://redis.io/docs/latest/develop/data-types/lists/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.lpush("bikes:repairs", "bike:1") print(res1) # >>> 1 res2 = r.lpush("bikes:repairs", "bike:2") print(res2) # >>> 2 res3 = r.rpop("bikes:repairs") print(res3) # >>> bike:1 res4 = r.rpop("bikes:repairs") print(res4) # >>> bike:2 res5 = r.lpush("bikes:repairs", "bike:1") print(res5) # >>> 1 res6 = r.lpush("bikes:repairs", "bike:2") print(res6) # >>> 2 res7 = r.lpop("bikes:repairs") print(res7) # >>> bike:2 res8 = r.lpop("bikes:repairs") print(res8) # >>> bike:1 res9 = r.llen("bikes:repairs") print(res9) # >>> 0 res10 = r.lpush("bikes:repairs", "bike:1") print(res10) # >>> 1 res11 = r.lpush("bikes:repairs", "bike:2") print(res11) # >>> 2 res12 = r.lmove("bikes:repairs", "bikes:finished", "LEFT", "LEFT") print(res12) # >>> 'bike:2' res13 = r.lrange("bikes:repairs", 0, -1) print(res13) # >>> ['bike:1'] res14 = r.lrange("bikes:finished", 0, -1) print(res14) # >>> ['bike:2'] r.delete("bikes:repairs") res15 = r.rpush("bikes:repairs", "bike:1") print(res15) # >>> 1 res16 = r.rpush("bikes:repairs", "bike:2") print(res16) # >>> 2 res17 = r.lpush("bikes:repairs", "bike:important_bike") print(res17) # >>> 3 res18 = r.lrange("bikes:repairs", 0, -1) print(res18) # >>> ['bike:important_bike', 'bike:1', 'bike:2'] r.delete("bikes:repairs") res19 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res19) # >>> 3 res20 = r.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike") print(res20) # >>> 5 res21 = r.lrange("bikes:repairs", 0, -1) print( res21 ) # >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... r.delete("bikes:repairs") res22 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res22) # >>> 3 res23 = r.rpop("bikes:repairs") print(res23) # >>> 'bike:3' res24 = r.lpop("bikes:repairs") print(res24) # >>> 'bike:1' res25 = r.rpop("bikes:repairs") print(res25) # >>> 'bike:2' res26 = r.rpop("bikes:repairs") print(res26) # >>> None res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", 0, 2) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:1', 'bike:2', 'bike:3'] r.delete("bikes:repairs") res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", -3, -1) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:3', 'bike:4', 'bike:5'] r.delete("bikes:repairs") res31 = r.rpush("bikes:repairs", "bike:1", "bike:2") print(res31) # >>> 2 res32 = r.brpop("bikes:repairs", timeout=1) print(res32) # >>> ('bikes:repairs', 'bike:2') res33 = r.brpop("bikes:repairs", timeout=1) print(res33) # >>> ('bikes:repairs', 'bike:1') res34 = r.brpop("bikes:repairs", timeout=1) print(res34) # >>> None res35 = r.delete("new_bikes") print(res35) # >>> 0 res36 = r.lpush("new_bikes", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 r.delete("new_bikes") res37 = r.set("new_bikes", "bike:1") print(res37) # >>> True res38 = r.type("new_bikes") print(res38) # >>> 'string' try: res39 = r.lpush("new_bikes", "bike:2", "bike:3") # >>> redis.exceptions.ResponseError: # >>> WRONGTYPE Operation against a key holding the wrong kind of value except redis.exceptions.ResponseError as e: print(e) r.delete("bikes:repairs") r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 res40 = r.exists("bikes:repairs") print(res40) # >>> 1 res41 = r.lpop("bikes:repairs") print(res41) # >>> 'bike:3' res42 = r.lpop("bikes:repairs") print(res42) # >>> 'bike:2' res43 = r.lpop("bikes:repairs") print(res43) # >>> 'bike:1' res44 = r.exists("bikes:repairs") print(res44) # >>> False r.delete("bikes:repairs") res45 = r.delete("bikes:repairs") print(res45) # >>> 0 res46 = r.llen("bikes:repairs") print(res46) # >>> 0 res47 = r.lpop("bikes:repairs") print(res47) # >>> None r.delete("bikes:repairs") res48 = r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res48) # >>> 5 res49 = r.ltrim("bikes:repairs", 0, 2) print(res49) # >>> True res50 = r.lrange("bikes:repairs", 0, -1) print(res50) # >>> ['bike:5', 'bike:4', 'bike:3']import { createClient } from 'redis'; const client = createClient(); await client.connect(); const res1 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res1); // 1 const res2 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res2); // 2 const res3 = await client.rPop('bikes:repairs'); console.log(res3); // bike:1 const res4 = await client.rPop('bikes:repairs'); console.log(res4); // bike:2 const res5 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res5); // 1 const res6 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res6); // 2 const res7 = await client.lPop('bikes:repairs'); console.log(res7); // bike:2 const res8 = await client.lPop('bikes:repairs'); console.log(res8); // bike:1 const res9 = await client.lLen('bikes:repairs'); console.log(res9); // 0 const res10 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res10); // 1 const res11 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res11); // 2 const res12 = await client.lMove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); console.log(res12); // 'bike:2' const res13 = await client.lRange('bikes:repairs', 0, -1); console.log(res13); // ['bike:1'] const res14 = await client.lRange('bikes:finished', 0, -1); console.log(res14); // ['bike:2'] await client.del('bikes:repairs'); const res15 = await client.rPush('bikes:repairs', 'bike:1'); console.log(res15); // 1 const res16 = await client.rPush('bikes:repairs', 'bike:2'); console.log(res16); // 2 const res17 = await client.lPush('bikes:repairs', 'bike:important_bike'); console.log(res17); // 3 const res18 = await client.lRange('bikes:repairs', 0, -1); console.log(res18); // ['bike:important_bike', 'bike:1', 'bike:2'] await client.del('bikes:repairs'); const res19 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res19); // 3 const res20 = await client.lPush( 'bikes:repairs', ['bike:important_bike', 'bike:very_important_bike'] ); console.log(res20); // 5 const res21 = await client.lRange('bikes:repairs', 0, -1); console.log(res21); // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3'] await client.del('bikes:repairs'); const res22 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res22); // 3 const res23 = await client.rPop('bikes:repairs'); console.log(res23); // 'bike:3' const res24 = await client.lPop('bikes:repairs'); console.log(res24); // 'bike:1' const res25 = await client.rPop('bikes:repairs'); console.log(res25); // 'bike:2' const res26 = await client.rPop('bikes:repairs'); console.log(res26); // null const res27 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27); // 5 const res28 = await client.lTrim('bikes:repairs', 0, 2); console.log(res28); // OK const res29 = await client.lRange('bikes:repairs', 0, -1); console.log(res29); // ['bike:5', 'bike:4', 'bike:3'] await client.del('bikes:repairs'); const res27eol = await client.rPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27eol); // 5 const res28eol = await client.lTrim('bikes:repairs', -3, -1); console.log(res28eol); // 'OK' const res29eol = await client.lRange('bikes:repairs', 0, -1); console.log(res29eol); // ['bike:3', 'bike:4', 'bike:5'] await client.del('bikes:repairs'); const res31 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2']); console.log(res31); // 2 const res32 = await client.brPop('bikes:repairs', 1); console.log(res32); // { key: 'bikes:repairs', element: 'bike:2' } const res33 = await client.brPop('bikes:repairs', 1); console.log(res33); // { key: 'bikes:repairs', element: 'bike:1' } const res34 = await client.brPop('bikes:repairs', 1); console.log(res34); // null const res35 = await client.del('new_bikes'); console.log(res35); // 0 const res36 = await client.lPush('new_bikes', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 await client.del('new_bikes'); const res37 = await client.set('new_bikes', 'bike:1'); console.log(res37); // 'OK' const res38 = await client.type('new_bikes'); console.log(res38); // 'string' try { const res39 = await client.lPush('new_bikes', 'bike:2', 'bike:3'); // redis.exceptions.ResponseError: // [SimpleError: WRONGTYPE Operation against a key holding the wrong kind of value] } catch(e){ console.log(e); } await client.del('bikes:repairs'); await client.lPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 const res40 = await client.exists('bikes:repairs') console.log(res40); // 1 const res41 = await client.lPop('bikes:repairs'); console.log(res41); // 'bike:3' const res42 = await client.lPop('bikes:repairs'); console.log(res42); // 'bike:2' const res43 = await client.lPop('bikes:repairs'); console.log(res43); // 'bike:1' const res44 = await client.exists('bikes:repairs'); console.log(res44); // 0 await client.del('bikes:repairs'); const res45 = await client.del('bikes:repairs'); console.log(res45); // 0 const res46 = await client.lLen('bikes:repairs'); console.log(res46); // 0 const res47 = await client.lPop('bikes:repairs'); console.log(res47); // null await client.del('bikes:repairs'); const res48 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res48); // 5 const res49 = await client.lTrim('bikes:repairs', 0, 2); console.log(res49); // 'OK' const res50 = await client.lRange('bikes:repairs', 0, -1); console.log(res50); // ['bike:5', 'bike:4', 'bike:3'] await client.close();import redis.clients.jedis.UnifiedJedis; import redis.clients.jedis.args.ListDirection; import java.util.List; public class ListExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res2); // >>> 2 String res3 = jedis.rpop("bikes:repairs"); System.out.println(res3); // >>> bike:1 String res4 = jedis.rpop("bikes:repairs"); System.out.println(res4); // >>> bike:2 long res5 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res5); // >>> 1 long res6 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res6); // >>> 2 String res7 = jedis.lpop("bikes:repairs"); System.out.println(res7); // >>> bike:2 String res8 = jedis.lpop("bikes:repairs"); System.out.println(res8); // >>> bike:1 long res9 = jedis.llen("bikes:repairs"); System.out.println(res9); // >>> 0 long res10 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res10); // >>> 1 long res11 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res11); // >>> 2 String res12 = jedis.lmove("bikes:repairs", "bikes:finished", ListDirection.LEFT, ListDirection.LEFT); System.out.println(res12); // >>> bike:2 List<String> res13 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res13); // >>> [bike:1] List<String> res14 = jedis.lrange("bikes:finished", 0, -1); System.out.println(res14); // >>> [bike:2] jedis.del("bikes:repairs"); long res15 = jedis.rpush("bikes:repairs", "bike:1"); System.out.println(res15); // >>> 1 long res16 = jedis.rpush("bikes:repairs", "bike:2"); System.out.println(res16); // >>> 2 long res17 = jedis.lpush("bikes:repairs", "bike:important_bike"); System.out.println(res17); // >>> 3 List<String> res18 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res18); // >>> [bike:important_bike, bike:1, bike:2] jedis.del("bikes:repairs"); long res19 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res19); // >>> 3 long res20 = jedis.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); System.out.println(res20); // >>> 5 List<String> res21 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res21); // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); long res22 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res22); // >>> 3 String res23 = jedis.rpop("bikes:repairs"); System.out.println(res23); // >>> bike:3 String res24 = jedis.lpop("bikes:repairs"); System.out.println(res24); // >>> bike:1 String res25 = jedis.rpop("bikes:repairs"); System.out.println(res25); // >>> bike:2 String res26 = jedis.rpop("bikes:repairs"); System.out.println(res26); // >>> null long res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 String res28 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res28); // >>> OK List<String> res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 res28 = jedis.ltrim("bikes:repairs", -3, -1); System.out.println(res2); // >>> OK res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:3, bike:4, bike:5] jedis.del("bikes:repairs"); long res31 = jedis.rpush("bikes:repairs", "bike:1", "bike:2"); System.out.println(res31); // >>> 2 List<String> res32 = jedis.brpop(1, "bikes:repairs"); System.out.println(res32); // >>> (bikes:repairs, bike:2) List<String> res33 = jedis.brpop(1,"bikes:repairs"); System.out.println(res33); // >>> (bikes:repairs, bike:1) List<String> res34 = jedis.brpop(1,"bikes:repairs"); System.out.println(res34); // >>> null jedis.del("new_bikes"); long res36 = jedis.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 jedis.del("new_bikes"); String res37 = jedis.set("new_bikes", "bike:1"); System.out.println(res37); // >>> OK String res38 = jedis.type("new_bikes"); System.out.println(res38); // >>> string try { long res39 = jedis.lpush("new_bikes", "bike:2", "bike:3"); } catch (Exception e) { e.printStackTrace(); // >>> redis.clients.jedis.exceptions.JedisDataException: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } jedis.del("bikes:repairs"); jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 boolean res40 = jedis.exists("bikes:repairs"); System.out.println(res40); // >>> true String res41 = jedis.lpop("bikes:repairs"); System.out.println(res41); // >>> bike:3 String res42 = jedis.lpop("bikes:repairs"); System.out.println(res42); // >>> bike:2 String res43 = jedis.lpop("bikes:repairs"); System.out.println(res43); // >>> bike:1 boolean res44 = jedis.exists("bikes:repairs"); System.out.println(res44); // >>> false jedis.del("bikes:repairs"); long res46 = jedis.llen("bikes:repairs"); System.out.println(res46); // >>> 0 String res47 = jedis.lpop("bikes:repairs"); System.out.println(res47); // >>> null jedis.del("bikes:repairs"); long res48 = jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res48); // >>> 5 String res49 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res49); // >>> OK List<String> res50 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res50); // >>> [bike:5, bike:4, bike:3] jedis.close(); } }package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.concurrent.CompletableFuture; public class ListExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> queue = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 2 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res3 -> { System.out.println(res3); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:2 .toCompletableFuture(); queue.join(); CompletableFuture<Void> stack = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res4 -> { System.out.println(res4); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res6 -> { System.out.println(res6); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:1 .toCompletableFuture(); stack.join(); CompletableFuture<Void> llen = asyncCommands.llen("bikes:repairs") .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); llen.join(); CompletableFuture<Void> lmovelrange = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res7 -> { System.out.println(res7); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res8 -> { System.out.println(res8); // >>> 2 return asyncCommands.lmove("bikes:repairs", "bikes:finished", LMoveArgs.Builder.leftLeft()); }).thenCompose(res9 -> { System.out.println(res9); // >>> bike:2 return asyncCommands.lrange("bikes:repairs", 0, -1); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:1] return asyncCommands.lrange("bikes:finished", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:2] .toCompletableFuture(); lmovelrange.join(); CompletableFuture<Void> lpushrpush = asyncCommands.rpush("bikes:repairs", "bike:1").thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.rpush("bikes:repairs", "bike:2"); }).thenCompose(res12 -> { System.out.println(res12); // >>> 2 return asyncCommands.lpush("bikes:repairs", "bike:important_bike"); }).thenCompose(res13 -> { System.out.println(res13); // >>> 3 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:important_bike, bike:1, bike:2] .toCompletableFuture(); lpushrpush.join(); CompletableFuture<Void> variadic = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res14 -> { System.out.println(res14); // >>> 3 return asyncCommands.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); }).thenCompose(res15 -> { System.out.println(res15); // >>> 5 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] .toCompletableFuture(); variadic.join(); CompletableFuture<Void> lpoprpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res16 -> { System.out.println(res16); // >>> 3 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res17 -> { System.out.println(res17); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res18 -> { System.out.println(res18); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res19 -> { System.out.println(res19); // >>> bike:2 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); lpoprpop.join(); CompletableFuture<Void> ltrim = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res20 -> { System.out.println(res20); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res21 -> { System.out.println(res21); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim.join(); CompletableFuture<Void> ltrimendoflist = asyncCommands .rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res22 -> { System.out.println(res22); // >>> 5 return asyncCommands.ltrim("bikes:repairs", -3, -1); }).thenCompose(res23 -> { System.out.println(res23); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:3, bike:4, bike:5] .toCompletableFuture(); ltrimendoflist.join(); CompletableFuture<Void> brpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2").thenCompose(res24 -> { System.out.println(res24); // >>> 2 return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res25 -> { System.out.println(res25); // >>> KeyValue[bikes:repairs, bike:2] return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res26 -> { System.out.println(res26); // >>> KeyValue[bikes:repairs, bike:1] return asyncCommands.brpop(1, "bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); brpop.join(); CompletableFuture<Void> rule1 = asyncCommands.del("new_bikes").thenCompose(res27 -> { System.out.println(res27); // >>> 0 return asyncCommands.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); rule1.join(); CompletableFuture<Void> rule11 = asyncCommands.set("new_bikes_string", "bike:1").thenCompose(res28 -> { System.out.println(res28); // >>> OK return asyncCommands.type("new_bikes_string"); }).thenCompose(res29 -> { System.out.println(res29); // >>> string return asyncCommands.lpush("new_bikes_string", "bike:2", "bike:3"); }).handle((res, ex) -> { if (ex == null) { return res; } else { System.out.println(ex); // >>> java.util.concurrent.CompletionException: // >>> io.lettuce.core.RedisCommandExecutionException: // >>> WRONGTYPE Operation against a key holding the wrong // >>> kind of value return -1L; } }) .thenAccept(System.out::println) // >>> -1 .toCompletableFuture(); rule11.join(); CompletableFuture<Void> rule2 = asyncCommands.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res30 -> { System.out.println(res30); // >>> 3 return asyncCommands.exists("bikes:repairs"); }).thenCompose(res31 -> { System.out.println(res31); // >>> 1 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res32 -> { System.out.println(res32); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res33 -> { System.out.println(res33); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res34 -> { System.out.println(res34); // >>> bike:1 return asyncCommands.exists("bikes:repairs"); }) .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); rule2.join(); CompletableFuture<Void> rule3 = asyncCommands.del("bikes:repairs").thenCompose(res35 -> { System.out.println(res35); // >>> 0 return asyncCommands.llen("bikes:repairs"); }).thenCompose(res36 -> { System.out.println(res36); // >>> 0 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); rule3.join(); CompletableFuture<Void> ltrim1 = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res37 -> { System.out.println(res37); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res38 -> { System.out.println(res38); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim1.join(); } finally { redisClient.shutdown(); } } }package example_commands_test import ( "context" "fmt" "github.com/redis/go-redis/v9" ) func ExampleClient_queue() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 2 res3, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> bike:1 res4, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> bike:2 } func ExampleClient_stack() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res5, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> 1 res6, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> 2 res7, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> bike:2 res8, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> bike:1 } func ExampleClient_llen() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 0 } func ExampleClient_lmove_lrange() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res10, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res10) // >>> 1 res11, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> 2 res12, err := rdb.LMove(ctx, "bikes:repairs", "bikes:finished", "LEFT", "LEFT").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> bike:2 res13, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res13) // >>> [bike:1] res14, err := rdb.LRange(ctx, "bikes:finished", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:2] } func ExampleClient_lpush_rpush() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res15, err := rdb.RPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res15) // >>> 1 res16, err := rdb.RPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> 2 res17, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> 3 res18, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res18) // >>> [bike:important_bike bike:1 bike:2] } func ExampleClient_variadic() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res19, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 3 res20, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike", "bike:very_important_bike").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> 5 res21, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res21) // >>> [bike:very_important_bike bike:important_bike bike:1 bike:2 bike:3] } func ExampleClient_lpop_rpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res22, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> 3 res23, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res23) // >>> bike:3 res24, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res24) // >>> bike:1 res25, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res25) // >>> bike:2 res26, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res26) // >>> <empty string> } func ExampleClient_ltrim() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res27, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res27) // >>> 5 res28, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res28) // >>> OK res29, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res29) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_ltrim_end_of_list() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res30, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res30) // >>> 5 res31, err := rdb.LTrim(ctx, "bikes:repairs", -3, -1).Result() if err != nil { panic(err) } fmt.Println(res31) // >>> OK res32, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res32) // >>> [bike:3 bike:4 bike:5] } func ExampleClient_brpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res33, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res33) // >>> 2 res34, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res34) // >>> [bikes:repairs bike:2] res35, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res35) // >>> [bikes:repairs bike:1] res36, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res36) // >>> [] } func ExampleClient_rule1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res37, err := rdb.Del(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res37) // >>> 0 res38, err := rdb.LPush(ctx, "new_bikes", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res38) // >>> 3 } func ExampleClient_rule11() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "new_bikes") res39, err := rdb.Set(ctx, "new_bikes", "bike:1", 0).Result() if err != nil { panic(err) } fmt.Println(res39) // >>> OK res40, err := rdb.Type(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res40) // >>> string res41, err := rdb.LPush(ctx, "new_bikes", "bike:2", "bike:3").Result() if err != nil { fmt.Println(err) // >>> WRONGTYPE Operation against a key holding the wrong kind of value } fmt.Println(res41) } func ExampleClient_rule2() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res42, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res42) // >>> 3 res43, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res43) // >>> 1 res44, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res44) // >>> bike:3 res45, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res45) // >>> bike:2 res46, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res46) // >>> bike:1 res47, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res47) // >>> 0 } func ExampleClient_rule3() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res48, err := rdb.Del(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res48) // >>> 0 res49, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res49) // >>> 0 res50, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res50) // >>> <empty string> } func ExampleClient_ltrim1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res51, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res51) // >>> 5 res52, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res52) // >>> OK res53, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res53) // >>> [bike:5 bike:4 bike:3] }using NRedisStack; using StackExchange.Redis; public class ListExample { public void Run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res1); // >>> 1 long res2 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res2); // >>> 2 RedisValue res3 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res3); // >>> "bike:1" RedisValue res4 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res4); // >>> "bike:2" long res5 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res5); // >>> 1 long res6 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res6); // >>> 2 RedisValue res7 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res7); // >>> "bike:2" RedisValue res8 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res8); // >>> "bike:1" long res9 = db.ListLength("bikes:repairs"); Console.WriteLine(res9); // >>> 0 long res10 = db.ListLeftPush("{bikes}:repairs", "bike:1"); Console.WriteLine(res10); // >>> 1 long res11 = db.ListLeftPush("{bikes}:repairs", "bike:2"); Console.WriteLine(res11); // >>> 2 RedisValue res12 = db.ListMove("{bikes}:repairs", "{bikes}:finished", ListSide.Left, ListSide.Left); Console.Write(res12); // >>> "bike:2" RedisValue[] res13 = db.ListRange("{bikes}:repairs", 0, -1); Console.WriteLine(string.Join(", ", res13)); // >>> "bike:1" RedisValue[] res14 = db.ListRange("{bikes}:finished", 0, -1); Console.WriteLine(string.Join(", ", res14)); // >>> "bike:2" db.KeyDelete("bikes:repairs"); long res15 = db.ListRightPush("bikes:repairs", "bike:1"); Console.WriteLine(res15); // >>> 1 long res16 = db.ListRightPush("bikes:repairs", "bike:2"); Console.WriteLine(res16); // >>> 2 long res17 = db.ListLeftPush("bikes:repairs", "bike:important_bike"); Console.WriteLine(res17); // >>> 3 RedisValue[] res18 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res18)); // >>> "bike:important_bike, bike:1, bike:2" db.KeyDelete("bikes:repairs"); long res19 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res19); // >>> 3 long res20 = db.ListLeftPush("bikes:repairs", ["bike:important_bike", "bike:very_important_bike"]); Console.WriteLine(res20); // >>> 5 RedisValue[] res21 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res21)); // >>> "bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3" db.KeyDelete("bikes:repairs"); long res22 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res22); // >>> 3 RedisValue res23 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res23); // >>> "bike:3" RedisValue res24 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res24); // >>> "bike:1" RedisValue res25 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res25); // >>> "bike:2" RedisValue res26 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res26); // >>> <Empty string> long res27 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res27); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res28 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res28)); // "bike:5, bike:4, bike:3" db.KeyDelete("bikes:repairs"); long res29 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res29); // >>> 5 db.ListTrim("bikes:repairs", -3, -1); RedisValue[] res30 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res30)); // >>> "bike:3, bike:4, bike:5" db.KeyDelete("bikes:repairs"); long res31 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2"]); Console.WriteLine(res31); // >>> 2 Tuple<RedisKey, RedisValue>? res32 = db.BRPop(["bikes:repairs"], 1); if (res32 != null) Console.WriteLine($"{res32.Item1} -> {res32.Item2}"); // >>> "bikes:repairs -> bike:2" Tuple<RedisKey, RedisValue>? res33 = db.BRPop(["bikes:repairs"], 1); if (res33 != null) Console.WriteLine($"{res33.Item1} -> {res33.Item2}"); // >>> "bikes:repairs -> bike:1" Tuple<RedisKey, RedisValue>? res34 = db.BRPop(["bikes:repairs"], 1); Console.WriteLine(res34); // >>> "Null" db.KeyDelete("new_bikes"); long res36 = db.ListRightPush("new_bikes", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res36); // >>> 3 db.KeyDelete("new_bikes"); bool res37 = db.StringSet("new_bikes", "bike:1"); Console.WriteLine(res37); // >>> True RedisType res38 = db.KeyType("new_bikes"); Console.WriteLine(res38); // >>> RedisType.String try { long res39 = db.ListRightPush("new_bikes", ["bike:2", "bike:3"]); } catch (Exception e) { Console.WriteLine(e); } db.KeyDelete("bikes:repairs"); long res40 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res40); // >>> 3 bool res41 = db.KeyExists("bikes:repairs"); Console.WriteLine(res41); // >>> True RedisValue res42 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res42); // >>> "bike:3" RedisValue res43 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res43); // >>> "bike:2" RedisValue res44 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res44); // >>> "bike:1" bool res45 = db.KeyExists("bikes:repairs"); Console.WriteLine(res45); // >>> False db.KeyDelete("bikes:repairs"); long res47 = db.ListLength("bikes:repairs"); Console.WriteLine(res47); // >>> 0 RedisValue res48 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res48); // >>> Null db.KeyDelete("bikes:repairs"); long res49 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res49); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res50 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res50)); // >>> "bike:5, bike:4, bike:3" } }<?php require 'vendor/autoload.php'; use Predis\Client as PredisClient; class DtListTest { public function testDtList() { $r = new PredisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'database' => 0, ]); $res1 = $r->lpush('bikes:repairs', 'bike:1'); echo $res1 . PHP_EOL; // >>> 1 $res2 = $r->lpush('bikes:repairs', 'bike:2'); echo $res2 . PHP_EOL; // >>> 2 $res3 = $r->rpop('bikes:repairs'); echo $res3 . PHP_EOL; // >>> bike:1 $res4 = $r->rpop('bikes:repairs'); echo $res4 . PHP_EOL; // >>> bike:2 $res5 = $r->lpush('bikes:repairs', 'bike:1'); echo $res5 . PHP_EOL; // >>> 1 $res6 = $r->lpush('bikes:repairs', 'bike:2'); echo $res6 . PHP_EOL; // >>> 2 $res7 = $r->lpop('bikes:repairs'); echo $res7 . PHP_EOL; // >>> bike:2 $res8 = $r->lpop('bikes:repairs'); echo $res8 . PHP_EOL; // >>> bike:1 $res9 = $r->llen('bikes:repairs'); echo $res9 . PHP_EOL; // >>> 0 $res10 = $r->lpush('bikes:repairs', 'bike:1'); echo $res10 . PHP_EOL; // >>> 1 $res11 = $r->lpush('bikes:repairs', 'bike:2'); echo $res11 . PHP_EOL; // >>> 2 $res12 = $r->lmove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); echo $res12 . PHP_EOL; // >>> 'bike:2' $res13 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res13) . PHP_EOL; // >>> ['bike:1'] $res14 = $r->lrange('bikes:finished', 0, -1); echo json_encode($res14) . PHP_EOL; // >>> ['bike:2'] $r->del('bikes:repairs'); $res15 = $r->rpush('bikes:repairs', 'bike:1'); echo $res15 . PHP_EOL; // >>> 1 $res16 = $r->rpush('bikes:repairs', 'bike:2'); echo $res16 . PHP_EOL; // >>> 2 $res17 = $r->lpush('bikes:repairs', 'bike:important_bike'); echo $res17 . PHP_EOL; // >>> 3 $res18 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res18) . PHP_EOL; // >>> ['bike:important_bike', 'bike:1', 'bike:2'] $r->del('bikes:repairs'); $res19 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res19 . PHP_EOL; // >>> 3 $res20 = $r->lpush('bikes:repairs', 'bike:important_bike', 'bike:very_important_bike'); echo $res20 . PHP_EOL; // >>> 5 $res21 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res21) . PHP_EOL; // >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... $r->del('bikes:repairs'); $res22 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res22 . PHP_EOL; // >>> 3 $res23 = $r->rpop('bikes:repairs'); echo $res23 . PHP_EOL; // >>> 'bike:3' $res24 = $r->lpop('bikes:repairs'); echo $res24 . PHP_EOL; // >>> 'bike:1' $res25 = $r->rpop('bikes:repairs'); echo $res25 . PHP_EOL; // >>> 'bike:2' $res26 = $r->rpop('bikes:repairs'); echo $res26 . PHP_EOL; // >>> None $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', 0, 2); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:1', 'bike:2', 'bike:3'] $r->del('bikes:repairs'); $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', -3, -1); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:3', 'bike:4', 'bike:5'] $r->del('bikes:repairs'); $res31 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2'); echo $res31 . PHP_EOL; // >>> 2 $res32 = $r->brpop('bikes:repairs', 1); echo json_encode($res32) . PHP_EOL; // >>> ['bikes:repairs', 'bike:2'] $res33 = $r->brpop('bikes:repairs', 1); echo json_encode($res33) . PHP_EOL; // >>> ['bikes:repairs', 'bike:1'] $res34 = $r->brpop('bikes:repairs', 1); echo json_encode($res34) . PHP_EOL; // >>> None $res35 = $r->del('new_bikes'); echo $res35 . PHP_EOL; // >>> 0 $res36 = $r->lpush('new_bikes', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $r->del('new_bikes'); $res37 = $r->set('new_bikes', 'bike:1'); echo $res37 . PHP_EOL; // >>> True $res38 = $r->type('new_bikes'); echo $res38 . PHP_EOL; // >>> 'string' try { $res39 = $r->lpush('new_bikes', 'bike:2', 'bike:3'); // >>> redis.exceptions.ResponseError: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } catch (\Predis\Response\ServerException $e) { echo $e->getMessage() . PHP_EOL; } $r->del('bikes:repairs'); $res36 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $res40 = $r->exists('bikes:repairs'); echo $res40 . PHP_EOL; // >>> 1 $res41 = $r->lpop('bikes:repairs'); echo $res41 . PHP_EOL; // >>> 'bike:3' $res42 = $r->lpop('bikes:repairs'); echo $res42 . PHP_EOL; // >>> 'bike:2' $res43 = $r->lpop('bikes:repairs'); echo $res43 . PHP_EOL; // >>> 'bike:1' $res44 = $r->exists('bikes:repairs'); echo $res44 . PHP_EOL; // >>> False $res45 = $r->del('bikes:repairs'); echo $res45 . PHP_EOL; // >>> 0 $res46 = $r->llen('bikes:repairs'); echo $res46 . PHP_EOL; // >>> 0 $res47 = $r->lpop('bikes:repairs'); echo $res47 . PHP_EOL; // >>> None $res48 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res48 . PHP_EOL; // >>> 5 $res49 = $r->ltrim('bikes:repairs', 0, 2); echo $res49 . PHP_EOL; // >>> True $res50 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res50) . PHP_EOL; // >>> ['bike:5', 'bike:4', 'bike:3'] } } -
Foundational: Get the number of elements in a list using LLEN to check list size
> LLEN bikes:repairs (integer) 0""" Code samples for List doc pages: https://redis.io/docs/latest/develop/data-types/lists/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.lpush("bikes:repairs", "bike:1") print(res1) # >>> 1 res2 = r.lpush("bikes:repairs", "bike:2") print(res2) # >>> 2 res3 = r.rpop("bikes:repairs") print(res3) # >>> bike:1 res4 = r.rpop("bikes:repairs") print(res4) # >>> bike:2 res5 = r.lpush("bikes:repairs", "bike:1") print(res5) # >>> 1 res6 = r.lpush("bikes:repairs", "bike:2") print(res6) # >>> 2 res7 = r.lpop("bikes:repairs") print(res7) # >>> bike:2 res8 = r.lpop("bikes:repairs") print(res8) # >>> bike:1 res9 = r.llen("bikes:repairs") print(res9) # >>> 0 res10 = r.lpush("bikes:repairs", "bike:1") print(res10) # >>> 1 res11 = r.lpush("bikes:repairs", "bike:2") print(res11) # >>> 2 res12 = r.lmove("bikes:repairs", "bikes:finished", "LEFT", "LEFT") print(res12) # >>> 'bike:2' res13 = r.lrange("bikes:repairs", 0, -1) print(res13) # >>> ['bike:1'] res14 = r.lrange("bikes:finished", 0, -1) print(res14) # >>> ['bike:2'] r.delete("bikes:repairs") res15 = r.rpush("bikes:repairs", "bike:1") print(res15) # >>> 1 res16 = r.rpush("bikes:repairs", "bike:2") print(res16) # >>> 2 res17 = r.lpush("bikes:repairs", "bike:important_bike") print(res17) # >>> 3 res18 = r.lrange("bikes:repairs", 0, -1) print(res18) # >>> ['bike:important_bike', 'bike:1', 'bike:2'] r.delete("bikes:repairs") res19 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res19) # >>> 3 res20 = r.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike") print(res20) # >>> 5 res21 = r.lrange("bikes:repairs", 0, -1) print( res21 ) # >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... r.delete("bikes:repairs") res22 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res22) # >>> 3 res23 = r.rpop("bikes:repairs") print(res23) # >>> 'bike:3' res24 = r.lpop("bikes:repairs") print(res24) # >>> 'bike:1' res25 = r.rpop("bikes:repairs") print(res25) # >>> 'bike:2' res26 = r.rpop("bikes:repairs") print(res26) # >>> None res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", 0, 2) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:1', 'bike:2', 'bike:3'] r.delete("bikes:repairs") res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", -3, -1) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:3', 'bike:4', 'bike:5'] r.delete("bikes:repairs") res31 = r.rpush("bikes:repairs", "bike:1", "bike:2") print(res31) # >>> 2 res32 = r.brpop("bikes:repairs", timeout=1) print(res32) # >>> ('bikes:repairs', 'bike:2') res33 = r.brpop("bikes:repairs", timeout=1) print(res33) # >>> ('bikes:repairs', 'bike:1') res34 = r.brpop("bikes:repairs", timeout=1) print(res34) # >>> None res35 = r.delete("new_bikes") print(res35) # >>> 0 res36 = r.lpush("new_bikes", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 r.delete("new_bikes") res37 = r.set("new_bikes", "bike:1") print(res37) # >>> True res38 = r.type("new_bikes") print(res38) # >>> 'string' try: res39 = r.lpush("new_bikes", "bike:2", "bike:3") # >>> redis.exceptions.ResponseError: # >>> WRONGTYPE Operation against a key holding the wrong kind of value except redis.exceptions.ResponseError as e: print(e) r.delete("bikes:repairs") r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 res40 = r.exists("bikes:repairs") print(res40) # >>> 1 res41 = r.lpop("bikes:repairs") print(res41) # >>> 'bike:3' res42 = r.lpop("bikes:repairs") print(res42) # >>> 'bike:2' res43 = r.lpop("bikes:repairs") print(res43) # >>> 'bike:1' res44 = r.exists("bikes:repairs") print(res44) # >>> False r.delete("bikes:repairs") res45 = r.delete("bikes:repairs") print(res45) # >>> 0 res46 = r.llen("bikes:repairs") print(res46) # >>> 0 res47 = r.lpop("bikes:repairs") print(res47) # >>> None r.delete("bikes:repairs") res48 = r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res48) # >>> 5 res49 = r.ltrim("bikes:repairs", 0, 2) print(res49) # >>> True res50 = r.lrange("bikes:repairs", 0, -1) print(res50) # >>> ['bike:5', 'bike:4', 'bike:3']import { createClient } from 'redis'; const client = createClient(); await client.connect(); const res1 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res1); // 1 const res2 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res2); // 2 const res3 = await client.rPop('bikes:repairs'); console.log(res3); // bike:1 const res4 = await client.rPop('bikes:repairs'); console.log(res4); // bike:2 const res5 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res5); // 1 const res6 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res6); // 2 const res7 = await client.lPop('bikes:repairs'); console.log(res7); // bike:2 const res8 = await client.lPop('bikes:repairs'); console.log(res8); // bike:1 const res9 = await client.lLen('bikes:repairs'); console.log(res9); // 0 const res10 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res10); // 1 const res11 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res11); // 2 const res12 = await client.lMove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); console.log(res12); // 'bike:2' const res13 = await client.lRange('bikes:repairs', 0, -1); console.log(res13); // ['bike:1'] const res14 = await client.lRange('bikes:finished', 0, -1); console.log(res14); // ['bike:2'] await client.del('bikes:repairs'); const res15 = await client.rPush('bikes:repairs', 'bike:1'); console.log(res15); // 1 const res16 = await client.rPush('bikes:repairs', 'bike:2'); console.log(res16); // 2 const res17 = await client.lPush('bikes:repairs', 'bike:important_bike'); console.log(res17); // 3 const res18 = await client.lRange('bikes:repairs', 0, -1); console.log(res18); // ['bike:important_bike', 'bike:1', 'bike:2'] await client.del('bikes:repairs'); const res19 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res19); // 3 const res20 = await client.lPush( 'bikes:repairs', ['bike:important_bike', 'bike:very_important_bike'] ); console.log(res20); // 5 const res21 = await client.lRange('bikes:repairs', 0, -1); console.log(res21); // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3'] await client.del('bikes:repairs'); const res22 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res22); // 3 const res23 = await client.rPop('bikes:repairs'); console.log(res23); // 'bike:3' const res24 = await client.lPop('bikes:repairs'); console.log(res24); // 'bike:1' const res25 = await client.rPop('bikes:repairs'); console.log(res25); // 'bike:2' const res26 = await client.rPop('bikes:repairs'); console.log(res26); // null const res27 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27); // 5 const res28 = await client.lTrim('bikes:repairs', 0, 2); console.log(res28); // OK const res29 = await client.lRange('bikes:repairs', 0, -1); console.log(res29); // ['bike:5', 'bike:4', 'bike:3'] await client.del('bikes:repairs'); const res27eol = await client.rPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27eol); // 5 const res28eol = await client.lTrim('bikes:repairs', -3, -1); console.log(res28eol); // 'OK' const res29eol = await client.lRange('bikes:repairs', 0, -1); console.log(res29eol); // ['bike:3', 'bike:4', 'bike:5'] await client.del('bikes:repairs'); const res31 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2']); console.log(res31); // 2 const res32 = await client.brPop('bikes:repairs', 1); console.log(res32); // { key: 'bikes:repairs', element: 'bike:2' } const res33 = await client.brPop('bikes:repairs', 1); console.log(res33); // { key: 'bikes:repairs', element: 'bike:1' } const res34 = await client.brPop('bikes:repairs', 1); console.log(res34); // null const res35 = await client.del('new_bikes'); console.log(res35); // 0 const res36 = await client.lPush('new_bikes', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 await client.del('new_bikes'); const res37 = await client.set('new_bikes', 'bike:1'); console.log(res37); // 'OK' const res38 = await client.type('new_bikes'); console.log(res38); // 'string' try { const res39 = await client.lPush('new_bikes', 'bike:2', 'bike:3'); // redis.exceptions.ResponseError: // [SimpleError: WRONGTYPE Operation against a key holding the wrong kind of value] } catch(e){ console.log(e); } await client.del('bikes:repairs'); await client.lPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 const res40 = await client.exists('bikes:repairs') console.log(res40); // 1 const res41 = await client.lPop('bikes:repairs'); console.log(res41); // 'bike:3' const res42 = await client.lPop('bikes:repairs'); console.log(res42); // 'bike:2' const res43 = await client.lPop('bikes:repairs'); console.log(res43); // 'bike:1' const res44 = await client.exists('bikes:repairs'); console.log(res44); // 0 await client.del('bikes:repairs'); const res45 = await client.del('bikes:repairs'); console.log(res45); // 0 const res46 = await client.lLen('bikes:repairs'); console.log(res46); // 0 const res47 = await client.lPop('bikes:repairs'); console.log(res47); // null await client.del('bikes:repairs'); const res48 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res48); // 5 const res49 = await client.lTrim('bikes:repairs', 0, 2); console.log(res49); // 'OK' const res50 = await client.lRange('bikes:repairs', 0, -1); console.log(res50); // ['bike:5', 'bike:4', 'bike:3'] await client.close();import redis.clients.jedis.UnifiedJedis; import redis.clients.jedis.args.ListDirection; import java.util.List; public class ListExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res2); // >>> 2 String res3 = jedis.rpop("bikes:repairs"); System.out.println(res3); // >>> bike:1 String res4 = jedis.rpop("bikes:repairs"); System.out.println(res4); // >>> bike:2 long res5 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res5); // >>> 1 long res6 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res6); // >>> 2 String res7 = jedis.lpop("bikes:repairs"); System.out.println(res7); // >>> bike:2 String res8 = jedis.lpop("bikes:repairs"); System.out.println(res8); // >>> bike:1 long res9 = jedis.llen("bikes:repairs"); System.out.println(res9); // >>> 0 long res10 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res10); // >>> 1 long res11 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res11); // >>> 2 String res12 = jedis.lmove("bikes:repairs", "bikes:finished", ListDirection.LEFT, ListDirection.LEFT); System.out.println(res12); // >>> bike:2 List<String> res13 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res13); // >>> [bike:1] List<String> res14 = jedis.lrange("bikes:finished", 0, -1); System.out.println(res14); // >>> [bike:2] jedis.del("bikes:repairs"); long res15 = jedis.rpush("bikes:repairs", "bike:1"); System.out.println(res15); // >>> 1 long res16 = jedis.rpush("bikes:repairs", "bike:2"); System.out.println(res16); // >>> 2 long res17 = jedis.lpush("bikes:repairs", "bike:important_bike"); System.out.println(res17); // >>> 3 List<String> res18 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res18); // >>> [bike:important_bike, bike:1, bike:2] jedis.del("bikes:repairs"); long res19 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res19); // >>> 3 long res20 = jedis.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); System.out.println(res20); // >>> 5 List<String> res21 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res21); // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); long res22 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res22); // >>> 3 String res23 = jedis.rpop("bikes:repairs"); System.out.println(res23); // >>> bike:3 String res24 = jedis.lpop("bikes:repairs"); System.out.println(res24); // >>> bike:1 String res25 = jedis.rpop("bikes:repairs"); System.out.println(res25); // >>> bike:2 String res26 = jedis.rpop("bikes:repairs"); System.out.println(res26); // >>> null long res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 String res28 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res28); // >>> OK List<String> res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 res28 = jedis.ltrim("bikes:repairs", -3, -1); System.out.println(res2); // >>> OK res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:3, bike:4, bike:5] jedis.del("bikes:repairs"); long res31 = jedis.rpush("bikes:repairs", "bike:1", "bike:2"); System.out.println(res31); // >>> 2 List<String> res32 = jedis.brpop(1, "bikes:repairs"); System.out.println(res32); // >>> (bikes:repairs, bike:2) List<String> res33 = jedis.brpop(1,"bikes:repairs"); System.out.println(res33); // >>> (bikes:repairs, bike:1) List<String> res34 = jedis.brpop(1,"bikes:repairs"); System.out.println(res34); // >>> null jedis.del("new_bikes"); long res36 = jedis.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 jedis.del("new_bikes"); String res37 = jedis.set("new_bikes", "bike:1"); System.out.println(res37); // >>> OK String res38 = jedis.type("new_bikes"); System.out.println(res38); // >>> string try { long res39 = jedis.lpush("new_bikes", "bike:2", "bike:3"); } catch (Exception e) { e.printStackTrace(); // >>> redis.clients.jedis.exceptions.JedisDataException: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } jedis.del("bikes:repairs"); jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 boolean res40 = jedis.exists("bikes:repairs"); System.out.println(res40); // >>> true String res41 = jedis.lpop("bikes:repairs"); System.out.println(res41); // >>> bike:3 String res42 = jedis.lpop("bikes:repairs"); System.out.println(res42); // >>> bike:2 String res43 = jedis.lpop("bikes:repairs"); System.out.println(res43); // >>> bike:1 boolean res44 = jedis.exists("bikes:repairs"); System.out.println(res44); // >>> false jedis.del("bikes:repairs"); long res46 = jedis.llen("bikes:repairs"); System.out.println(res46); // >>> 0 String res47 = jedis.lpop("bikes:repairs"); System.out.println(res47); // >>> null jedis.del("bikes:repairs"); long res48 = jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res48); // >>> 5 String res49 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res49); // >>> OK List<String> res50 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res50); // >>> [bike:5, bike:4, bike:3] jedis.close(); } }package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.concurrent.CompletableFuture; public class ListExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> queue = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 2 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res3 -> { System.out.println(res3); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:2 .toCompletableFuture(); queue.join(); CompletableFuture<Void> stack = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res4 -> { System.out.println(res4); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res6 -> { System.out.println(res6); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:1 .toCompletableFuture(); stack.join(); CompletableFuture<Void> llen = asyncCommands.llen("bikes:repairs") .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); llen.join(); CompletableFuture<Void> lmovelrange = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res7 -> { System.out.println(res7); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res8 -> { System.out.println(res8); // >>> 2 return asyncCommands.lmove("bikes:repairs", "bikes:finished", LMoveArgs.Builder.leftLeft()); }).thenCompose(res9 -> { System.out.println(res9); // >>> bike:2 return asyncCommands.lrange("bikes:repairs", 0, -1); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:1] return asyncCommands.lrange("bikes:finished", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:2] .toCompletableFuture(); lmovelrange.join(); CompletableFuture<Void> lpushrpush = asyncCommands.rpush("bikes:repairs", "bike:1").thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.rpush("bikes:repairs", "bike:2"); }).thenCompose(res12 -> { System.out.println(res12); // >>> 2 return asyncCommands.lpush("bikes:repairs", "bike:important_bike"); }).thenCompose(res13 -> { System.out.println(res13); // >>> 3 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:important_bike, bike:1, bike:2] .toCompletableFuture(); lpushrpush.join(); CompletableFuture<Void> variadic = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res14 -> { System.out.println(res14); // >>> 3 return asyncCommands.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); }).thenCompose(res15 -> { System.out.println(res15); // >>> 5 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] .toCompletableFuture(); variadic.join(); CompletableFuture<Void> lpoprpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res16 -> { System.out.println(res16); // >>> 3 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res17 -> { System.out.println(res17); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res18 -> { System.out.println(res18); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res19 -> { System.out.println(res19); // >>> bike:2 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); lpoprpop.join(); CompletableFuture<Void> ltrim = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res20 -> { System.out.println(res20); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res21 -> { System.out.println(res21); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim.join(); CompletableFuture<Void> ltrimendoflist = asyncCommands .rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res22 -> { System.out.println(res22); // >>> 5 return asyncCommands.ltrim("bikes:repairs", -3, -1); }).thenCompose(res23 -> { System.out.println(res23); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:3, bike:4, bike:5] .toCompletableFuture(); ltrimendoflist.join(); CompletableFuture<Void> brpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2").thenCompose(res24 -> { System.out.println(res24); // >>> 2 return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res25 -> { System.out.println(res25); // >>> KeyValue[bikes:repairs, bike:2] return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res26 -> { System.out.println(res26); // >>> KeyValue[bikes:repairs, bike:1] return asyncCommands.brpop(1, "bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); brpop.join(); CompletableFuture<Void> rule1 = asyncCommands.del("new_bikes").thenCompose(res27 -> { System.out.println(res27); // >>> 0 return asyncCommands.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); rule1.join(); CompletableFuture<Void> rule11 = asyncCommands.set("new_bikes_string", "bike:1").thenCompose(res28 -> { System.out.println(res28); // >>> OK return asyncCommands.type("new_bikes_string"); }).thenCompose(res29 -> { System.out.println(res29); // >>> string return asyncCommands.lpush("new_bikes_string", "bike:2", "bike:3"); }).handle((res, ex) -> { if (ex == null) { return res; } else { System.out.println(ex); // >>> java.util.concurrent.CompletionException: // >>> io.lettuce.core.RedisCommandExecutionException: // >>> WRONGTYPE Operation against a key holding the wrong // >>> kind of value return -1L; } }) .thenAccept(System.out::println) // >>> -1 .toCompletableFuture(); rule11.join(); CompletableFuture<Void> rule2 = asyncCommands.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res30 -> { System.out.println(res30); // >>> 3 return asyncCommands.exists("bikes:repairs"); }).thenCompose(res31 -> { System.out.println(res31); // >>> 1 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res32 -> { System.out.println(res32); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res33 -> { System.out.println(res33); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res34 -> { System.out.println(res34); // >>> bike:1 return asyncCommands.exists("bikes:repairs"); }) .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); rule2.join(); CompletableFuture<Void> rule3 = asyncCommands.del("bikes:repairs").thenCompose(res35 -> { System.out.println(res35); // >>> 0 return asyncCommands.llen("bikes:repairs"); }).thenCompose(res36 -> { System.out.println(res36); // >>> 0 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); rule3.join(); CompletableFuture<Void> ltrim1 = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res37 -> { System.out.println(res37); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res38 -> { System.out.println(res38); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim1.join(); } finally { redisClient.shutdown(); } } }package example_commands_test import ( "context" "fmt" "github.com/redis/go-redis/v9" ) func ExampleClient_queue() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 2 res3, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> bike:1 res4, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> bike:2 } func ExampleClient_stack() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res5, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> 1 res6, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> 2 res7, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> bike:2 res8, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> bike:1 } func ExampleClient_llen() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 0 } func ExampleClient_lmove_lrange() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res10, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res10) // >>> 1 res11, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> 2 res12, err := rdb.LMove(ctx, "bikes:repairs", "bikes:finished", "LEFT", "LEFT").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> bike:2 res13, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res13) // >>> [bike:1] res14, err := rdb.LRange(ctx, "bikes:finished", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:2] } func ExampleClient_lpush_rpush() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res15, err := rdb.RPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res15) // >>> 1 res16, err := rdb.RPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> 2 res17, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> 3 res18, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res18) // >>> [bike:important_bike bike:1 bike:2] } func ExampleClient_variadic() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res19, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 3 res20, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike", "bike:very_important_bike").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> 5 res21, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res21) // >>> [bike:very_important_bike bike:important_bike bike:1 bike:2 bike:3] } func ExampleClient_lpop_rpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res22, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> 3 res23, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res23) // >>> bike:3 res24, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res24) // >>> bike:1 res25, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res25) // >>> bike:2 res26, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res26) // >>> <empty string> } func ExampleClient_ltrim() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res27, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res27) // >>> 5 res28, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res28) // >>> OK res29, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res29) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_ltrim_end_of_list() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res30, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res30) // >>> 5 res31, err := rdb.LTrim(ctx, "bikes:repairs", -3, -1).Result() if err != nil { panic(err) } fmt.Println(res31) // >>> OK res32, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res32) // >>> [bike:3 bike:4 bike:5] } func ExampleClient_brpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res33, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res33) // >>> 2 res34, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res34) // >>> [bikes:repairs bike:2] res35, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res35) // >>> [bikes:repairs bike:1] res36, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res36) // >>> [] } func ExampleClient_rule1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res37, err := rdb.Del(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res37) // >>> 0 res38, err := rdb.LPush(ctx, "new_bikes", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res38) // >>> 3 } func ExampleClient_rule11() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "new_bikes") res39, err := rdb.Set(ctx, "new_bikes", "bike:1", 0).Result() if err != nil { panic(err) } fmt.Println(res39) // >>> OK res40, err := rdb.Type(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res40) // >>> string res41, err := rdb.LPush(ctx, "new_bikes", "bike:2", "bike:3").Result() if err != nil { fmt.Println(err) // >>> WRONGTYPE Operation against a key holding the wrong kind of value } fmt.Println(res41) } func ExampleClient_rule2() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res42, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res42) // >>> 3 res43, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res43) // >>> 1 res44, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res44) // >>> bike:3 res45, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res45) // >>> bike:2 res46, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res46) // >>> bike:1 res47, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res47) // >>> 0 } func ExampleClient_rule3() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res48, err := rdb.Del(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res48) // >>> 0 res49, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res49) // >>> 0 res50, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res50) // >>> <empty string> } func ExampleClient_ltrim1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res51, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res51) // >>> 5 res52, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res52) // >>> OK res53, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res53) // >>> [bike:5 bike:4 bike:3] }using NRedisStack; using StackExchange.Redis; public class ListExample { public void Run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res1); // >>> 1 long res2 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res2); // >>> 2 RedisValue res3 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res3); // >>> "bike:1" RedisValue res4 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res4); // >>> "bike:2" long res5 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res5); // >>> 1 long res6 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res6); // >>> 2 RedisValue res7 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res7); // >>> "bike:2" RedisValue res8 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res8); // >>> "bike:1" long res9 = db.ListLength("bikes:repairs"); Console.WriteLine(res9); // >>> 0 long res10 = db.ListLeftPush("{bikes}:repairs", "bike:1"); Console.WriteLine(res10); // >>> 1 long res11 = db.ListLeftPush("{bikes}:repairs", "bike:2"); Console.WriteLine(res11); // >>> 2 RedisValue res12 = db.ListMove("{bikes}:repairs", "{bikes}:finished", ListSide.Left, ListSide.Left); Console.Write(res12); // >>> "bike:2" RedisValue[] res13 = db.ListRange("{bikes}:repairs", 0, -1); Console.WriteLine(string.Join(", ", res13)); // >>> "bike:1" RedisValue[] res14 = db.ListRange("{bikes}:finished", 0, -1); Console.WriteLine(string.Join(", ", res14)); // >>> "bike:2" db.KeyDelete("bikes:repairs"); long res15 = db.ListRightPush("bikes:repairs", "bike:1"); Console.WriteLine(res15); // >>> 1 long res16 = db.ListRightPush("bikes:repairs", "bike:2"); Console.WriteLine(res16); // >>> 2 long res17 = db.ListLeftPush("bikes:repairs", "bike:important_bike"); Console.WriteLine(res17); // >>> 3 RedisValue[] res18 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res18)); // >>> "bike:important_bike, bike:1, bike:2" db.KeyDelete("bikes:repairs"); long res19 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res19); // >>> 3 long res20 = db.ListLeftPush("bikes:repairs", ["bike:important_bike", "bike:very_important_bike"]); Console.WriteLine(res20); // >>> 5 RedisValue[] res21 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res21)); // >>> "bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3" db.KeyDelete("bikes:repairs"); long res22 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res22); // >>> 3 RedisValue res23 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res23); // >>> "bike:3" RedisValue res24 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res24); // >>> "bike:1" RedisValue res25 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res25); // >>> "bike:2" RedisValue res26 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res26); // >>> <Empty string> long res27 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res27); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res28 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res28)); // "bike:5, bike:4, bike:3" db.KeyDelete("bikes:repairs"); long res29 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res29); // >>> 5 db.ListTrim("bikes:repairs", -3, -1); RedisValue[] res30 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res30)); // >>> "bike:3, bike:4, bike:5" db.KeyDelete("bikes:repairs"); long res31 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2"]); Console.WriteLine(res31); // >>> 2 Tuple<RedisKey, RedisValue>? res32 = db.BRPop(["bikes:repairs"], 1); if (res32 != null) Console.WriteLine($"{res32.Item1} -> {res32.Item2}"); // >>> "bikes:repairs -> bike:2" Tuple<RedisKey, RedisValue>? res33 = db.BRPop(["bikes:repairs"], 1); if (res33 != null) Console.WriteLine($"{res33.Item1} -> {res33.Item2}"); // >>> "bikes:repairs -> bike:1" Tuple<RedisKey, RedisValue>? res34 = db.BRPop(["bikes:repairs"], 1); Console.WriteLine(res34); // >>> "Null" db.KeyDelete("new_bikes"); long res36 = db.ListRightPush("new_bikes", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res36); // >>> 3 db.KeyDelete("new_bikes"); bool res37 = db.StringSet("new_bikes", "bike:1"); Console.WriteLine(res37); // >>> True RedisType res38 = db.KeyType("new_bikes"); Console.WriteLine(res38); // >>> RedisType.String try { long res39 = db.ListRightPush("new_bikes", ["bike:2", "bike:3"]); } catch (Exception e) { Console.WriteLine(e); } db.KeyDelete("bikes:repairs"); long res40 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res40); // >>> 3 bool res41 = db.KeyExists("bikes:repairs"); Console.WriteLine(res41); // >>> True RedisValue res42 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res42); // >>> "bike:3" RedisValue res43 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res43); // >>> "bike:2" RedisValue res44 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res44); // >>> "bike:1" bool res45 = db.KeyExists("bikes:repairs"); Console.WriteLine(res45); // >>> False db.KeyDelete("bikes:repairs"); long res47 = db.ListLength("bikes:repairs"); Console.WriteLine(res47); // >>> 0 RedisValue res48 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res48); // >>> Null db.KeyDelete("bikes:repairs"); long res49 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res49); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res50 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res50)); // >>> "bike:5, bike:4, bike:3" } }<?php require 'vendor/autoload.php'; use Predis\Client as PredisClient; class DtListTest { public function testDtList() { $r = new PredisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'database' => 0, ]); $res1 = $r->lpush('bikes:repairs', 'bike:1'); echo $res1 . PHP_EOL; // >>> 1 $res2 = $r->lpush('bikes:repairs', 'bike:2'); echo $res2 . PHP_EOL; // >>> 2 $res3 = $r->rpop('bikes:repairs'); echo $res3 . PHP_EOL; // >>> bike:1 $res4 = $r->rpop('bikes:repairs'); echo $res4 . PHP_EOL; // >>> bike:2 $res5 = $r->lpush('bikes:repairs', 'bike:1'); echo $res5 . PHP_EOL; // >>> 1 $res6 = $r->lpush('bikes:repairs', 'bike:2'); echo $res6 . PHP_EOL; // >>> 2 $res7 = $r->lpop('bikes:repairs'); echo $res7 . PHP_EOL; // >>> bike:2 $res8 = $r->lpop('bikes:repairs'); echo $res8 . PHP_EOL; // >>> bike:1 $res9 = $r->llen('bikes:repairs'); echo $res9 . PHP_EOL; // >>> 0 $res10 = $r->lpush('bikes:repairs', 'bike:1'); echo $res10 . PHP_EOL; // >>> 1 $res11 = $r->lpush('bikes:repairs', 'bike:2'); echo $res11 . PHP_EOL; // >>> 2 $res12 = $r->lmove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); echo $res12 . PHP_EOL; // >>> 'bike:2' $res13 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res13) . PHP_EOL; // >>> ['bike:1'] $res14 = $r->lrange('bikes:finished', 0, -1); echo json_encode($res14) . PHP_EOL; // >>> ['bike:2'] $r->del('bikes:repairs'); $res15 = $r->rpush('bikes:repairs', 'bike:1'); echo $res15 . PHP_EOL; // >>> 1 $res16 = $r->rpush('bikes:repairs', 'bike:2'); echo $res16 . PHP_EOL; // >>> 2 $res17 = $r->lpush('bikes:repairs', 'bike:important_bike'); echo $res17 . PHP_EOL; // >>> 3 $res18 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res18) . PHP_EOL; // >>> ['bike:important_bike', 'bike:1', 'bike:2'] $r->del('bikes:repairs'); $res19 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res19 . PHP_EOL; // >>> 3 $res20 = $r->lpush('bikes:repairs', 'bike:important_bike', 'bike:very_important_bike'); echo $res20 . PHP_EOL; // >>> 5 $res21 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res21) . PHP_EOL; // >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... $r->del('bikes:repairs'); $res22 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res22 . PHP_EOL; // >>> 3 $res23 = $r->rpop('bikes:repairs'); echo $res23 . PHP_EOL; // >>> 'bike:3' $res24 = $r->lpop('bikes:repairs'); echo $res24 . PHP_EOL; // >>> 'bike:1' $res25 = $r->rpop('bikes:repairs'); echo $res25 . PHP_EOL; // >>> 'bike:2' $res26 = $r->rpop('bikes:repairs'); echo $res26 . PHP_EOL; // >>> None $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', 0, 2); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:1', 'bike:2', 'bike:3'] $r->del('bikes:repairs'); $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', -3, -1); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:3', 'bike:4', 'bike:5'] $r->del('bikes:repairs'); $res31 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2'); echo $res31 . PHP_EOL; // >>> 2 $res32 = $r->brpop('bikes:repairs', 1); echo json_encode($res32) . PHP_EOL; // >>> ['bikes:repairs', 'bike:2'] $res33 = $r->brpop('bikes:repairs', 1); echo json_encode($res33) . PHP_EOL; // >>> ['bikes:repairs', 'bike:1'] $res34 = $r->brpop('bikes:repairs', 1); echo json_encode($res34) . PHP_EOL; // >>> None $res35 = $r->del('new_bikes'); echo $res35 . PHP_EOL; // >>> 0 $res36 = $r->lpush('new_bikes', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $r->del('new_bikes'); $res37 = $r->set('new_bikes', 'bike:1'); echo $res37 . PHP_EOL; // >>> True $res38 = $r->type('new_bikes'); echo $res38 . PHP_EOL; // >>> 'string' try { $res39 = $r->lpush('new_bikes', 'bike:2', 'bike:3'); // >>> redis.exceptions.ResponseError: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } catch (\Predis\Response\ServerException $e) { echo $e->getMessage() . PHP_EOL; } $r->del('bikes:repairs'); $res36 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $res40 = $r->exists('bikes:repairs'); echo $res40 . PHP_EOL; // >>> 1 $res41 = $r->lpop('bikes:repairs'); echo $res41 . PHP_EOL; // >>> 'bike:3' $res42 = $r->lpop('bikes:repairs'); echo $res42 . PHP_EOL; // >>> 'bike:2' $res43 = $r->lpop('bikes:repairs'); echo $res43 . PHP_EOL; // >>> 'bike:1' $res44 = $r->exists('bikes:repairs'); echo $res44 . PHP_EOL; // >>> False $res45 = $r->del('bikes:repairs'); echo $res45 . PHP_EOL; // >>> 0 $res46 = $r->llen('bikes:repairs'); echo $res46 . PHP_EOL; // >>> 0 $res47 = $r->lpop('bikes:repairs'); echo $res47 . PHP_EOL; // >>> None $res48 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res48 . PHP_EOL; // >>> 5 $res49 = $r->ltrim('bikes:repairs', 0, 2); echo $res49 . PHP_EOL; // >>> True $res50 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res50) . PHP_EOL; // >>> ['bike:5', 'bike:4', 'bike:3'] } } -
Atomically pop an element from one list and push to another:
Atomic transfer: Use LMOVE to move elements between lists in a single operation when you need to transfer items without race conditions> LPUSH bikes:repairs bike:1 (integer) 1 > LPUSH bikes:repairs bike:2 (integer) 2 > LMOVE bikes:repairs bikes:finished LEFT LEFT "bike:2" > LRANGE bikes:repairs 0 -1 1) "bike:1" > LRANGE bikes:finished 0 -1 1) "bike:2"""" Code samples for List doc pages: https://redis.io/docs/latest/develop/data-types/lists/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.lpush("bikes:repairs", "bike:1") print(res1) # >>> 1 res2 = r.lpush("bikes:repairs", "bike:2") print(res2) # >>> 2 res3 = r.rpop("bikes:repairs") print(res3) # >>> bike:1 res4 = r.rpop("bikes:repairs") print(res4) # >>> bike:2 res5 = r.lpush("bikes:repairs", "bike:1") print(res5) # >>> 1 res6 = r.lpush("bikes:repairs", "bike:2") print(res6) # >>> 2 res7 = r.lpop("bikes:repairs") print(res7) # >>> bike:2 res8 = r.lpop("bikes:repairs") print(res8) # >>> bike:1 res9 = r.llen("bikes:repairs") print(res9) # >>> 0 res10 = r.lpush("bikes:repairs", "bike:1") print(res10) # >>> 1 res11 = r.lpush("bikes:repairs", "bike:2") print(res11) # >>> 2 res12 = r.lmove("bikes:repairs", "bikes:finished", "LEFT", "LEFT") print(res12) # >>> 'bike:2' res13 = r.lrange("bikes:repairs", 0, -1) print(res13) # >>> ['bike:1'] res14 = r.lrange("bikes:finished", 0, -1) print(res14) # >>> ['bike:2'] r.delete("bikes:repairs") res15 = r.rpush("bikes:repairs", "bike:1") print(res15) # >>> 1 res16 = r.rpush("bikes:repairs", "bike:2") print(res16) # >>> 2 res17 = r.lpush("bikes:repairs", "bike:important_bike") print(res17) # >>> 3 res18 = r.lrange("bikes:repairs", 0, -1) print(res18) # >>> ['bike:important_bike', 'bike:1', 'bike:2'] r.delete("bikes:repairs") res19 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res19) # >>> 3 res20 = r.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike") print(res20) # >>> 5 res21 = r.lrange("bikes:repairs", 0, -1) print( res21 ) # >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... r.delete("bikes:repairs") res22 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res22) # >>> 3 res23 = r.rpop("bikes:repairs") print(res23) # >>> 'bike:3' res24 = r.lpop("bikes:repairs") print(res24) # >>> 'bike:1' res25 = r.rpop("bikes:repairs") print(res25) # >>> 'bike:2' res26 = r.rpop("bikes:repairs") print(res26) # >>> None res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", 0, 2) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:1', 'bike:2', 'bike:3'] r.delete("bikes:repairs") res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", -3, -1) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:3', 'bike:4', 'bike:5'] r.delete("bikes:repairs") res31 = r.rpush("bikes:repairs", "bike:1", "bike:2") print(res31) # >>> 2 res32 = r.brpop("bikes:repairs", timeout=1) print(res32) # >>> ('bikes:repairs', 'bike:2') res33 = r.brpop("bikes:repairs", timeout=1) print(res33) # >>> ('bikes:repairs', 'bike:1') res34 = r.brpop("bikes:repairs", timeout=1) print(res34) # >>> None res35 = r.delete("new_bikes") print(res35) # >>> 0 res36 = r.lpush("new_bikes", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 r.delete("new_bikes") res37 = r.set("new_bikes", "bike:1") print(res37) # >>> True res38 = r.type("new_bikes") print(res38) # >>> 'string' try: res39 = r.lpush("new_bikes", "bike:2", "bike:3") # >>> redis.exceptions.ResponseError: # >>> WRONGTYPE Operation against a key holding the wrong kind of value except redis.exceptions.ResponseError as e: print(e) r.delete("bikes:repairs") r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 res40 = r.exists("bikes:repairs") print(res40) # >>> 1 res41 = r.lpop("bikes:repairs") print(res41) # >>> 'bike:3' res42 = r.lpop("bikes:repairs") print(res42) # >>> 'bike:2' res43 = r.lpop("bikes:repairs") print(res43) # >>> 'bike:1' res44 = r.exists("bikes:repairs") print(res44) # >>> False r.delete("bikes:repairs") res45 = r.delete("bikes:repairs") print(res45) # >>> 0 res46 = r.llen("bikes:repairs") print(res46) # >>> 0 res47 = r.lpop("bikes:repairs") print(res47) # >>> None r.delete("bikes:repairs") res48 = r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res48) # >>> 5 res49 = r.ltrim("bikes:repairs", 0, 2) print(res49) # >>> True res50 = r.lrange("bikes:repairs", 0, -1) print(res50) # >>> ['bike:5', 'bike:4', 'bike:3']import { createClient } from 'redis'; const client = createClient(); await client.connect(); const res1 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res1); // 1 const res2 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res2); // 2 const res3 = await client.rPop('bikes:repairs'); console.log(res3); // bike:1 const res4 = await client.rPop('bikes:repairs'); console.log(res4); // bike:2 const res5 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res5); // 1 const res6 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res6); // 2 const res7 = await client.lPop('bikes:repairs'); console.log(res7); // bike:2 const res8 = await client.lPop('bikes:repairs'); console.log(res8); // bike:1 const res9 = await client.lLen('bikes:repairs'); console.log(res9); // 0 const res10 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res10); // 1 const res11 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res11); // 2 const res12 = await client.lMove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); console.log(res12); // 'bike:2' const res13 = await client.lRange('bikes:repairs', 0, -1); console.log(res13); // ['bike:1'] const res14 = await client.lRange('bikes:finished', 0, -1); console.log(res14); // ['bike:2'] await client.del('bikes:repairs'); const res15 = await client.rPush('bikes:repairs', 'bike:1'); console.log(res15); // 1 const res16 = await client.rPush('bikes:repairs', 'bike:2'); console.log(res16); // 2 const res17 = await client.lPush('bikes:repairs', 'bike:important_bike'); console.log(res17); // 3 const res18 = await client.lRange('bikes:repairs', 0, -1); console.log(res18); // ['bike:important_bike', 'bike:1', 'bike:2'] await client.del('bikes:repairs'); const res19 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res19); // 3 const res20 = await client.lPush( 'bikes:repairs', ['bike:important_bike', 'bike:very_important_bike'] ); console.log(res20); // 5 const res21 = await client.lRange('bikes:repairs', 0, -1); console.log(res21); // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3'] await client.del('bikes:repairs'); const res22 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res22); // 3 const res23 = await client.rPop('bikes:repairs'); console.log(res23); // 'bike:3' const res24 = await client.lPop('bikes:repairs'); console.log(res24); // 'bike:1' const res25 = await client.rPop('bikes:repairs'); console.log(res25); // 'bike:2' const res26 = await client.rPop('bikes:repairs'); console.log(res26); // null const res27 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27); // 5 const res28 = await client.lTrim('bikes:repairs', 0, 2); console.log(res28); // OK const res29 = await client.lRange('bikes:repairs', 0, -1); console.log(res29); // ['bike:5', 'bike:4', 'bike:3'] await client.del('bikes:repairs'); const res27eol = await client.rPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27eol); // 5 const res28eol = await client.lTrim('bikes:repairs', -3, -1); console.log(res28eol); // 'OK' const res29eol = await client.lRange('bikes:repairs', 0, -1); console.log(res29eol); // ['bike:3', 'bike:4', 'bike:5'] await client.del('bikes:repairs'); const res31 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2']); console.log(res31); // 2 const res32 = await client.brPop('bikes:repairs', 1); console.log(res32); // { key: 'bikes:repairs', element: 'bike:2' } const res33 = await client.brPop('bikes:repairs', 1); console.log(res33); // { key: 'bikes:repairs', element: 'bike:1' } const res34 = await client.brPop('bikes:repairs', 1); console.log(res34); // null const res35 = await client.del('new_bikes'); console.log(res35); // 0 const res36 = await client.lPush('new_bikes', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 await client.del('new_bikes'); const res37 = await client.set('new_bikes', 'bike:1'); console.log(res37); // 'OK' const res38 = await client.type('new_bikes'); console.log(res38); // 'string' try { const res39 = await client.lPush('new_bikes', 'bike:2', 'bike:3'); // redis.exceptions.ResponseError: // [SimpleError: WRONGTYPE Operation against a key holding the wrong kind of value] } catch(e){ console.log(e); } await client.del('bikes:repairs'); await client.lPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 const res40 = await client.exists('bikes:repairs') console.log(res40); // 1 const res41 = await client.lPop('bikes:repairs'); console.log(res41); // 'bike:3' const res42 = await client.lPop('bikes:repairs'); console.log(res42); // 'bike:2' const res43 = await client.lPop('bikes:repairs'); console.log(res43); // 'bike:1' const res44 = await client.exists('bikes:repairs'); console.log(res44); // 0 await client.del('bikes:repairs'); const res45 = await client.del('bikes:repairs'); console.log(res45); // 0 const res46 = await client.lLen('bikes:repairs'); console.log(res46); // 0 const res47 = await client.lPop('bikes:repairs'); console.log(res47); // null await client.del('bikes:repairs'); const res48 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res48); // 5 const res49 = await client.lTrim('bikes:repairs', 0, 2); console.log(res49); // 'OK' const res50 = await client.lRange('bikes:repairs', 0, -1); console.log(res50); // ['bike:5', 'bike:4', 'bike:3'] await client.close();import redis.clients.jedis.UnifiedJedis; import redis.clients.jedis.args.ListDirection; import java.util.List; public class ListExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res2); // >>> 2 String res3 = jedis.rpop("bikes:repairs"); System.out.println(res3); // >>> bike:1 String res4 = jedis.rpop("bikes:repairs"); System.out.println(res4); // >>> bike:2 long res5 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res5); // >>> 1 long res6 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res6); // >>> 2 String res7 = jedis.lpop("bikes:repairs"); System.out.println(res7); // >>> bike:2 String res8 = jedis.lpop("bikes:repairs"); System.out.println(res8); // >>> bike:1 long res9 = jedis.llen("bikes:repairs"); System.out.println(res9); // >>> 0 long res10 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res10); // >>> 1 long res11 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res11); // >>> 2 String res12 = jedis.lmove("bikes:repairs", "bikes:finished", ListDirection.LEFT, ListDirection.LEFT); System.out.println(res12); // >>> bike:2 List<String> res13 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res13); // >>> [bike:1] List<String> res14 = jedis.lrange("bikes:finished", 0, -1); System.out.println(res14); // >>> [bike:2] jedis.del("bikes:repairs"); long res15 = jedis.rpush("bikes:repairs", "bike:1"); System.out.println(res15); // >>> 1 long res16 = jedis.rpush("bikes:repairs", "bike:2"); System.out.println(res16); // >>> 2 long res17 = jedis.lpush("bikes:repairs", "bike:important_bike"); System.out.println(res17); // >>> 3 List<String> res18 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res18); // >>> [bike:important_bike, bike:1, bike:2] jedis.del("bikes:repairs"); long res19 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res19); // >>> 3 long res20 = jedis.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); System.out.println(res20); // >>> 5 List<String> res21 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res21); // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); long res22 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res22); // >>> 3 String res23 = jedis.rpop("bikes:repairs"); System.out.println(res23); // >>> bike:3 String res24 = jedis.lpop("bikes:repairs"); System.out.println(res24); // >>> bike:1 String res25 = jedis.rpop("bikes:repairs"); System.out.println(res25); // >>> bike:2 String res26 = jedis.rpop("bikes:repairs"); System.out.println(res26); // >>> null long res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 String res28 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res28); // >>> OK List<String> res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 res28 = jedis.ltrim("bikes:repairs", -3, -1); System.out.println(res2); // >>> OK res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:3, bike:4, bike:5] jedis.del("bikes:repairs"); long res31 = jedis.rpush("bikes:repairs", "bike:1", "bike:2"); System.out.println(res31); // >>> 2 List<String> res32 = jedis.brpop(1, "bikes:repairs"); System.out.println(res32); // >>> (bikes:repairs, bike:2) List<String> res33 = jedis.brpop(1,"bikes:repairs"); System.out.println(res33); // >>> (bikes:repairs, bike:1) List<String> res34 = jedis.brpop(1,"bikes:repairs"); System.out.println(res34); // >>> null jedis.del("new_bikes"); long res36 = jedis.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 jedis.del("new_bikes"); String res37 = jedis.set("new_bikes", "bike:1"); System.out.println(res37); // >>> OK String res38 = jedis.type("new_bikes"); System.out.println(res38); // >>> string try { long res39 = jedis.lpush("new_bikes", "bike:2", "bike:3"); } catch (Exception e) { e.printStackTrace(); // >>> redis.clients.jedis.exceptions.JedisDataException: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } jedis.del("bikes:repairs"); jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 boolean res40 = jedis.exists("bikes:repairs"); System.out.println(res40); // >>> true String res41 = jedis.lpop("bikes:repairs"); System.out.println(res41); // >>> bike:3 String res42 = jedis.lpop("bikes:repairs"); System.out.println(res42); // >>> bike:2 String res43 = jedis.lpop("bikes:repairs"); System.out.println(res43); // >>> bike:1 boolean res44 = jedis.exists("bikes:repairs"); System.out.println(res44); // >>> false jedis.del("bikes:repairs"); long res46 = jedis.llen("bikes:repairs"); System.out.println(res46); // >>> 0 String res47 = jedis.lpop("bikes:repairs"); System.out.println(res47); // >>> null jedis.del("bikes:repairs"); long res48 = jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res48); // >>> 5 String res49 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res49); // >>> OK List<String> res50 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res50); // >>> [bike:5, bike:4, bike:3] jedis.close(); } }package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.concurrent.CompletableFuture; public class ListExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> queue = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 2 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res3 -> { System.out.println(res3); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:2 .toCompletableFuture(); queue.join(); CompletableFuture<Void> stack = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res4 -> { System.out.println(res4); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res6 -> { System.out.println(res6); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:1 .toCompletableFuture(); stack.join(); CompletableFuture<Void> llen = asyncCommands.llen("bikes:repairs") .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); llen.join(); CompletableFuture<Void> lmovelrange = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res7 -> { System.out.println(res7); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res8 -> { System.out.println(res8); // >>> 2 return asyncCommands.lmove("bikes:repairs", "bikes:finished", LMoveArgs.Builder.leftLeft()); }).thenCompose(res9 -> { System.out.println(res9); // >>> bike:2 return asyncCommands.lrange("bikes:repairs", 0, -1); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:1] return asyncCommands.lrange("bikes:finished", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:2] .toCompletableFuture(); lmovelrange.join(); CompletableFuture<Void> lpushrpush = asyncCommands.rpush("bikes:repairs", "bike:1").thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.rpush("bikes:repairs", "bike:2"); }).thenCompose(res12 -> { System.out.println(res12); // >>> 2 return asyncCommands.lpush("bikes:repairs", "bike:important_bike"); }).thenCompose(res13 -> { System.out.println(res13); // >>> 3 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:important_bike, bike:1, bike:2] .toCompletableFuture(); lpushrpush.join(); CompletableFuture<Void> variadic = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res14 -> { System.out.println(res14); // >>> 3 return asyncCommands.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); }).thenCompose(res15 -> { System.out.println(res15); // >>> 5 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] .toCompletableFuture(); variadic.join(); CompletableFuture<Void> lpoprpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res16 -> { System.out.println(res16); // >>> 3 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res17 -> { System.out.println(res17); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res18 -> { System.out.println(res18); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res19 -> { System.out.println(res19); // >>> bike:2 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); lpoprpop.join(); CompletableFuture<Void> ltrim = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res20 -> { System.out.println(res20); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res21 -> { System.out.println(res21); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim.join(); CompletableFuture<Void> ltrimendoflist = asyncCommands .rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res22 -> { System.out.println(res22); // >>> 5 return asyncCommands.ltrim("bikes:repairs", -3, -1); }).thenCompose(res23 -> { System.out.println(res23); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:3, bike:4, bike:5] .toCompletableFuture(); ltrimendoflist.join(); CompletableFuture<Void> brpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2").thenCompose(res24 -> { System.out.println(res24); // >>> 2 return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res25 -> { System.out.println(res25); // >>> KeyValue[bikes:repairs, bike:2] return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res26 -> { System.out.println(res26); // >>> KeyValue[bikes:repairs, bike:1] return asyncCommands.brpop(1, "bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); brpop.join(); CompletableFuture<Void> rule1 = asyncCommands.del("new_bikes").thenCompose(res27 -> { System.out.println(res27); // >>> 0 return asyncCommands.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); rule1.join(); CompletableFuture<Void> rule11 = asyncCommands.set("new_bikes_string", "bike:1").thenCompose(res28 -> { System.out.println(res28); // >>> OK return asyncCommands.type("new_bikes_string"); }).thenCompose(res29 -> { System.out.println(res29); // >>> string return asyncCommands.lpush("new_bikes_string", "bike:2", "bike:3"); }).handle((res, ex) -> { if (ex == null) { return res; } else { System.out.println(ex); // >>> java.util.concurrent.CompletionException: // >>> io.lettuce.core.RedisCommandExecutionException: // >>> WRONGTYPE Operation against a key holding the wrong // >>> kind of value return -1L; } }) .thenAccept(System.out::println) // >>> -1 .toCompletableFuture(); rule11.join(); CompletableFuture<Void> rule2 = asyncCommands.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res30 -> { System.out.println(res30); // >>> 3 return asyncCommands.exists("bikes:repairs"); }).thenCompose(res31 -> { System.out.println(res31); // >>> 1 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res32 -> { System.out.println(res32); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res33 -> { System.out.println(res33); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res34 -> { System.out.println(res34); // >>> bike:1 return asyncCommands.exists("bikes:repairs"); }) .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); rule2.join(); CompletableFuture<Void> rule3 = asyncCommands.del("bikes:repairs").thenCompose(res35 -> { System.out.println(res35); // >>> 0 return asyncCommands.llen("bikes:repairs"); }).thenCompose(res36 -> { System.out.println(res36); // >>> 0 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); rule3.join(); CompletableFuture<Void> ltrim1 = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res37 -> { System.out.println(res37); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res38 -> { System.out.println(res38); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim1.join(); } finally { redisClient.shutdown(); } } }package example_commands_test import ( "context" "fmt" "github.com/redis/go-redis/v9" ) func ExampleClient_queue() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 2 res3, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> bike:1 res4, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> bike:2 } func ExampleClient_stack() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res5, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> 1 res6, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> 2 res7, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> bike:2 res8, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> bike:1 } func ExampleClient_llen() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 0 } func ExampleClient_lmove_lrange() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res10, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res10) // >>> 1 res11, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> 2 res12, err := rdb.LMove(ctx, "bikes:repairs", "bikes:finished", "LEFT", "LEFT").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> bike:2 res13, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res13) // >>> [bike:1] res14, err := rdb.LRange(ctx, "bikes:finished", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:2] } func ExampleClient_lpush_rpush() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res15, err := rdb.RPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res15) // >>> 1 res16, err := rdb.RPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> 2 res17, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> 3 res18, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res18) // >>> [bike:important_bike bike:1 bike:2] } func ExampleClient_variadic() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res19, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 3 res20, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike", "bike:very_important_bike").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> 5 res21, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res21) // >>> [bike:very_important_bike bike:important_bike bike:1 bike:2 bike:3] } func ExampleClient_lpop_rpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res22, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> 3 res23, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res23) // >>> bike:3 res24, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res24) // >>> bike:1 res25, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res25) // >>> bike:2 res26, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res26) // >>> <empty string> } func ExampleClient_ltrim() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res27, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res27) // >>> 5 res28, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res28) // >>> OK res29, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res29) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_ltrim_end_of_list() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res30, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res30) // >>> 5 res31, err := rdb.LTrim(ctx, "bikes:repairs", -3, -1).Result() if err != nil { panic(err) } fmt.Println(res31) // >>> OK res32, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res32) // >>> [bike:3 bike:4 bike:5] } func ExampleClient_brpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res33, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res33) // >>> 2 res34, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res34) // >>> [bikes:repairs bike:2] res35, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res35) // >>> [bikes:repairs bike:1] res36, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res36) // >>> [] } func ExampleClient_rule1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res37, err := rdb.Del(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res37) // >>> 0 res38, err := rdb.LPush(ctx, "new_bikes", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res38) // >>> 3 } func ExampleClient_rule11() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "new_bikes") res39, err := rdb.Set(ctx, "new_bikes", "bike:1", 0).Result() if err != nil { panic(err) } fmt.Println(res39) // >>> OK res40, err := rdb.Type(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res40) // >>> string res41, err := rdb.LPush(ctx, "new_bikes", "bike:2", "bike:3").Result() if err != nil { fmt.Println(err) // >>> WRONGTYPE Operation against a key holding the wrong kind of value } fmt.Println(res41) } func ExampleClient_rule2() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res42, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res42) // >>> 3 res43, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res43) // >>> 1 res44, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res44) // >>> bike:3 res45, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res45) // >>> bike:2 res46, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res46) // >>> bike:1 res47, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res47) // >>> 0 } func ExampleClient_rule3() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res48, err := rdb.Del(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res48) // >>> 0 res49, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res49) // >>> 0 res50, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res50) // >>> <empty string> } func ExampleClient_ltrim1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res51, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res51) // >>> 5 res52, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res52) // >>> OK res53, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res53) // >>> [bike:5 bike:4 bike:3] }using NRedisStack; using StackExchange.Redis; public class ListExample { public void Run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res1); // >>> 1 long res2 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res2); // >>> 2 RedisValue res3 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res3); // >>> "bike:1" RedisValue res4 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res4); // >>> "bike:2" long res5 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res5); // >>> 1 long res6 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res6); // >>> 2 RedisValue res7 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res7); // >>> "bike:2" RedisValue res8 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res8); // >>> "bike:1" long res9 = db.ListLength("bikes:repairs"); Console.WriteLine(res9); // >>> 0 long res10 = db.ListLeftPush("{bikes}:repairs", "bike:1"); Console.WriteLine(res10); // >>> 1 long res11 = db.ListLeftPush("{bikes}:repairs", "bike:2"); Console.WriteLine(res11); // >>> 2 RedisValue res12 = db.ListMove("{bikes}:repairs", "{bikes}:finished", ListSide.Left, ListSide.Left); Console.Write(res12); // >>> "bike:2" RedisValue[] res13 = db.ListRange("{bikes}:repairs", 0, -1); Console.WriteLine(string.Join(", ", res13)); // >>> "bike:1" RedisValue[] res14 = db.ListRange("{bikes}:finished", 0, -1); Console.WriteLine(string.Join(", ", res14)); // >>> "bike:2" db.KeyDelete("bikes:repairs"); long res15 = db.ListRightPush("bikes:repairs", "bike:1"); Console.WriteLine(res15); // >>> 1 long res16 = db.ListRightPush("bikes:repairs", "bike:2"); Console.WriteLine(res16); // >>> 2 long res17 = db.ListLeftPush("bikes:repairs", "bike:important_bike"); Console.WriteLine(res17); // >>> 3 RedisValue[] res18 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res18)); // >>> "bike:important_bike, bike:1, bike:2" db.KeyDelete("bikes:repairs"); long res19 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res19); // >>> 3 long res20 = db.ListLeftPush("bikes:repairs", ["bike:important_bike", "bike:very_important_bike"]); Console.WriteLine(res20); // >>> 5 RedisValue[] res21 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res21)); // >>> "bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3" db.KeyDelete("bikes:repairs"); long res22 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res22); // >>> 3 RedisValue res23 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res23); // >>> "bike:3" RedisValue res24 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res24); // >>> "bike:1" RedisValue res25 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res25); // >>> "bike:2" RedisValue res26 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res26); // >>> <Empty string> long res27 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res27); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res28 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res28)); // "bike:5, bike:4, bike:3" db.KeyDelete("bikes:repairs"); long res29 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res29); // >>> 5 db.ListTrim("bikes:repairs", -3, -1); RedisValue[] res30 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res30)); // >>> "bike:3, bike:4, bike:5" db.KeyDelete("bikes:repairs"); long res31 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2"]); Console.WriteLine(res31); // >>> 2 Tuple<RedisKey, RedisValue>? res32 = db.BRPop(["bikes:repairs"], 1); if (res32 != null) Console.WriteLine($"{res32.Item1} -> {res32.Item2}"); // >>> "bikes:repairs -> bike:2" Tuple<RedisKey, RedisValue>? res33 = db.BRPop(["bikes:repairs"], 1); if (res33 != null) Console.WriteLine($"{res33.Item1} -> {res33.Item2}"); // >>> "bikes:repairs -> bike:1" Tuple<RedisKey, RedisValue>? res34 = db.BRPop(["bikes:repairs"], 1); Console.WriteLine(res34); // >>> "Null" db.KeyDelete("new_bikes"); long res36 = db.ListRightPush("new_bikes", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res36); // >>> 3 db.KeyDelete("new_bikes"); bool res37 = db.StringSet("new_bikes", "bike:1"); Console.WriteLine(res37); // >>> True RedisType res38 = db.KeyType("new_bikes"); Console.WriteLine(res38); // >>> RedisType.String try { long res39 = db.ListRightPush("new_bikes", ["bike:2", "bike:3"]); } catch (Exception e) { Console.WriteLine(e); } db.KeyDelete("bikes:repairs"); long res40 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res40); // >>> 3 bool res41 = db.KeyExists("bikes:repairs"); Console.WriteLine(res41); // >>> True RedisValue res42 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res42); // >>> "bike:3" RedisValue res43 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res43); // >>> "bike:2" RedisValue res44 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res44); // >>> "bike:1" bool res45 = db.KeyExists("bikes:repairs"); Console.WriteLine(res45); // >>> False db.KeyDelete("bikes:repairs"); long res47 = db.ListLength("bikes:repairs"); Console.WriteLine(res47); // >>> 0 RedisValue res48 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res48); // >>> Null db.KeyDelete("bikes:repairs"); long res49 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res49); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res50 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res50)); // >>> "bike:5, bike:4, bike:3" } }<?php require 'vendor/autoload.php'; use Predis\Client as PredisClient; class DtListTest { public function testDtList() { $r = new PredisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'database' => 0, ]); $res1 = $r->lpush('bikes:repairs', 'bike:1'); echo $res1 . PHP_EOL; // >>> 1 $res2 = $r->lpush('bikes:repairs', 'bike:2'); echo $res2 . PHP_EOL; // >>> 2 $res3 = $r->rpop('bikes:repairs'); echo $res3 . PHP_EOL; // >>> bike:1 $res4 = $r->rpop('bikes:repairs'); echo $res4 . PHP_EOL; // >>> bike:2 $res5 = $r->lpush('bikes:repairs', 'bike:1'); echo $res5 . PHP_EOL; // >>> 1 $res6 = $r->lpush('bikes:repairs', 'bike:2'); echo $res6 . PHP_EOL; // >>> 2 $res7 = $r->lpop('bikes:repairs'); echo $res7 . PHP_EOL; // >>> bike:2 $res8 = $r->lpop('bikes:repairs'); echo $res8 . PHP_EOL; // >>> bike:1 $res9 = $r->llen('bikes:repairs'); echo $res9 . PHP_EOL; // >>> 0 $res10 = $r->lpush('bikes:repairs', 'bike:1'); echo $res10 . PHP_EOL; // >>> 1 $res11 = $r->lpush('bikes:repairs', 'bike:2'); echo $res11 . PHP_EOL; // >>> 2 $res12 = $r->lmove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); echo $res12 . PHP_EOL; // >>> 'bike:2' $res13 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res13) . PHP_EOL; // >>> ['bike:1'] $res14 = $r->lrange('bikes:finished', 0, -1); echo json_encode($res14) . PHP_EOL; // >>> ['bike:2'] $r->del('bikes:repairs'); $res15 = $r->rpush('bikes:repairs', 'bike:1'); echo $res15 . PHP_EOL; // >>> 1 $res16 = $r->rpush('bikes:repairs', 'bike:2'); echo $res16 . PHP_EOL; // >>> 2 $res17 = $r->lpush('bikes:repairs', 'bike:important_bike'); echo $res17 . PHP_EOL; // >>> 3 $res18 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res18) . PHP_EOL; // >>> ['bike:important_bike', 'bike:1', 'bike:2'] $r->del('bikes:repairs'); $res19 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res19 . PHP_EOL; // >>> 3 $res20 = $r->lpush('bikes:repairs', 'bike:important_bike', 'bike:very_important_bike'); echo $res20 . PHP_EOL; // >>> 5 $res21 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res21) . PHP_EOL; // >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... $r->del('bikes:repairs'); $res22 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res22 . PHP_EOL; // >>> 3 $res23 = $r->rpop('bikes:repairs'); echo $res23 . PHP_EOL; // >>> 'bike:3' $res24 = $r->lpop('bikes:repairs'); echo $res24 . PHP_EOL; // >>> 'bike:1' $res25 = $r->rpop('bikes:repairs'); echo $res25 . PHP_EOL; // >>> 'bike:2' $res26 = $r->rpop('bikes:repairs'); echo $res26 . PHP_EOL; // >>> None $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', 0, 2); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:1', 'bike:2', 'bike:3'] $r->del('bikes:repairs'); $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', -3, -1); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:3', 'bike:4', 'bike:5'] $r->del('bikes:repairs'); $res31 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2'); echo $res31 . PHP_EOL; // >>> 2 $res32 = $r->brpop('bikes:repairs', 1); echo json_encode($res32) . PHP_EOL; // >>> ['bikes:repairs', 'bike:2'] $res33 = $r->brpop('bikes:repairs', 1); echo json_encode($res33) . PHP_EOL; // >>> ['bikes:repairs', 'bike:1'] $res34 = $r->brpop('bikes:repairs', 1); echo json_encode($res34) . PHP_EOL; // >>> None $res35 = $r->del('new_bikes'); echo $res35 . PHP_EOL; // >>> 0 $res36 = $r->lpush('new_bikes', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $r->del('new_bikes'); $res37 = $r->set('new_bikes', 'bike:1'); echo $res37 . PHP_EOL; // >>> True $res38 = $r->type('new_bikes'); echo $res38 . PHP_EOL; // >>> 'string' try { $res39 = $r->lpush('new_bikes', 'bike:2', 'bike:3'); // >>> redis.exceptions.ResponseError: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } catch (\Predis\Response\ServerException $e) { echo $e->getMessage() . PHP_EOL; } $r->del('bikes:repairs'); $res36 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $res40 = $r->exists('bikes:repairs'); echo $res40 . PHP_EOL; // >>> 1 $res41 = $r->lpop('bikes:repairs'); echo $res41 . PHP_EOL; // >>> 'bike:3' $res42 = $r->lpop('bikes:repairs'); echo $res42 . PHP_EOL; // >>> 'bike:2' $res43 = $r->lpop('bikes:repairs'); echo $res43 . PHP_EOL; // >>> 'bike:1' $res44 = $r->exists('bikes:repairs'); echo $res44 . PHP_EOL; // >>> False $res45 = $r->del('bikes:repairs'); echo $res45 . PHP_EOL; // >>> 0 $res46 = $r->llen('bikes:repairs'); echo $res46 . PHP_EOL; // >>> 0 $res47 = $r->lpop('bikes:repairs'); echo $res47 . PHP_EOL; // >>> None $res48 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res48 . PHP_EOL; // >>> 5 $res49 = $r->ltrim('bikes:repairs', 0, 2); echo $res49 . PHP_EOL; // >>> True $res50 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res50) . PHP_EOL; // >>> ['bike:5', 'bike:4', 'bike:3'] } } -
To limit the length of a list you can call
LTRIM:Capped lists: Use LTRIM to keep only a specific range of elements when you need to maintain a fixed-size list> DEL bikes:repairs (integer) 1 > RPUSH bikes:repairs bike:1 bike:2 bike:3 bike:4 bike:5 (integer) 5 > LTRIM bikes:repairs 0 2 OK > LRANGE bikes:repairs 0 -1 1) "bike:1" 2) "bike:2" 3) "bike:3"""" Code samples for List doc pages: https://redis.io/docs/latest/develop/data-types/lists/ """ import redis r = redis.Redis(decode_responses=True) res1 = r.lpush("bikes:repairs", "bike:1") print(res1) # >>> 1 res2 = r.lpush("bikes:repairs", "bike:2") print(res2) # >>> 2 res3 = r.rpop("bikes:repairs") print(res3) # >>> bike:1 res4 = r.rpop("bikes:repairs") print(res4) # >>> bike:2 res5 = r.lpush("bikes:repairs", "bike:1") print(res5) # >>> 1 res6 = r.lpush("bikes:repairs", "bike:2") print(res6) # >>> 2 res7 = r.lpop("bikes:repairs") print(res7) # >>> bike:2 res8 = r.lpop("bikes:repairs") print(res8) # >>> bike:1 res9 = r.llen("bikes:repairs") print(res9) # >>> 0 res10 = r.lpush("bikes:repairs", "bike:1") print(res10) # >>> 1 res11 = r.lpush("bikes:repairs", "bike:2") print(res11) # >>> 2 res12 = r.lmove("bikes:repairs", "bikes:finished", "LEFT", "LEFT") print(res12) # >>> 'bike:2' res13 = r.lrange("bikes:repairs", 0, -1) print(res13) # >>> ['bike:1'] res14 = r.lrange("bikes:finished", 0, -1) print(res14) # >>> ['bike:2'] r.delete("bikes:repairs") res15 = r.rpush("bikes:repairs", "bike:1") print(res15) # >>> 1 res16 = r.rpush("bikes:repairs", "bike:2") print(res16) # >>> 2 res17 = r.lpush("bikes:repairs", "bike:important_bike") print(res17) # >>> 3 res18 = r.lrange("bikes:repairs", 0, -1) print(res18) # >>> ['bike:important_bike', 'bike:1', 'bike:2'] r.delete("bikes:repairs") res19 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res19) # >>> 3 res20 = r.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike") print(res20) # >>> 5 res21 = r.lrange("bikes:repairs", 0, -1) print( res21 ) # >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... r.delete("bikes:repairs") res22 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res22) # >>> 3 res23 = r.rpop("bikes:repairs") print(res23) # >>> 'bike:3' res24 = r.lpop("bikes:repairs") print(res24) # >>> 'bike:1' res25 = r.rpop("bikes:repairs") print(res25) # >>> 'bike:2' res26 = r.rpop("bikes:repairs") print(res26) # >>> None res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", 0, 2) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:1', 'bike:2', 'bike:3'] r.delete("bikes:repairs") res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res27) # >>> 5 res28 = r.ltrim("bikes:repairs", -3, -1) print(res28) # >>> True res29 = r.lrange("bikes:repairs", 0, -1) print(res29) # >>> ['bike:3', 'bike:4', 'bike:5'] r.delete("bikes:repairs") res31 = r.rpush("bikes:repairs", "bike:1", "bike:2") print(res31) # >>> 2 res32 = r.brpop("bikes:repairs", timeout=1) print(res32) # >>> ('bikes:repairs', 'bike:2') res33 = r.brpop("bikes:repairs", timeout=1) print(res33) # >>> ('bikes:repairs', 'bike:1') res34 = r.brpop("bikes:repairs", timeout=1) print(res34) # >>> None res35 = r.delete("new_bikes") print(res35) # >>> 0 res36 = r.lpush("new_bikes", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 r.delete("new_bikes") res37 = r.set("new_bikes", "bike:1") print(res37) # >>> True res38 = r.type("new_bikes") print(res38) # >>> 'string' try: res39 = r.lpush("new_bikes", "bike:2", "bike:3") # >>> redis.exceptions.ResponseError: # >>> WRONGTYPE Operation against a key holding the wrong kind of value except redis.exceptions.ResponseError as e: print(e) r.delete("bikes:repairs") r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") print(res36) # >>> 3 res40 = r.exists("bikes:repairs") print(res40) # >>> 1 res41 = r.lpop("bikes:repairs") print(res41) # >>> 'bike:3' res42 = r.lpop("bikes:repairs") print(res42) # >>> 'bike:2' res43 = r.lpop("bikes:repairs") print(res43) # >>> 'bike:1' res44 = r.exists("bikes:repairs") print(res44) # >>> False r.delete("bikes:repairs") res45 = r.delete("bikes:repairs") print(res45) # >>> 0 res46 = r.llen("bikes:repairs") print(res46) # >>> 0 res47 = r.lpop("bikes:repairs") print(res47) # >>> None r.delete("bikes:repairs") res48 = r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5") print(res48) # >>> 5 res49 = r.ltrim("bikes:repairs", 0, 2) print(res49) # >>> True res50 = r.lrange("bikes:repairs", 0, -1) print(res50) # >>> ['bike:5', 'bike:4', 'bike:3']import { createClient } from 'redis'; const client = createClient(); await client.connect(); const res1 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res1); // 1 const res2 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res2); // 2 const res3 = await client.rPop('bikes:repairs'); console.log(res3); // bike:1 const res4 = await client.rPop('bikes:repairs'); console.log(res4); // bike:2 const res5 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res5); // 1 const res6 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res6); // 2 const res7 = await client.lPop('bikes:repairs'); console.log(res7); // bike:2 const res8 = await client.lPop('bikes:repairs'); console.log(res8); // bike:1 const res9 = await client.lLen('bikes:repairs'); console.log(res9); // 0 const res10 = await client.lPush('bikes:repairs', 'bike:1'); console.log(res10); // 1 const res11 = await client.lPush('bikes:repairs', 'bike:2'); console.log(res11); // 2 const res12 = await client.lMove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); console.log(res12); // 'bike:2' const res13 = await client.lRange('bikes:repairs', 0, -1); console.log(res13); // ['bike:1'] const res14 = await client.lRange('bikes:finished', 0, -1); console.log(res14); // ['bike:2'] await client.del('bikes:repairs'); const res15 = await client.rPush('bikes:repairs', 'bike:1'); console.log(res15); // 1 const res16 = await client.rPush('bikes:repairs', 'bike:2'); console.log(res16); // 2 const res17 = await client.lPush('bikes:repairs', 'bike:important_bike'); console.log(res17); // 3 const res18 = await client.lRange('bikes:repairs', 0, -1); console.log(res18); // ['bike:important_bike', 'bike:1', 'bike:2'] await client.del('bikes:repairs'); const res19 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res19); // 3 const res20 = await client.lPush( 'bikes:repairs', ['bike:important_bike', 'bike:very_important_bike'] ); console.log(res20); // 5 const res21 = await client.lRange('bikes:repairs', 0, -1); console.log(res21); // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3'] await client.del('bikes:repairs'); const res22 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res22); // 3 const res23 = await client.rPop('bikes:repairs'); console.log(res23); // 'bike:3' const res24 = await client.lPop('bikes:repairs'); console.log(res24); // 'bike:1' const res25 = await client.rPop('bikes:repairs'); console.log(res25); // 'bike:2' const res26 = await client.rPop('bikes:repairs'); console.log(res26); // null const res27 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27); // 5 const res28 = await client.lTrim('bikes:repairs', 0, 2); console.log(res28); // OK const res29 = await client.lRange('bikes:repairs', 0, -1); console.log(res29); // ['bike:5', 'bike:4', 'bike:3'] await client.del('bikes:repairs'); const res27eol = await client.rPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res27eol); // 5 const res28eol = await client.lTrim('bikes:repairs', -3, -1); console.log(res28eol); // 'OK' const res29eol = await client.lRange('bikes:repairs', 0, -1); console.log(res29eol); // ['bike:3', 'bike:4', 'bike:5'] await client.del('bikes:repairs'); const res31 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2']); console.log(res31); // 2 const res32 = await client.brPop('bikes:repairs', 1); console.log(res32); // { key: 'bikes:repairs', element: 'bike:2' } const res33 = await client.brPop('bikes:repairs', 1); console.log(res33); // { key: 'bikes:repairs', element: 'bike:1' } const res34 = await client.brPop('bikes:repairs', 1); console.log(res34); // null const res35 = await client.del('new_bikes'); console.log(res35); // 0 const res36 = await client.lPush('new_bikes', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 await client.del('new_bikes'); const res37 = await client.set('new_bikes', 'bike:1'); console.log(res37); // 'OK' const res38 = await client.type('new_bikes'); console.log(res38); // 'string' try { const res39 = await client.lPush('new_bikes', 'bike:2', 'bike:3'); // redis.exceptions.ResponseError: // [SimpleError: WRONGTYPE Operation against a key holding the wrong kind of value] } catch(e){ console.log(e); } await client.del('bikes:repairs'); await client.lPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']); console.log(res36); // 3 const res40 = await client.exists('bikes:repairs') console.log(res40); // 1 const res41 = await client.lPop('bikes:repairs'); console.log(res41); // 'bike:3' const res42 = await client.lPop('bikes:repairs'); console.log(res42); // 'bike:2' const res43 = await client.lPop('bikes:repairs'); console.log(res43); // 'bike:1' const res44 = await client.exists('bikes:repairs'); console.log(res44); // 0 await client.del('bikes:repairs'); const res45 = await client.del('bikes:repairs'); console.log(res45); // 0 const res46 = await client.lLen('bikes:repairs'); console.log(res46); // 0 const res47 = await client.lPop('bikes:repairs'); console.log(res47); // null await client.del('bikes:repairs'); const res48 = await client.lPush( 'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'] ); console.log(res48); // 5 const res49 = await client.lTrim('bikes:repairs', 0, 2); console.log(res49); // 'OK' const res50 = await client.lRange('bikes:repairs', 0, -1); console.log(res50); // ['bike:5', 'bike:4', 'bike:3'] await client.close();import redis.clients.jedis.UnifiedJedis; import redis.clients.jedis.args.ListDirection; import java.util.List; public class ListExample { public void run() { UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379"); long res1 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res1); // >>> 1 long res2 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res2); // >>> 2 String res3 = jedis.rpop("bikes:repairs"); System.out.println(res3); // >>> bike:1 String res4 = jedis.rpop("bikes:repairs"); System.out.println(res4); // >>> bike:2 long res5 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res5); // >>> 1 long res6 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res6); // >>> 2 String res7 = jedis.lpop("bikes:repairs"); System.out.println(res7); // >>> bike:2 String res8 = jedis.lpop("bikes:repairs"); System.out.println(res8); // >>> bike:1 long res9 = jedis.llen("bikes:repairs"); System.out.println(res9); // >>> 0 long res10 = jedis.lpush("bikes:repairs", "bike:1"); System.out.println(res10); // >>> 1 long res11 = jedis.lpush("bikes:repairs", "bike:2"); System.out.println(res11); // >>> 2 String res12 = jedis.lmove("bikes:repairs", "bikes:finished", ListDirection.LEFT, ListDirection.LEFT); System.out.println(res12); // >>> bike:2 List<String> res13 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res13); // >>> [bike:1] List<String> res14 = jedis.lrange("bikes:finished", 0, -1); System.out.println(res14); // >>> [bike:2] jedis.del("bikes:repairs"); long res15 = jedis.rpush("bikes:repairs", "bike:1"); System.out.println(res15); // >>> 1 long res16 = jedis.rpush("bikes:repairs", "bike:2"); System.out.println(res16); // >>> 2 long res17 = jedis.lpush("bikes:repairs", "bike:important_bike"); System.out.println(res17); // >>> 3 List<String> res18 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res18); // >>> [bike:important_bike, bike:1, bike:2] jedis.del("bikes:repairs"); long res19 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res19); // >>> 3 long res20 = jedis.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); System.out.println(res20); // >>> 5 List<String> res21 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res21); // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); long res22 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res22); // >>> 3 String res23 = jedis.rpop("bikes:repairs"); System.out.println(res23); // >>> bike:3 String res24 = jedis.lpop("bikes:repairs"); System.out.println(res24); // >>> bike:1 String res25 = jedis.rpop("bikes:repairs"); System.out.println(res25); // >>> bike:2 String res26 = jedis.rpop("bikes:repairs"); System.out.println(res26); // >>> null long res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 String res28 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res28); // >>> OK List<String> res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:1, bike:2, bike:3] jedis.del("bikes:repairs"); res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res27); // >>> 5 res28 = jedis.ltrim("bikes:repairs", -3, -1); System.out.println(res2); // >>> OK res29 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res29); // >>> [bike:3, bike:4, bike:5] jedis.del("bikes:repairs"); long res31 = jedis.rpush("bikes:repairs", "bike:1", "bike:2"); System.out.println(res31); // >>> 2 List<String> res32 = jedis.brpop(1, "bikes:repairs"); System.out.println(res32); // >>> (bikes:repairs, bike:2) List<String> res33 = jedis.brpop(1,"bikes:repairs"); System.out.println(res33); // >>> (bikes:repairs, bike:1) List<String> res34 = jedis.brpop(1,"bikes:repairs"); System.out.println(res34); // >>> null jedis.del("new_bikes"); long res36 = jedis.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 jedis.del("new_bikes"); String res37 = jedis.set("new_bikes", "bike:1"); System.out.println(res37); // >>> OK String res38 = jedis.type("new_bikes"); System.out.println(res38); // >>> string try { long res39 = jedis.lpush("new_bikes", "bike:2", "bike:3"); } catch (Exception e) { e.printStackTrace(); // >>> redis.clients.jedis.exceptions.JedisDataException: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } jedis.del("bikes:repairs"); jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3"); System.out.println(res36); // >>> 3 boolean res40 = jedis.exists("bikes:repairs"); System.out.println(res40); // >>> true String res41 = jedis.lpop("bikes:repairs"); System.out.println(res41); // >>> bike:3 String res42 = jedis.lpop("bikes:repairs"); System.out.println(res42); // >>> bike:2 String res43 = jedis.lpop("bikes:repairs"); System.out.println(res43); // >>> bike:1 boolean res44 = jedis.exists("bikes:repairs"); System.out.println(res44); // >>> false jedis.del("bikes:repairs"); long res46 = jedis.llen("bikes:repairs"); System.out.println(res46); // >>> 0 String res47 = jedis.lpop("bikes:repairs"); System.out.println(res47); // >>> null jedis.del("bikes:repairs"); long res48 = jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5"); System.out.println(res48); // >>> 5 String res49 = jedis.ltrim("bikes:repairs", 0, 2); System.out.println(res49); // >>> OK List<String> res50 = jedis.lrange("bikes:repairs", 0, -1); System.out.println(res50); // >>> [bike:5, bike:4, bike:3] jedis.close(); } }package io.redis.examples.async; import io.lettuce.core.*; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.StatefulRedisConnection; import java.util.concurrent.CompletableFuture; public class ListExample { public void run() { RedisClient redisClient = RedisClient.create("redis://localhost:6379"); try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> asyncCommands = connection.async(); CompletableFuture<Void> queue = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res1 -> { System.out.println(res1); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res2 -> { System.out.println(res2); // >>> 2 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res3 -> { System.out.println(res3); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:2 .toCompletableFuture(); queue.join(); CompletableFuture<Void> stack = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res4 -> { System.out.println(res4); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res5 -> { System.out.println(res5); // >>> 2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res6 -> { System.out.println(res6); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> bike:1 .toCompletableFuture(); stack.join(); CompletableFuture<Void> llen = asyncCommands.llen("bikes:repairs") .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); llen.join(); CompletableFuture<Void> lmovelrange = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res7 -> { System.out.println(res7); // >>> 1 return asyncCommands.lpush("bikes:repairs", "bike:2"); }).thenCompose(res8 -> { System.out.println(res8); // >>> 2 return asyncCommands.lmove("bikes:repairs", "bikes:finished", LMoveArgs.Builder.leftLeft()); }).thenCompose(res9 -> { System.out.println(res9); // >>> bike:2 return asyncCommands.lrange("bikes:repairs", 0, -1); }).thenCompose(res10 -> { System.out.println(res10); // >>> [bike:1] return asyncCommands.lrange("bikes:finished", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:2] .toCompletableFuture(); lmovelrange.join(); CompletableFuture<Void> lpushrpush = asyncCommands.rpush("bikes:repairs", "bike:1").thenCompose(res11 -> { System.out.println(res11); // >>> 1 return asyncCommands.rpush("bikes:repairs", "bike:2"); }).thenCompose(res12 -> { System.out.println(res12); // >>> 2 return asyncCommands.lpush("bikes:repairs", "bike:important_bike"); }).thenCompose(res13 -> { System.out.println(res13); // >>> 3 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:important_bike, bike:1, bike:2] .toCompletableFuture(); lpushrpush.join(); CompletableFuture<Void> variadic = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res14 -> { System.out.println(res14); // >>> 3 return asyncCommands.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike"); }).thenCompose(res15 -> { System.out.println(res15); // >>> 5 return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3] .toCompletableFuture(); variadic.join(); CompletableFuture<Void> lpoprpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res16 -> { System.out.println(res16); // >>> 3 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res17 -> { System.out.println(res17); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res18 -> { System.out.println(res18); // >>> bike:1 return asyncCommands.rpop("bikes:repairs"); }).thenCompose(res19 -> { System.out.println(res19); // >>> bike:2 return asyncCommands.rpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); lpoprpop.join(); CompletableFuture<Void> ltrim = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res20 -> { System.out.println(res20); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res21 -> { System.out.println(res21); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim.join(); CompletableFuture<Void> ltrimendoflist = asyncCommands .rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res22 -> { System.out.println(res22); // >>> 5 return asyncCommands.ltrim("bikes:repairs", -3, -1); }).thenCompose(res23 -> { System.out.println(res23); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:3, bike:4, bike:5] .toCompletableFuture(); ltrimendoflist.join(); CompletableFuture<Void> brpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2").thenCompose(res24 -> { System.out.println(res24); // >>> 2 return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res25 -> { System.out.println(res25); // >>> KeyValue[bikes:repairs, bike:2] return asyncCommands.brpop(1, "bikes:repairs"); }).thenCompose(res26 -> { System.out.println(res26); // >>> KeyValue[bikes:repairs, bike:1] return asyncCommands.brpop(1, "bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); brpop.join(); CompletableFuture<Void> rule1 = asyncCommands.del("new_bikes").thenCompose(res27 -> { System.out.println(res27); // >>> 0 return asyncCommands.lpush("new_bikes", "bike:1", "bike:2", "bike:3"); }) .thenAccept(System.out::println) // >>> 3 .toCompletableFuture(); rule1.join(); CompletableFuture<Void> rule11 = asyncCommands.set("new_bikes_string", "bike:1").thenCompose(res28 -> { System.out.println(res28); // >>> OK return asyncCommands.type("new_bikes_string"); }).thenCompose(res29 -> { System.out.println(res29); // >>> string return asyncCommands.lpush("new_bikes_string", "bike:2", "bike:3"); }).handle((res, ex) -> { if (ex == null) { return res; } else { System.out.println(ex); // >>> java.util.concurrent.CompletionException: // >>> io.lettuce.core.RedisCommandExecutionException: // >>> WRONGTYPE Operation against a key holding the wrong // >>> kind of value return -1L; } }) .thenAccept(System.out::println) // >>> -1 .toCompletableFuture(); rule11.join(); CompletableFuture<Void> rule2 = asyncCommands.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3") .thenCompose(res30 -> { System.out.println(res30); // >>> 3 return asyncCommands.exists("bikes:repairs"); }).thenCompose(res31 -> { System.out.println(res31); // >>> 1 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res32 -> { System.out.println(res32); // >>> bike:3 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res33 -> { System.out.println(res33); // >>> bike:2 return asyncCommands.lpop("bikes:repairs"); }).thenCompose(res34 -> { System.out.println(res34); // >>> bike:1 return asyncCommands.exists("bikes:repairs"); }) .thenAccept(System.out::println) // >>> 0 .toCompletableFuture(); rule2.join(); CompletableFuture<Void> rule3 = asyncCommands.del("bikes:repairs").thenCompose(res35 -> { System.out.println(res35); // >>> 0 return asyncCommands.llen("bikes:repairs"); }).thenCompose(res36 -> { System.out.println(res36); // >>> 0 return asyncCommands.lpop("bikes:repairs"); }) .thenAccept(System.out::println) // >>> null .toCompletableFuture(); rule3.join(); CompletableFuture<Void> ltrim1 = asyncCommands .lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res37 -> { System.out.println(res37); // >>> 5 return asyncCommands.ltrim("bikes:repairs", 0, 2); }).thenCompose(res38 -> { System.out.println(res38); // >>> OK return asyncCommands.lrange("bikes:repairs", 0, -1); }) .thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3] .toCompletableFuture(); ltrim1.join(); } finally { redisClient.shutdown(); } } }package example_commands_test import ( "context" "fmt" "github.com/redis/go-redis/v9" ) func ExampleClient_queue() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res1, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res1) // >>> 1 res2, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res2) // >>> 2 res3, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res3) // >>> bike:1 res4, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res4) // >>> bike:2 } func ExampleClient_stack() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res5, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res5) // >>> 1 res6, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res6) // >>> 2 res7, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res7) // >>> bike:2 res8, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res8) // >>> bike:1 } func ExampleClient_llen() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res9, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res9) // >>> 0 } func ExampleClient_lmove_lrange() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res10, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res10) // >>> 1 res11, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res11) // >>> 2 res12, err := rdb.LMove(ctx, "bikes:repairs", "bikes:finished", "LEFT", "LEFT").Result() if err != nil { panic(err) } fmt.Println(res12) // >>> bike:2 res13, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res13) // >>> [bike:1] res14, err := rdb.LRange(ctx, "bikes:finished", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res14) // >>> [bike:2] } func ExampleClient_lpush_rpush() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res15, err := rdb.RPush(ctx, "bikes:repairs", "bike:1").Result() if err != nil { panic(err) } fmt.Println(res15) // >>> 1 res16, err := rdb.RPush(ctx, "bikes:repairs", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res16) // >>> 2 res17, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike").Result() if err != nil { panic(err) } fmt.Println(res17) // >>> 3 res18, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res18) // >>> [bike:important_bike bike:1 bike:2] } func ExampleClient_variadic() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res19, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res19) // >>> 3 res20, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike", "bike:very_important_bike").Result() if err != nil { panic(err) } fmt.Println(res20) // >>> 5 res21, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res21) // >>> [bike:very_important_bike bike:important_bike bike:1 bike:2 bike:3] } func ExampleClient_lpop_rpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res22, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res22) // >>> 3 res23, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res23) // >>> bike:3 res24, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res24) // >>> bike:1 res25, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res25) // >>> bike:2 res26, err := rdb.RPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res26) // >>> <empty string> } func ExampleClient_ltrim() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res27, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res27) // >>> 5 res28, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res28) // >>> OK res29, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res29) // >>> [bike:1 bike:2 bike:3] } func ExampleClient_ltrim_end_of_list() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res30, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res30) // >>> 5 res31, err := rdb.LTrim(ctx, "bikes:repairs", -3, -1).Result() if err != nil { panic(err) } fmt.Println(res31) // >>> OK res32, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res32) // >>> [bike:3 bike:4 bike:5] } func ExampleClient_brpop() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res33, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2").Result() if err != nil { panic(err) } fmt.Println(res33) // >>> 2 res34, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res34) // >>> [bikes:repairs bike:2] res35, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res35) // >>> [bikes:repairs bike:1] res36, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res36) // >>> [] } func ExampleClient_rule1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) res37, err := rdb.Del(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res37) // >>> 0 res38, err := rdb.LPush(ctx, "new_bikes", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res38) // >>> 3 } func ExampleClient_rule11() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "new_bikes") res39, err := rdb.Set(ctx, "new_bikes", "bike:1", 0).Result() if err != nil { panic(err) } fmt.Println(res39) // >>> OK res40, err := rdb.Type(ctx, "new_bikes").Result() if err != nil { panic(err) } fmt.Println(res40) // >>> string res41, err := rdb.LPush(ctx, "new_bikes", "bike:2", "bike:3").Result() if err != nil { fmt.Println(err) // >>> WRONGTYPE Operation against a key holding the wrong kind of value } fmt.Println(res41) } func ExampleClient_rule2() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res42, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result() if err != nil { panic(err) } fmt.Println(res42) // >>> 3 res43, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res43) // >>> 1 res44, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res44) // >>> bike:3 res45, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res45) // >>> bike:2 res46, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res46) // >>> bike:1 res47, err := rdb.Exists(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res47) // >>> 0 } func ExampleClient_rule3() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res48, err := rdb.Del(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res48) // >>> 0 res49, err := rdb.LLen(ctx, "bikes:repairs").Result() if err != nil { panic(err) } fmt.Println(res49) // >>> 0 res50, err := rdb.LPop(ctx, "bikes:repairs").Result() if err != nil { fmt.Println(err) // >>> redis: nil } fmt.Println(res50) // >>> <empty string> } func ExampleClient_ltrim1() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password docs DB: 0, // use default DB }) rdb.Del(ctx, "bikes:repairs") res51, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result() if err != nil { panic(err) } fmt.Println(res51) // >>> 5 res52, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result() if err != nil { panic(err) } fmt.Println(res52) // >>> OK res53, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result() if err != nil { panic(err) } fmt.Println(res53) // >>> [bike:5 bike:4 bike:3] }using NRedisStack; using StackExchange.Redis; public class ListExample { public void Run() { var muxer = ConnectionMultiplexer.Connect("localhost:6379"); var db = muxer.GetDatabase(); long res1 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res1); // >>> 1 long res2 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res2); // >>> 2 RedisValue res3 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res3); // >>> "bike:1" RedisValue res4 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res4); // >>> "bike:2" long res5 = db.ListLeftPush("bikes:repairs", "bike:1"); Console.WriteLine(res5); // >>> 1 long res6 = db.ListLeftPush("bikes:repairs", "bike:2"); Console.WriteLine(res6); // >>> 2 RedisValue res7 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res7); // >>> "bike:2" RedisValue res8 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res8); // >>> "bike:1" long res9 = db.ListLength("bikes:repairs"); Console.WriteLine(res9); // >>> 0 long res10 = db.ListLeftPush("{bikes}:repairs", "bike:1"); Console.WriteLine(res10); // >>> 1 long res11 = db.ListLeftPush("{bikes}:repairs", "bike:2"); Console.WriteLine(res11); // >>> 2 RedisValue res12 = db.ListMove("{bikes}:repairs", "{bikes}:finished", ListSide.Left, ListSide.Left); Console.Write(res12); // >>> "bike:2" RedisValue[] res13 = db.ListRange("{bikes}:repairs", 0, -1); Console.WriteLine(string.Join(", ", res13)); // >>> "bike:1" RedisValue[] res14 = db.ListRange("{bikes}:finished", 0, -1); Console.WriteLine(string.Join(", ", res14)); // >>> "bike:2" db.KeyDelete("bikes:repairs"); long res15 = db.ListRightPush("bikes:repairs", "bike:1"); Console.WriteLine(res15); // >>> 1 long res16 = db.ListRightPush("bikes:repairs", "bike:2"); Console.WriteLine(res16); // >>> 2 long res17 = db.ListLeftPush("bikes:repairs", "bike:important_bike"); Console.WriteLine(res17); // >>> 3 RedisValue[] res18 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res18)); // >>> "bike:important_bike, bike:1, bike:2" db.KeyDelete("bikes:repairs"); long res19 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res19); // >>> 3 long res20 = db.ListLeftPush("bikes:repairs", ["bike:important_bike", "bike:very_important_bike"]); Console.WriteLine(res20); // >>> 5 RedisValue[] res21 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res21)); // >>> "bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3" db.KeyDelete("bikes:repairs"); long res22 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res22); // >>> 3 RedisValue res23 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res23); // >>> "bike:3" RedisValue res24 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res24); // >>> "bike:1" RedisValue res25 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res25); // >>> "bike:2" RedisValue res26 = db.ListRightPop("bikes:repairs"); Console.WriteLine(res26); // >>> <Empty string> long res27 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res27); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res28 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res28)); // "bike:5, bike:4, bike:3" db.KeyDelete("bikes:repairs"); long res29 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res29); // >>> 5 db.ListTrim("bikes:repairs", -3, -1); RedisValue[] res30 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res30)); // >>> "bike:3, bike:4, bike:5" db.KeyDelete("bikes:repairs"); long res31 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2"]); Console.WriteLine(res31); // >>> 2 Tuple<RedisKey, RedisValue>? res32 = db.BRPop(["bikes:repairs"], 1); if (res32 != null) Console.WriteLine($"{res32.Item1} -> {res32.Item2}"); // >>> "bikes:repairs -> bike:2" Tuple<RedisKey, RedisValue>? res33 = db.BRPop(["bikes:repairs"], 1); if (res33 != null) Console.WriteLine($"{res33.Item1} -> {res33.Item2}"); // >>> "bikes:repairs -> bike:1" Tuple<RedisKey, RedisValue>? res34 = db.BRPop(["bikes:repairs"], 1); Console.WriteLine(res34); // >>> "Null" db.KeyDelete("new_bikes"); long res36 = db.ListRightPush("new_bikes", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res36); // >>> 3 db.KeyDelete("new_bikes"); bool res37 = db.StringSet("new_bikes", "bike:1"); Console.WriteLine(res37); // >>> True RedisType res38 = db.KeyType("new_bikes"); Console.WriteLine(res38); // >>> RedisType.String try { long res39 = db.ListRightPush("new_bikes", ["bike:2", "bike:3"]); } catch (Exception e) { Console.WriteLine(e); } db.KeyDelete("bikes:repairs"); long res40 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]); Console.WriteLine(res40); // >>> 3 bool res41 = db.KeyExists("bikes:repairs"); Console.WriteLine(res41); // >>> True RedisValue res42 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res42); // >>> "bike:3" RedisValue res43 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res43); // >>> "bike:2" RedisValue res44 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res44); // >>> "bike:1" bool res45 = db.KeyExists("bikes:repairs"); Console.WriteLine(res45); // >>> False db.KeyDelete("bikes:repairs"); long res47 = db.ListLength("bikes:repairs"); Console.WriteLine(res47); // >>> 0 RedisValue res48 = db.ListLeftPop("bikes:repairs"); Console.WriteLine(res48); // >>> Null db.KeyDelete("bikes:repairs"); long res49 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]); Console.WriteLine(res49); // >>> 5 db.ListTrim("bikes:repairs", 0, 2); RedisValue[] res50 = db.ListRange("bikes:repairs", 0, -1); Console.WriteLine(string.Join(", ", res50)); // >>> "bike:5, bike:4, bike:3" } }<?php require 'vendor/autoload.php'; use Predis\Client as PredisClient; class DtListTest { public function testDtList() { $r = new PredisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'database' => 0, ]); $res1 = $r->lpush('bikes:repairs', 'bike:1'); echo $res1 . PHP_EOL; // >>> 1 $res2 = $r->lpush('bikes:repairs', 'bike:2'); echo $res2 . PHP_EOL; // >>> 2 $res3 = $r->rpop('bikes:repairs'); echo $res3 . PHP_EOL; // >>> bike:1 $res4 = $r->rpop('bikes:repairs'); echo $res4 . PHP_EOL; // >>> bike:2 $res5 = $r->lpush('bikes:repairs', 'bike:1'); echo $res5 . PHP_EOL; // >>> 1 $res6 = $r->lpush('bikes:repairs', 'bike:2'); echo $res6 . PHP_EOL; // >>> 2 $res7 = $r->lpop('bikes:repairs'); echo $res7 . PHP_EOL; // >>> bike:2 $res8 = $r->lpop('bikes:repairs'); echo $res8 . PHP_EOL; // >>> bike:1 $res9 = $r->llen('bikes:repairs'); echo $res9 . PHP_EOL; // >>> 0 $res10 = $r->lpush('bikes:repairs', 'bike:1'); echo $res10 . PHP_EOL; // >>> 1 $res11 = $r->lpush('bikes:repairs', 'bike:2'); echo $res11 . PHP_EOL; // >>> 2 $res12 = $r->lmove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT'); echo $res12 . PHP_EOL; // >>> 'bike:2' $res13 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res13) . PHP_EOL; // >>> ['bike:1'] $res14 = $r->lrange('bikes:finished', 0, -1); echo json_encode($res14) . PHP_EOL; // >>> ['bike:2'] $r->del('bikes:repairs'); $res15 = $r->rpush('bikes:repairs', 'bike:1'); echo $res15 . PHP_EOL; // >>> 1 $res16 = $r->rpush('bikes:repairs', 'bike:2'); echo $res16 . PHP_EOL; // >>> 2 $res17 = $r->lpush('bikes:repairs', 'bike:important_bike'); echo $res17 . PHP_EOL; // >>> 3 $res18 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res18) . PHP_EOL; // >>> ['bike:important_bike', 'bike:1', 'bike:2'] $r->del('bikes:repairs'); $res19 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res19 . PHP_EOL; // >>> 3 $res20 = $r->lpush('bikes:repairs', 'bike:important_bike', 'bike:very_important_bike'); echo $res20 . PHP_EOL; // >>> 5 $res21 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res21) . PHP_EOL; // >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ... $r->del('bikes:repairs'); $res22 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res22 . PHP_EOL; // >>> 3 $res23 = $r->rpop('bikes:repairs'); echo $res23 . PHP_EOL; // >>> 'bike:3' $res24 = $r->lpop('bikes:repairs'); echo $res24 . PHP_EOL; // >>> 'bike:1' $res25 = $r->rpop('bikes:repairs'); echo $res25 . PHP_EOL; // >>> 'bike:2' $res26 = $r->rpop('bikes:repairs'); echo $res26 . PHP_EOL; // >>> None $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', 0, 2); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:1', 'bike:2', 'bike:3'] $r->del('bikes:repairs'); $res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res27 . PHP_EOL; // >>> 5 $res28 = $r->ltrim('bikes:repairs', -3, -1); echo $res28 . PHP_EOL; // >>> True $res29 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res29) . PHP_EOL; // >>> ['bike:3', 'bike:4', 'bike:5'] $r->del('bikes:repairs'); $res31 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2'); echo $res31 . PHP_EOL; // >>> 2 $res32 = $r->brpop('bikes:repairs', 1); echo json_encode($res32) . PHP_EOL; // >>> ['bikes:repairs', 'bike:2'] $res33 = $r->brpop('bikes:repairs', 1); echo json_encode($res33) . PHP_EOL; // >>> ['bikes:repairs', 'bike:1'] $res34 = $r->brpop('bikes:repairs', 1); echo json_encode($res34) . PHP_EOL; // >>> None $res35 = $r->del('new_bikes'); echo $res35 . PHP_EOL; // >>> 0 $res36 = $r->lpush('new_bikes', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $r->del('new_bikes'); $res37 = $r->set('new_bikes', 'bike:1'); echo $res37 . PHP_EOL; // >>> True $res38 = $r->type('new_bikes'); echo $res38 . PHP_EOL; // >>> 'string' try { $res39 = $r->lpush('new_bikes', 'bike:2', 'bike:3'); // >>> redis.exceptions.ResponseError: // >>> WRONGTYPE Operation against a key holding the wrong kind of value } catch (\Predis\Response\ServerException $e) { echo $e->getMessage() . PHP_EOL; } $r->del('bikes:repairs'); $res36 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3'); echo $res36 . PHP_EOL; // >>> 3 $res40 = $r->exists('bikes:repairs'); echo $res40 . PHP_EOL; // >>> 1 $res41 = $r->lpop('bikes:repairs'); echo $res41 . PHP_EOL; // >>> 'bike:3' $res42 = $r->lpop('bikes:repairs'); echo $res42 . PHP_EOL; // >>> 'bike:2' $res43 = $r->lpop('bikes:repairs'); echo $res43 . PHP_EOL; // >>> 'bike:1' $res44 = $r->exists('bikes:repairs'); echo $res44 . PHP_EOL; // >>> False $res45 = $r->del('bikes:repairs'); echo $res45 . PHP_EOL; // >>> 0 $res46 = $r->llen('bikes:repairs'); echo $res46 . PHP_EOL; // >>> 0 $res47 = $r->lpop('bikes:repairs'); echo $res47 . PHP_EOL; // >>> None $res48 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5'); echo $res48 . PHP_EOL; // >>> 5 $res49 = $r->ltrim('bikes:repairs', 0, 2); echo $res49 . PHP_EOL; // >>> True $res50 = $r->lrange('bikes:repairs', 0, -1); echo json_encode($res50) . PHP_EOL; // >>> ['bike:5', 'bike:4', 'bike:3'] } }
What are Lists?
To explain the List data type it's better to start with a little bit of theory, as the term List is often used in an improper way by information technology folks. For instance "Python Lists" are not what the name may suggest (Linked Lists), but rather Arrays (the same data type is called Array in Ruby actually).
From a very general point of view a List is just a sequence of ordered elements: 10,20,1,2,3 is a list. But the properties of a List implemented using an Array are very different from the properties of a List implemented using a Linked List.
Redis lists are implemented via Linked Lists. This means that even if you have
millions of elements inside a list, the operation of adding a new element in
the head or in the tail of the list is performed in constant time. The speed of adding a
new element with the LPUSH command to the head of a list with ten
elements is the same as adding an element to the head of list with 10
million elements.
What's the downside? Accessing an element by index is very fast in lists implemented with an Array (constant time indexed access) and not so fast in lists implemented by linked lists (where the operation requires an amount of work proportional to the index of the accessed element).
Redis Lists are implemented with linked lists because for a database system it is crucial to be able to add elements to a very long list in a very fast way. Another strong advantage, as you'll see in a moment, is that Redis Lists can be taken at constant length in constant time.
When fast access to the middle of a large collection of elements is important, there is a different data structure that can be used, called sorted sets. Sorted sets are covered in the Sorted sets tutorial page.
First steps with Redis Lists
The LPUSH command adds a new element into a list, on the
left (at the head), while the RPUSH command adds a new
element into a list, on the right (at the tail). Finally the
LRANGE command extracts ranges of elements from lists:
> DEL bikes:repairs
(integer) 1
> RPUSH bikes:repairs bike:1
(integer) 1
> RPUSH bikes:repairs bike:2
(integer) 2
> LPUSH bikes:repairs bike:important_bike
(integer) 3
> LRANGE bikes:repairs 0 -1
1) "bike:important_bike"
2) "bike:1"
3) "bike:2""""
Code samples for List doc pages:
https://redis.io/docs/latest/develop/data-types/lists/
"""
import redis
r = redis.Redis(decode_responses=True)
res1 = r.lpush("bikes:repairs", "bike:1")
print(res1) # >>> 1
res2 = r.lpush("bikes:repairs", "bike:2")
print(res2) # >>> 2
res3 = r.rpop("bikes:repairs")
print(res3) # >>> bike:1
res4 = r.rpop("bikes:repairs")
print(res4) # >>> bike:2
res5 = r.lpush("bikes:repairs", "bike:1")
print(res5) # >>> 1
res6 = r.lpush("bikes:repairs", "bike:2")
print(res6) # >>> 2
res7 = r.lpop("bikes:repairs")
print(res7) # >>> bike:2
res8 = r.lpop("bikes:repairs")
print(res8) # >>> bike:1
res9 = r.llen("bikes:repairs")
print(res9) # >>> 0
res10 = r.lpush("bikes:repairs", "bike:1")
print(res10) # >>> 1
res11 = r.lpush("bikes:repairs", "bike:2")
print(res11) # >>> 2
res12 = r.lmove("bikes:repairs", "bikes:finished", "LEFT", "LEFT")
print(res12) # >>> 'bike:2'
res13 = r.lrange("bikes:repairs", 0, -1)
print(res13) # >>> ['bike:1']
res14 = r.lrange("bikes:finished", 0, -1)
print(res14) # >>> ['bike:2']
r.delete("bikes:repairs")
res15 = r.rpush("bikes:repairs", "bike:1")
print(res15) # >>> 1
res16 = r.rpush("bikes:repairs", "bike:2")
print(res16) # >>> 2
res17 = r.lpush("bikes:repairs", "bike:important_bike")
print(res17) # >>> 3
res18 = r.lrange("bikes:repairs", 0, -1)
print(res18) # >>> ['bike:important_bike', 'bike:1', 'bike:2']
r.delete("bikes:repairs")
res19 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res19) # >>> 3
res20 = r.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike")
print(res20) # >>> 5
res21 = r.lrange("bikes:repairs", 0, -1)
print(
res21
) # >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ...
r.delete("bikes:repairs")
res22 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res22) # >>> 3
res23 = r.rpop("bikes:repairs")
print(res23) # >>> 'bike:3'
res24 = r.lpop("bikes:repairs")
print(res24) # >>> 'bike:1'
res25 = r.rpop("bikes:repairs")
print(res25) # >>> 'bike:2'
res26 = r.rpop("bikes:repairs")
print(res26) # >>> None
res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res27) # >>> 5
res28 = r.ltrim("bikes:repairs", 0, 2)
print(res28) # >>> True
res29 = r.lrange("bikes:repairs", 0, -1)
print(res29) # >>> ['bike:1', 'bike:2', 'bike:3']
r.delete("bikes:repairs")
res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res27) # >>> 5
res28 = r.ltrim("bikes:repairs", -3, -1)
print(res28) # >>> True
res29 = r.lrange("bikes:repairs", 0, -1)
print(res29) # >>> ['bike:3', 'bike:4', 'bike:5']
r.delete("bikes:repairs")
res31 = r.rpush("bikes:repairs", "bike:1", "bike:2")
print(res31) # >>> 2
res32 = r.brpop("bikes:repairs", timeout=1)
print(res32) # >>> ('bikes:repairs', 'bike:2')
res33 = r.brpop("bikes:repairs", timeout=1)
print(res33) # >>> ('bikes:repairs', 'bike:1')
res34 = r.brpop("bikes:repairs", timeout=1)
print(res34) # >>> None
res35 = r.delete("new_bikes")
print(res35) # >>> 0
res36 = r.lpush("new_bikes", "bike:1", "bike:2", "bike:3")
print(res36) # >>> 3
r.delete("new_bikes")
res37 = r.set("new_bikes", "bike:1")
print(res37) # >>> True
res38 = r.type("new_bikes")
print(res38) # >>> 'string'
try:
res39 = r.lpush("new_bikes", "bike:2", "bike:3")
# >>> redis.exceptions.ResponseError:
# >>> WRONGTYPE Operation against a key holding the wrong kind of value
except redis.exceptions.ResponseError as e:
print(e)
r.delete("bikes:repairs")
r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res36) # >>> 3
res40 = r.exists("bikes:repairs")
print(res40) # >>> 1
res41 = r.lpop("bikes:repairs")
print(res41) # >>> 'bike:3'
res42 = r.lpop("bikes:repairs")
print(res42) # >>> 'bike:2'
res43 = r.lpop("bikes:repairs")
print(res43) # >>> 'bike:1'
res44 = r.exists("bikes:repairs")
print(res44) # >>> False
r.delete("bikes:repairs")
res45 = r.delete("bikes:repairs")
print(res45) # >>> 0
res46 = r.llen("bikes:repairs")
print(res46) # >>> 0
res47 = r.lpop("bikes:repairs")
print(res47) # >>> None
r.delete("bikes:repairs")
res48 = r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res48) # >>> 5
res49 = r.ltrim("bikes:repairs", 0, 2)
print(res49) # >>> True
res50 = r.lrange("bikes:repairs", 0, -1)
print(res50) # >>> ['bike:5', 'bike:4', 'bike:3']
import { createClient } from 'redis';
const client = createClient();
await client.connect();
const res1 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res1); // 1
const res2 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res2); // 2
const res3 = await client.rPop('bikes:repairs');
console.log(res3); // bike:1
const res4 = await client.rPop('bikes:repairs');
console.log(res4); // bike:2
const res5 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res5); // 1
const res6 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res6); // 2
const res7 = await client.lPop('bikes:repairs');
console.log(res7); // bike:2
const res8 = await client.lPop('bikes:repairs');
console.log(res8); // bike:1
const res9 = await client.lLen('bikes:repairs');
console.log(res9); // 0
const res10 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res10); // 1
const res11 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res11); // 2
const res12 = await client.lMove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT');
console.log(res12); // 'bike:2'
const res13 = await client.lRange('bikes:repairs', 0, -1);
console.log(res13); // ['bike:1']
const res14 = await client.lRange('bikes:finished', 0, -1);
console.log(res14); // ['bike:2']
await client.del('bikes:repairs');
const res15 = await client.rPush('bikes:repairs', 'bike:1');
console.log(res15); // 1
const res16 = await client.rPush('bikes:repairs', 'bike:2');
console.log(res16); // 2
const res17 = await client.lPush('bikes:repairs', 'bike:important_bike');
console.log(res17); // 3
const res18 = await client.lRange('bikes:repairs', 0, -1);
console.log(res18); // ['bike:important_bike', 'bike:1', 'bike:2']
await client.del('bikes:repairs');
const res19 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res19); // 3
const res20 = await client.lPush(
'bikes:repairs', ['bike:important_bike', 'bike:very_important_bike']
);
console.log(res20); // 5
const res21 = await client.lRange('bikes:repairs', 0, -1);
console.log(res21); // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3']
await client.del('bikes:repairs');
const res22 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res22); // 3
const res23 = await client.rPop('bikes:repairs');
console.log(res23); // 'bike:3'
const res24 = await client.lPop('bikes:repairs');
console.log(res24); // 'bike:1'
const res25 = await client.rPop('bikes:repairs');
console.log(res25); // 'bike:2'
const res26 = await client.rPop('bikes:repairs');
console.log(res26); // null
const res27 = await client.lPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res27); // 5
const res28 = await client.lTrim('bikes:repairs', 0, 2);
console.log(res28); // OK
const res29 = await client.lRange('bikes:repairs', 0, -1);
console.log(res29); // ['bike:5', 'bike:4', 'bike:3']
await client.del('bikes:repairs');
const res27eol = await client.rPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res27eol); // 5
const res28eol = await client.lTrim('bikes:repairs', -3, -1);
console.log(res28eol); // 'OK'
const res29eol = await client.lRange('bikes:repairs', 0, -1);
console.log(res29eol); // ['bike:3', 'bike:4', 'bike:5']
await client.del('bikes:repairs');
const res31 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2']);
console.log(res31); // 2
const res32 = await client.brPop('bikes:repairs', 1);
console.log(res32); // { key: 'bikes:repairs', element: 'bike:2' }
const res33 = await client.brPop('bikes:repairs', 1);
console.log(res33); // { key: 'bikes:repairs', element: 'bike:1' }
const res34 = await client.brPop('bikes:repairs', 1);
console.log(res34); // null
const res35 = await client.del('new_bikes');
console.log(res35); // 0
const res36 = await client.lPush('new_bikes', ['bike:1', 'bike:2', 'bike:3']);
console.log(res36); // 3
await client.del('new_bikes');
const res37 = await client.set('new_bikes', 'bike:1');
console.log(res37); // 'OK'
const res38 = await client.type('new_bikes');
console.log(res38); // 'string'
try {
const res39 = await client.lPush('new_bikes', 'bike:2', 'bike:3');
// redis.exceptions.ResponseError:
// [SimpleError: WRONGTYPE Operation against a key holding the wrong kind of value]
}
catch(e){
console.log(e);
}
await client.del('bikes:repairs');
await client.lPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res36); // 3
const res40 = await client.exists('bikes:repairs')
console.log(res40); // 1
const res41 = await client.lPop('bikes:repairs');
console.log(res41); // 'bike:3'
const res42 = await client.lPop('bikes:repairs');
console.log(res42); // 'bike:2'
const res43 = await client.lPop('bikes:repairs');
console.log(res43); // 'bike:1'
const res44 = await client.exists('bikes:repairs');
console.log(res44); // 0
await client.del('bikes:repairs');
const res45 = await client.del('bikes:repairs');
console.log(res45); // 0
const res46 = await client.lLen('bikes:repairs');
console.log(res46); // 0
const res47 = await client.lPop('bikes:repairs');
console.log(res47); // null
await client.del('bikes:repairs');
const res48 = await client.lPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res48); // 5
const res49 = await client.lTrim('bikes:repairs', 0, 2);
console.log(res49); // 'OK'
const res50 = await client.lRange('bikes:repairs', 0, -1);
console.log(res50); // ['bike:5', 'bike:4', 'bike:3']
await client.close();
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.args.ListDirection;
import java.util.List;
public class ListExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long res1 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res1); // >>> 1
long res2 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res2); // >>> 2
String res3 = jedis.rpop("bikes:repairs");
System.out.println(res3); // >>> bike:1
String res4 = jedis.rpop("bikes:repairs");
System.out.println(res4); // >>> bike:2
long res5 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res5); // >>> 1
long res6 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res6); // >>> 2
String res7 = jedis.lpop("bikes:repairs");
System.out.println(res7); // >>> bike:2
String res8 = jedis.lpop("bikes:repairs");
System.out.println(res8); // >>> bike:1
long res9 = jedis.llen("bikes:repairs");
System.out.println(res9); // >>> 0
long res10 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res10); // >>> 1
long res11 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res11); // >>> 2
String res12 = jedis.lmove("bikes:repairs", "bikes:finished", ListDirection.LEFT, ListDirection.LEFT);
System.out.println(res12); // >>> bike:2
List<String> res13 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res13); // >>> [bike:1]
List<String> res14 = jedis.lrange("bikes:finished", 0, -1);
System.out.println(res14); // >>> [bike:2]
jedis.del("bikes:repairs");
long res15 = jedis.rpush("bikes:repairs", "bike:1");
System.out.println(res15); // >>> 1
long res16 = jedis.rpush("bikes:repairs", "bike:2");
System.out.println(res16); // >>> 2
long res17 = jedis.lpush("bikes:repairs", "bike:important_bike");
System.out.println(res17); // >>> 3
List<String> res18 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res18); // >>> [bike:important_bike, bike:1, bike:2]
jedis.del("bikes:repairs");
long res19 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res19); // >>> 3
long res20 = jedis.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike");
System.out.println(res20); // >>> 5
List<String> res21 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res21); // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3]
jedis.del("bikes:repairs");
long res22 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res22); // >>> 3
String res23 = jedis.rpop("bikes:repairs");
System.out.println(res23); // >>> bike:3
String res24 = jedis.lpop("bikes:repairs");
System.out.println(res24); // >>> bike:1
String res25 = jedis.rpop("bikes:repairs");
System.out.println(res25); // >>> bike:2
String res26 = jedis.rpop("bikes:repairs");
System.out.println(res26); // >>> null
long res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res27); // >>> 5
String res28 = jedis.ltrim("bikes:repairs", 0, 2);
System.out.println(res28); // >>> OK
List<String> res29 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res29); // >>> [bike:1, bike:2, bike:3]
jedis.del("bikes:repairs");
res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res27); // >>> 5
res28 = jedis.ltrim("bikes:repairs", -3, -1);
System.out.println(res2); // >>> OK
res29 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res29); // >>> [bike:3, bike:4, bike:5]
jedis.del("bikes:repairs");
long res31 = jedis.rpush("bikes:repairs", "bike:1", "bike:2");
System.out.println(res31); // >>> 2
List<String> res32 = jedis.brpop(1, "bikes:repairs");
System.out.println(res32); // >>> (bikes:repairs, bike:2)
List<String> res33 = jedis.brpop(1,"bikes:repairs");
System.out.println(res33); // >>> (bikes:repairs, bike:1)
List<String> res34 = jedis.brpop(1,"bikes:repairs");
System.out.println(res34); // >>> null
jedis.del("new_bikes");
long res36 = jedis.lpush("new_bikes", "bike:1", "bike:2", "bike:3");
System.out.println(res36); // >>> 3
jedis.del("new_bikes");
String res37 = jedis.set("new_bikes", "bike:1");
System.out.println(res37); // >>> OK
String res38 = jedis.type("new_bikes");
System.out.println(res38); // >>> string
try {
long res39 = jedis.lpush("new_bikes", "bike:2", "bike:3");
} catch (Exception e) {
e.printStackTrace();
// >>> redis.clients.jedis.exceptions.JedisDataException:
// >>> WRONGTYPE Operation against a key holding the wrong kind of value
}
jedis.del("bikes:repairs");
jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res36); // >>> 3
boolean res40 = jedis.exists("bikes:repairs");
System.out.println(res40); // >>> true
String res41 = jedis.lpop("bikes:repairs");
System.out.println(res41); // >>> bike:3
String res42 = jedis.lpop("bikes:repairs");
System.out.println(res42); // >>> bike:2
String res43 = jedis.lpop("bikes:repairs");
System.out.println(res43); // >>> bike:1
boolean res44 = jedis.exists("bikes:repairs");
System.out.println(res44); // >>> false
jedis.del("bikes:repairs");
long res46 = jedis.llen("bikes:repairs");
System.out.println(res46); // >>> 0
String res47 = jedis.lpop("bikes:repairs");
System.out.println(res47); // >>> null
jedis.del("bikes:repairs");
long res48 = jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res48); // >>> 5
String res49 = jedis.ltrim("bikes:repairs", 0, 2);
System.out.println(res49); // >>> OK
List<String> res50 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res50); // >>> [bike:5, bike:4, bike:3]
jedis.close();
}
}
package io.redis.examples.async;
import io.lettuce.core.*;
import io.lettuce.core.api.async.RedisAsyncCommands;
import io.lettuce.core.api.StatefulRedisConnection;
import java.util.concurrent.CompletableFuture;
public class ListExample {
public void run() {
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
RedisAsyncCommands<String, String> asyncCommands = connection.async();
CompletableFuture<Void> queue = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res1 -> {
System.out.println(res1); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res2 -> {
System.out.println(res2); // >>> 2
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res3 -> {
System.out.println(res3); // >>> bike:1
return asyncCommands.rpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> bike:2
.toCompletableFuture();
queue.join();
CompletableFuture<Void> stack = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res4 -> {
System.out.println(res4); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res5 -> {
System.out.println(res5); // >>> 2
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res6 -> {
System.out.println(res6); // >>> bike:2
return asyncCommands.lpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> bike:1
.toCompletableFuture();
stack.join();
CompletableFuture<Void> llen = asyncCommands.llen("bikes:repairs")
.thenAccept(System.out::println) // >>> 0
.toCompletableFuture();
llen.join();
CompletableFuture<Void> lmovelrange = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res7 -> {
System.out.println(res7); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res8 -> {
System.out.println(res8); // >>> 2
return asyncCommands.lmove("bikes:repairs", "bikes:finished", LMoveArgs.Builder.leftLeft());
}).thenCompose(res9 -> {
System.out.println(res9); // >>> bike:2
return asyncCommands.lrange("bikes:repairs", 0, -1);
}).thenCompose(res10 -> {
System.out.println(res10); // >>> [bike:1]
return asyncCommands.lrange("bikes:finished", 0, -1);
})
.thenAccept(System.out::println) // >>> [bike:2]
.toCompletableFuture();
lmovelrange.join();
CompletableFuture<Void> lpushrpush = asyncCommands.rpush("bikes:repairs", "bike:1").thenCompose(res11 -> {
System.out.println(res11); // >>> 1
return asyncCommands.rpush("bikes:repairs", "bike:2");
}).thenCompose(res12 -> {
System.out.println(res12); // >>> 2
return asyncCommands.lpush("bikes:repairs", "bike:important_bike");
}).thenCompose(res13 -> {
System.out.println(res13); // >>> 3
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:important_bike, bike:1, bike:2]
.toCompletableFuture();
lpushrpush.join();
CompletableFuture<Void> variadic = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res14 -> {
System.out.println(res14); // >>> 3
return asyncCommands.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike");
}).thenCompose(res15 -> {
System.out.println(res15); // >>> 5
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3]
.toCompletableFuture();
variadic.join();
CompletableFuture<Void> lpoprpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res16 -> {
System.out.println(res16); // >>> 3
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res17 -> {
System.out.println(res17); // >>> bike:3
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res18 -> {
System.out.println(res18); // >>> bike:1
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res19 -> {
System.out.println(res19); // >>> bike:2
return asyncCommands.rpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
lpoprpop.join();
CompletableFuture<Void> ltrim = asyncCommands
.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res20 -> {
System.out.println(res20); // >>> 5
return asyncCommands.ltrim("bikes:repairs", 0, 2);
}).thenCompose(res21 -> {
System.out.println(res21); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:5, bike:4, bike:3]
.toCompletableFuture();
ltrim.join();
CompletableFuture<Void> ltrimendoflist = asyncCommands
.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res22 -> {
System.out.println(res22); // >>> 5
return asyncCommands.ltrim("bikes:repairs", -3, -1);
}).thenCompose(res23 -> {
System.out.println(res23); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:3, bike:4, bike:5]
.toCompletableFuture();
ltrimendoflist.join();
CompletableFuture<Void> brpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2").thenCompose(res24 -> {
System.out.println(res24); // >>> 2
return asyncCommands.brpop(1, "bikes:repairs");
}).thenCompose(res25 -> {
System.out.println(res25);
// >>> KeyValue[bikes:repairs, bike:2]
return asyncCommands.brpop(1, "bikes:repairs");
}).thenCompose(res26 -> {
System.out.println(res26);
// >>> KeyValue[bikes:repairs, bike:1]
return asyncCommands.brpop(1, "bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
brpop.join();
CompletableFuture<Void> rule1 = asyncCommands.del("new_bikes").thenCompose(res27 -> {
System.out.println(res27); // >>> 0
return asyncCommands.lpush("new_bikes", "bike:1", "bike:2", "bike:3");
})
.thenAccept(System.out::println) // >>> 3
.toCompletableFuture();
rule1.join();
CompletableFuture<Void> rule11 = asyncCommands.set("new_bikes_string", "bike:1").thenCompose(res28 -> {
System.out.println(res28); // >>> OK
return asyncCommands.type("new_bikes_string");
}).thenCompose(res29 -> {
System.out.println(res29); // >>> string
return asyncCommands.lpush("new_bikes_string", "bike:2", "bike:3");
}).handle((res, ex) -> {
if (ex == null) {
return res;
} else {
System.out.println(ex);
// >>> java.util.concurrent.CompletionException:
// >>> io.lettuce.core.RedisCommandExecutionException:
// >>> WRONGTYPE Operation against a key holding the wrong
// >>> kind of value
return -1L;
}
})
.thenAccept(System.out::println) // >>> -1
.toCompletableFuture();
rule11.join();
CompletableFuture<Void> rule2 = asyncCommands.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res30 -> {
System.out.println(res30); // >>> 3
return asyncCommands.exists("bikes:repairs");
}).thenCompose(res31 -> {
System.out.println(res31); // >>> 1
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res32 -> {
System.out.println(res32); // >>> bike:3
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res33 -> {
System.out.println(res33); // >>> bike:2
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res34 -> {
System.out.println(res34); // >>> bike:1
return asyncCommands.exists("bikes:repairs");
})
.thenAccept(System.out::println) // >>> 0
.toCompletableFuture();
rule2.join();
CompletableFuture<Void> rule3 = asyncCommands.del("bikes:repairs").thenCompose(res35 -> {
System.out.println(res35); // >>> 0
return asyncCommands.llen("bikes:repairs");
}).thenCompose(res36 -> {
System.out.println(res36); // >>> 0
return asyncCommands.lpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
rule3.join();
CompletableFuture<Void> ltrim1 = asyncCommands
.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res37 -> {
System.out.println(res37); // >>> 5
return asyncCommands.ltrim("bikes:repairs", 0, 2);
}).thenCompose(res38 -> {
System.out.println(res38); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3]
.toCompletableFuture();
ltrim1.join();
} finally {
redisClient.shutdown();
}
}
}
package example_commands_test
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
)
func ExampleClient_queue() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res1, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res1) // >>> 1
res2, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res2) // >>> 2
res3, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res3) // >>> bike:1
res4, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res4) // >>> bike:2
}
func ExampleClient_stack() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res5, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res5) // >>> 1
res6, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res6) // >>> 2
res7, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res7) // >>> bike:2
res8, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res8) // >>> bike:1
}
func ExampleClient_llen() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res9, err := rdb.LLen(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res9) // >>> 0
}
func ExampleClient_lmove_lrange() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res10, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res10) // >>> 1
res11, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res11) // >>> 2
res12, err := rdb.LMove(ctx, "bikes:repairs", "bikes:finished", "LEFT", "LEFT").Result()
if err != nil {
panic(err)
}
fmt.Println(res12) // >>> bike:2
res13, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res13) // >>> [bike:1]
res14, err := rdb.LRange(ctx, "bikes:finished", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res14) // >>> [bike:2]
}
func ExampleClient_lpush_rpush() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res15, err := rdb.RPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res15) // >>> 1
res16, err := rdb.RPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res16) // >>> 2
res17, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike").Result()
if err != nil {
panic(err)
}
fmt.Println(res17) // >>> 3
res18, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res18) // >>> [bike:important_bike bike:1 bike:2]
}
func ExampleClient_variadic() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res19, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res19) // >>> 3
res20, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike", "bike:very_important_bike").Result()
if err != nil {
panic(err)
}
fmt.Println(res20) // >>> 5
res21, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res21) // >>> [bike:very_important_bike bike:important_bike bike:1 bike:2 bike:3]
}
func ExampleClient_lpop_rpop() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res22, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res22) // >>> 3
res23, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res23) // >>> bike:3
res24, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res24) // >>> bike:1
res25, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res25) // >>> bike:2
res26, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res26) // >>> <empty string>
}
func ExampleClient_ltrim() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res27, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res27) // >>> 5
res28, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result()
if err != nil {
panic(err)
}
fmt.Println(res28) // >>> OK
res29, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res29) // >>> [bike:1 bike:2 bike:3]
}
func ExampleClient_ltrim_end_of_list() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res30, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res30) // >>> 5
res31, err := rdb.LTrim(ctx, "bikes:repairs", -3, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res31) // >>> OK
res32, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res32) // >>> [bike:3 bike:4 bike:5]
}
func ExampleClient_brpop() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res33, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res33) // >>> 2
res34, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res34) // >>> [bikes:repairs bike:2]
res35, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res35) // >>> [bikes:repairs bike:1]
res36, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res36) // >>> []
}
func ExampleClient_rule1() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res37, err := rdb.Del(ctx, "new_bikes").Result()
if err != nil {
panic(err)
}
fmt.Println(res37) // >>> 0
res38, err := rdb.LPush(ctx, "new_bikes", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res38) // >>> 3
}
func ExampleClient_rule11() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "new_bikes")
res39, err := rdb.Set(ctx, "new_bikes", "bike:1", 0).Result()
if err != nil {
panic(err)
}
fmt.Println(res39) // >>> OK
res40, err := rdb.Type(ctx, "new_bikes").Result()
if err != nil {
panic(err)
}
fmt.Println(res40) // >>> string
res41, err := rdb.LPush(ctx, "new_bikes", "bike:2", "bike:3").Result()
if err != nil {
fmt.Println(err)
// >>> WRONGTYPE Operation against a key holding the wrong kind of value
}
fmt.Println(res41)
}
func ExampleClient_rule2() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res42, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res42) // >>> 3
res43, err := rdb.Exists(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res43) // >>> 1
res44, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res44) // >>> bike:3
res45, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res45) // >>> bike:2
res46, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res46) // >>> bike:1
res47, err := rdb.Exists(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res47) // >>> 0
}
func ExampleClient_rule3() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res48, err := rdb.Del(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res48) // >>> 0
res49, err := rdb.LLen(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res49) // >>> 0
res50, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res50) // >>> <empty string>
}
func ExampleClient_ltrim1() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res51, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res51) // >>> 5
res52, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result()
if err != nil {
panic(err)
}
fmt.Println(res52) // >>> OK
res53, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res53) // >>> [bike:5 bike:4 bike:3]
}
using NRedisStack;
using StackExchange.Redis;
public class ListExample
{
public void Run()
{
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
var db = muxer.GetDatabase();
long res1 = db.ListLeftPush("bikes:repairs", "bike:1");
Console.WriteLine(res1); // >>> 1
long res2 = db.ListLeftPush("bikes:repairs", "bike:2");
Console.WriteLine(res2); // >>> 2
RedisValue res3 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res3); // >>> "bike:1"
RedisValue res4 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res4); // >>> "bike:2"
long res5 = db.ListLeftPush("bikes:repairs", "bike:1");
Console.WriteLine(res5); // >>> 1
long res6 = db.ListLeftPush("bikes:repairs", "bike:2");
Console.WriteLine(res6); // >>> 2
RedisValue res7 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res7); // >>> "bike:2"
RedisValue res8 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res8); // >>> "bike:1"
long res9 = db.ListLength("bikes:repairs");
Console.WriteLine(res9); // >>> 0
long res10 = db.ListLeftPush("{bikes}:repairs", "bike:1");
Console.WriteLine(res10); // >>> 1
long res11 = db.ListLeftPush("{bikes}:repairs", "bike:2");
Console.WriteLine(res11); // >>> 2
RedisValue res12 = db.ListMove("{bikes}:repairs", "{bikes}:finished", ListSide.Left, ListSide.Left);
Console.Write(res12); // >>> "bike:2"
RedisValue[] res13 = db.ListRange("{bikes}:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res13)); // >>> "bike:1"
RedisValue[] res14 = db.ListRange("{bikes}:finished", 0, -1);
Console.WriteLine(string.Join(", ", res14)); // >>> "bike:2"
db.KeyDelete("bikes:repairs");
long res15 = db.ListRightPush("bikes:repairs", "bike:1");
Console.WriteLine(res15); // >>> 1
long res16 = db.ListRightPush("bikes:repairs", "bike:2");
Console.WriteLine(res16); // >>> 2
long res17 = db.ListLeftPush("bikes:repairs", "bike:important_bike");
Console.WriteLine(res17); // >>> 3
RedisValue[] res18 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res18)); // >>> "bike:important_bike, bike:1, bike:2"
db.KeyDelete("bikes:repairs");
long res19 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res19); // >>> 3
long res20 = db.ListLeftPush("bikes:repairs", ["bike:important_bike", "bike:very_important_bike"]);
Console.WriteLine(res20); // >>> 5
RedisValue[] res21 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res21));
// >>> "bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3"
db.KeyDelete("bikes:repairs");
long res22 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res22); // >>> 3
RedisValue res23 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res23); // >>> "bike:3"
RedisValue res24 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res24); // >>> "bike:1"
RedisValue res25 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res25); // >>> "bike:2"
RedisValue res26 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res26); // >>> <Empty string>
long res27 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res27); // >>> 5
db.ListTrim("bikes:repairs", 0, 2);
RedisValue[] res28 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res28)); // "bike:5, bike:4, bike:3"
db.KeyDelete("bikes:repairs");
long res29 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res29); // >>> 5
db.ListTrim("bikes:repairs", -3, -1);
RedisValue[] res30 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res30)); // >>> "bike:3, bike:4, bike:5"
db.KeyDelete("bikes:repairs");
long res31 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2"]);
Console.WriteLine(res31); // >>> 2
Tuple<RedisKey, RedisValue>? res32 = db.BRPop(["bikes:repairs"], 1);
if (res32 != null)
Console.WriteLine($"{res32.Item1} -> {res32.Item2}"); // >>> "bikes:repairs -> bike:2"
Tuple<RedisKey, RedisValue>? res33 = db.BRPop(["bikes:repairs"], 1);
if (res33 != null)
Console.WriteLine($"{res33.Item1} -> {res33.Item2}"); // >>> "bikes:repairs -> bike:1"
Tuple<RedisKey, RedisValue>? res34 = db.BRPop(["bikes:repairs"], 1);
Console.WriteLine(res34); // >>> "Null"
db.KeyDelete("new_bikes");
long res36 = db.ListRightPush("new_bikes", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res36); // >>> 3
db.KeyDelete("new_bikes");
bool res37 = db.StringSet("new_bikes", "bike:1");
Console.WriteLine(res37); // >>> True
RedisType res38 = db.KeyType("new_bikes");
Console.WriteLine(res38); // >>> RedisType.String
try
{
long res39 = db.ListRightPush("new_bikes", ["bike:2", "bike:3"]);
}
catch (Exception e)
{
Console.WriteLine(e);
}
db.KeyDelete("bikes:repairs");
long res40 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res40); // >>> 3
bool res41 = db.KeyExists("bikes:repairs");
Console.WriteLine(res41); // >>> True
RedisValue res42 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res42); // >>> "bike:3"
RedisValue res43 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res43); // >>> "bike:2"
RedisValue res44 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res44); // >>> "bike:1"
bool res45 = db.KeyExists("bikes:repairs");
Console.WriteLine(res45); // >>> False
db.KeyDelete("bikes:repairs");
long res47 = db.ListLength("bikes:repairs");
Console.WriteLine(res47); // >>> 0
RedisValue res48 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res48); // >>> Null
db.KeyDelete("bikes:repairs");
long res49 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res49); // >>> 5
db.ListTrim("bikes:repairs", 0, 2);
RedisValue[] res50 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res50)); // >>> "bike:5, bike:4, bike:3"
}
}
<?php
require 'vendor/autoload.php';
use Predis\Client as PredisClient;
class DtListTest
{
public function testDtList() {
$r = new PredisClient([
'scheme' => 'tcp',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'database' => 0,
]);
$res1 = $r->lpush('bikes:repairs', 'bike:1');
echo $res1 . PHP_EOL;
// >>> 1
$res2 = $r->lpush('bikes:repairs', 'bike:2');
echo $res2 . PHP_EOL;
// >>> 2
$res3 = $r->rpop('bikes:repairs');
echo $res3 . PHP_EOL;
// >>> bike:1
$res4 = $r->rpop('bikes:repairs');
echo $res4 . PHP_EOL;
// >>> bike:2
$res5 = $r->lpush('bikes:repairs', 'bike:1');
echo $res5 . PHP_EOL;
// >>> 1
$res6 = $r->lpush('bikes:repairs', 'bike:2');
echo $res6 . PHP_EOL;
// >>> 2
$res7 = $r->lpop('bikes:repairs');
echo $res7 . PHP_EOL;
// >>> bike:2
$res8 = $r->lpop('bikes:repairs');
echo $res8 . PHP_EOL;
// >>> bike:1
$res9 = $r->llen('bikes:repairs');
echo $res9 . PHP_EOL;
// >>> 0
$res10 = $r->lpush('bikes:repairs', 'bike:1');
echo $res10 . PHP_EOL;
// >>> 1
$res11 = $r->lpush('bikes:repairs', 'bike:2');
echo $res11 . PHP_EOL;
// >>> 2
$res12 = $r->lmove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT');
echo $res12 . PHP_EOL;
// >>> 'bike:2'
$res13 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res13) . PHP_EOL;
// >>> ['bike:1']
$res14 = $r->lrange('bikes:finished', 0, -1);
echo json_encode($res14) . PHP_EOL;
// >>> ['bike:2']
$r->del('bikes:repairs');
$res15 = $r->rpush('bikes:repairs', 'bike:1');
echo $res15 . PHP_EOL;
// >>> 1
$res16 = $r->rpush('bikes:repairs', 'bike:2');
echo $res16 . PHP_EOL;
// >>> 2
$res17 = $r->lpush('bikes:repairs', 'bike:important_bike');
echo $res17 . PHP_EOL;
// >>> 3
$res18 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res18) . PHP_EOL;
// >>> ['bike:important_bike', 'bike:1', 'bike:2']
$r->del('bikes:repairs');
$res19 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3');
echo $res19 . PHP_EOL;
// >>> 3
$res20 = $r->lpush('bikes:repairs', 'bike:important_bike', 'bike:very_important_bike');
echo $res20 . PHP_EOL;
// >>> 5
$res21 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res21) . PHP_EOL;
// >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ...
$r->del('bikes:repairs');
$res22 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3');
echo $res22 . PHP_EOL;
// >>> 3
$res23 = $r->rpop('bikes:repairs');
echo $res23 . PHP_EOL;
// >>> 'bike:3'
$res24 = $r->lpop('bikes:repairs');
echo $res24 . PHP_EOL;
// >>> 'bike:1'
$res25 = $r->rpop('bikes:repairs');
echo $res25 . PHP_EOL;
// >>> 'bike:2'
$res26 = $r->rpop('bikes:repairs');
echo $res26 . PHP_EOL;
// >>> None
$res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5');
echo $res27 . PHP_EOL;
// >>> 5
$res28 = $r->ltrim('bikes:repairs', 0, 2);
echo $res28 . PHP_EOL;
// >>> True
$res29 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res29) . PHP_EOL;
// >>> ['bike:1', 'bike:2', 'bike:3']
$r->del('bikes:repairs');
$res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5');
echo $res27 . PHP_EOL;
// >>> 5
$res28 = $r->ltrim('bikes:repairs', -3, -1);
echo $res28 . PHP_EOL;
// >>> True
$res29 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res29) . PHP_EOL;
// >>> ['bike:3', 'bike:4', 'bike:5']
$r->del('bikes:repairs');
$res31 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2');
echo $res31 . PHP_EOL;
// >>> 2
$res32 = $r->brpop('bikes:repairs', 1);
echo json_encode($res32) . PHP_EOL;
// >>> ['bikes:repairs', 'bike:2']
$res33 = $r->brpop('bikes:repairs', 1);
echo json_encode($res33) . PHP_EOL;
// >>> ['bikes:repairs', 'bike:1']
$res34 = $r->brpop('bikes:repairs', 1);
echo json_encode($res34) . PHP_EOL;
// >>> None
$res35 = $r->del('new_bikes');
echo $res35 . PHP_EOL;
// >>> 0
$res36 = $r->lpush('new_bikes', 'bike:1', 'bike:2', 'bike:3');
echo $res36 . PHP_EOL;
// >>> 3
$r->del('new_bikes');
$res37 = $r->set('new_bikes', 'bike:1');
echo $res37 . PHP_EOL;
// >>> True
$res38 = $r->type('new_bikes');
echo $res38 . PHP_EOL;
// >>> 'string'
try {
$res39 = $r->lpush('new_bikes', 'bike:2', 'bike:3');
// >>> redis.exceptions.ResponseError:
// >>> WRONGTYPE Operation against a key holding the wrong kind of value
} catch (\Predis\Response\ServerException $e) {
echo $e->getMessage() . PHP_EOL;
}
$r->del('bikes:repairs');
$res36 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3');
echo $res36 . PHP_EOL;
// >>> 3
$res40 = $r->exists('bikes:repairs');
echo $res40 . PHP_EOL;
// >>> 1
$res41 = $r->lpop('bikes:repairs');
echo $res41 . PHP_EOL;
// >>> 'bike:3'
$res42 = $r->lpop('bikes:repairs');
echo $res42 . PHP_EOL;
// >>> 'bike:2'
$res43 = $r->lpop('bikes:repairs');
echo $res43 . PHP_EOL;
// >>> 'bike:1'
$res44 = $r->exists('bikes:repairs');
echo $res44 . PHP_EOL;
// >>> False
$res45 = $r->del('bikes:repairs');
echo $res45 . PHP_EOL;
// >>> 0
$res46 = $r->llen('bikes:repairs');
echo $res46 . PHP_EOL;
// >>> 0
$res47 = $r->lpop('bikes:repairs');
echo $res47 . PHP_EOL;
// >>> None
$res48 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5');
echo $res48 . PHP_EOL;
// >>> 5
$res49 = $r->ltrim('bikes:repairs', 0, 2);
echo $res49 . PHP_EOL;
// >>> True
$res50 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res50) . PHP_EOL;
// >>> ['bike:5', 'bike:4', 'bike:3']
}
}
Note that LRANGE takes two indexes, the first and the last
element of the range to return. Both the indexes can be negative, telling Redis
to start counting from the end: so -1 is the last element, -2 is the
penultimate element of the list, and so forth.
As you can see RPUSH appended the elements on the right of the list, while
the final LPUSH appended the element on the left.
Both commands are variadic commands, meaning that you are free to push multiple elements into a list in a single call:
> DEL bikes:repairs
(integer) 1
> RPUSH bikes:repairs bike:1 bike:2 bike:3
(integer) 3
> LPUSH bikes:repairs bike:important_bike bike:very_important_bike
> LRANGE bikes:repairs 0 -1
1) "bike:very_important_bike"
2) "bike:important_bike"
3) "bike:1"
4) "bike:2"
5) "bike:3""""
Code samples for List doc pages:
https://redis.io/docs/latest/develop/data-types/lists/
"""
import redis
r = redis.Redis(decode_responses=True)
res1 = r.lpush("bikes:repairs", "bike:1")
print(res1) # >>> 1
res2 = r.lpush("bikes:repairs", "bike:2")
print(res2) # >>> 2
res3 = r.rpop("bikes:repairs")
print(res3) # >>> bike:1
res4 = r.rpop("bikes:repairs")
print(res4) # >>> bike:2
res5 = r.lpush("bikes:repairs", "bike:1")
print(res5) # >>> 1
res6 = r.lpush("bikes:repairs", "bike:2")
print(res6) # >>> 2
res7 = r.lpop("bikes:repairs")
print(res7) # >>> bike:2
res8 = r.lpop("bikes:repairs")
print(res8) # >>> bike:1
res9 = r.llen("bikes:repairs")
print(res9) # >>> 0
res10 = r.lpush("bikes:repairs", "bike:1")
print(res10) # >>> 1
res11 = r.lpush("bikes:repairs", "bike:2")
print(res11) # >>> 2
res12 = r.lmove("bikes:repairs", "bikes:finished", "LEFT", "LEFT")
print(res12) # >>> 'bike:2'
res13 = r.lrange("bikes:repairs", 0, -1)
print(res13) # >>> ['bike:1']
res14 = r.lrange("bikes:finished", 0, -1)
print(res14) # >>> ['bike:2']
r.delete("bikes:repairs")
res15 = r.rpush("bikes:repairs", "bike:1")
print(res15) # >>> 1
res16 = r.rpush("bikes:repairs", "bike:2")
print(res16) # >>> 2
res17 = r.lpush("bikes:repairs", "bike:important_bike")
print(res17) # >>> 3
res18 = r.lrange("bikes:repairs", 0, -1)
print(res18) # >>> ['bike:important_bike', 'bike:1', 'bike:2']
r.delete("bikes:repairs")
res19 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res19) # >>> 3
res20 = r.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike")
print(res20) # >>> 5
res21 = r.lrange("bikes:repairs", 0, -1)
print(
res21
) # >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ...
r.delete("bikes:repairs")
res22 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res22) # >>> 3
res23 = r.rpop("bikes:repairs")
print(res23) # >>> 'bike:3'
res24 = r.lpop("bikes:repairs")
print(res24) # >>> 'bike:1'
res25 = r.rpop("bikes:repairs")
print(res25) # >>> 'bike:2'
res26 = r.rpop("bikes:repairs")
print(res26) # >>> None
res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res27) # >>> 5
res28 = r.ltrim("bikes:repairs", 0, 2)
print(res28) # >>> True
res29 = r.lrange("bikes:repairs", 0, -1)
print(res29) # >>> ['bike:1', 'bike:2', 'bike:3']
r.delete("bikes:repairs")
res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res27) # >>> 5
res28 = r.ltrim("bikes:repairs", -3, -1)
print(res28) # >>> True
res29 = r.lrange("bikes:repairs", 0, -1)
print(res29) # >>> ['bike:3', 'bike:4', 'bike:5']
r.delete("bikes:repairs")
res31 = r.rpush("bikes:repairs", "bike:1", "bike:2")
print(res31) # >>> 2
res32 = r.brpop("bikes:repairs", timeout=1)
print(res32) # >>> ('bikes:repairs', 'bike:2')
res33 = r.brpop("bikes:repairs", timeout=1)
print(res33) # >>> ('bikes:repairs', 'bike:1')
res34 = r.brpop("bikes:repairs", timeout=1)
print(res34) # >>> None
res35 = r.delete("new_bikes")
print(res35) # >>> 0
res36 = r.lpush("new_bikes", "bike:1", "bike:2", "bike:3")
print(res36) # >>> 3
r.delete("new_bikes")
res37 = r.set("new_bikes", "bike:1")
print(res37) # >>> True
res38 = r.type("new_bikes")
print(res38) # >>> 'string'
try:
res39 = r.lpush("new_bikes", "bike:2", "bike:3")
# >>> redis.exceptions.ResponseError:
# >>> WRONGTYPE Operation against a key holding the wrong kind of value
except redis.exceptions.ResponseError as e:
print(e)
r.delete("bikes:repairs")
r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res36) # >>> 3
res40 = r.exists("bikes:repairs")
print(res40) # >>> 1
res41 = r.lpop("bikes:repairs")
print(res41) # >>> 'bike:3'
res42 = r.lpop("bikes:repairs")
print(res42) # >>> 'bike:2'
res43 = r.lpop("bikes:repairs")
print(res43) # >>> 'bike:1'
res44 = r.exists("bikes:repairs")
print(res44) # >>> False
r.delete("bikes:repairs")
res45 = r.delete("bikes:repairs")
print(res45) # >>> 0
res46 = r.llen("bikes:repairs")
print(res46) # >>> 0
res47 = r.lpop("bikes:repairs")
print(res47) # >>> None
r.delete("bikes:repairs")
res48 = r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res48) # >>> 5
res49 = r.ltrim("bikes:repairs", 0, 2)
print(res49) # >>> True
res50 = r.lrange("bikes:repairs", 0, -1)
print(res50) # >>> ['bike:5', 'bike:4', 'bike:3']
import { createClient } from 'redis';
const client = createClient();
await client.connect();
const res1 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res1); // 1
const res2 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res2); // 2
const res3 = await client.rPop('bikes:repairs');
console.log(res3); // bike:1
const res4 = await client.rPop('bikes:repairs');
console.log(res4); // bike:2
const res5 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res5); // 1
const res6 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res6); // 2
const res7 = await client.lPop('bikes:repairs');
console.log(res7); // bike:2
const res8 = await client.lPop('bikes:repairs');
console.log(res8); // bike:1
const res9 = await client.lLen('bikes:repairs');
console.log(res9); // 0
const res10 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res10); // 1
const res11 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res11); // 2
const res12 = await client.lMove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT');
console.log(res12); // 'bike:2'
const res13 = await client.lRange('bikes:repairs', 0, -1);
console.log(res13); // ['bike:1']
const res14 = await client.lRange('bikes:finished', 0, -1);
console.log(res14); // ['bike:2']
await client.del('bikes:repairs');
const res15 = await client.rPush('bikes:repairs', 'bike:1');
console.log(res15); // 1
const res16 = await client.rPush('bikes:repairs', 'bike:2');
console.log(res16); // 2
const res17 = await client.lPush('bikes:repairs', 'bike:important_bike');
console.log(res17); // 3
const res18 = await client.lRange('bikes:repairs', 0, -1);
console.log(res18); // ['bike:important_bike', 'bike:1', 'bike:2']
await client.del('bikes:repairs');
const res19 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res19); // 3
const res20 = await client.lPush(
'bikes:repairs', ['bike:important_bike', 'bike:very_important_bike']
);
console.log(res20); // 5
const res21 = await client.lRange('bikes:repairs', 0, -1);
console.log(res21); // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3']
await client.del('bikes:repairs');
const res22 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res22); // 3
const res23 = await client.rPop('bikes:repairs');
console.log(res23); // 'bike:3'
const res24 = await client.lPop('bikes:repairs');
console.log(res24); // 'bike:1'
const res25 = await client.rPop('bikes:repairs');
console.log(res25); // 'bike:2'
const res26 = await client.rPop('bikes:repairs');
console.log(res26); // null
const res27 = await client.lPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res27); // 5
const res28 = await client.lTrim('bikes:repairs', 0, 2);
console.log(res28); // OK
const res29 = await client.lRange('bikes:repairs', 0, -1);
console.log(res29); // ['bike:5', 'bike:4', 'bike:3']
await client.del('bikes:repairs');
const res27eol = await client.rPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res27eol); // 5
const res28eol = await client.lTrim('bikes:repairs', -3, -1);
console.log(res28eol); // 'OK'
const res29eol = await client.lRange('bikes:repairs', 0, -1);
console.log(res29eol); // ['bike:3', 'bike:4', 'bike:5']
await client.del('bikes:repairs');
const res31 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2']);
console.log(res31); // 2
const res32 = await client.brPop('bikes:repairs', 1);
console.log(res32); // { key: 'bikes:repairs', element: 'bike:2' }
const res33 = await client.brPop('bikes:repairs', 1);
console.log(res33); // { key: 'bikes:repairs', element: 'bike:1' }
const res34 = await client.brPop('bikes:repairs', 1);
console.log(res34); // null
const res35 = await client.del('new_bikes');
console.log(res35); // 0
const res36 = await client.lPush('new_bikes', ['bike:1', 'bike:2', 'bike:3']);
console.log(res36); // 3
await client.del('new_bikes');
const res37 = await client.set('new_bikes', 'bike:1');
console.log(res37); // 'OK'
const res38 = await client.type('new_bikes');
console.log(res38); // 'string'
try {
const res39 = await client.lPush('new_bikes', 'bike:2', 'bike:3');
// redis.exceptions.ResponseError:
// [SimpleError: WRONGTYPE Operation against a key holding the wrong kind of value]
}
catch(e){
console.log(e);
}
await client.del('bikes:repairs');
await client.lPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res36); // 3
const res40 = await client.exists('bikes:repairs')
console.log(res40); // 1
const res41 = await client.lPop('bikes:repairs');
console.log(res41); // 'bike:3'
const res42 = await client.lPop('bikes:repairs');
console.log(res42); // 'bike:2'
const res43 = await client.lPop('bikes:repairs');
console.log(res43); // 'bike:1'
const res44 = await client.exists('bikes:repairs');
console.log(res44); // 0
await client.del('bikes:repairs');
const res45 = await client.del('bikes:repairs');
console.log(res45); // 0
const res46 = await client.lLen('bikes:repairs');
console.log(res46); // 0
const res47 = await client.lPop('bikes:repairs');
console.log(res47); // null
await client.del('bikes:repairs');
const res48 = await client.lPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res48); // 5
const res49 = await client.lTrim('bikes:repairs', 0, 2);
console.log(res49); // 'OK'
const res50 = await client.lRange('bikes:repairs', 0, -1);
console.log(res50); // ['bike:5', 'bike:4', 'bike:3']
await client.close();
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.args.ListDirection;
import java.util.List;
public class ListExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long res1 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res1); // >>> 1
long res2 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res2); // >>> 2
String res3 = jedis.rpop("bikes:repairs");
System.out.println(res3); // >>> bike:1
String res4 = jedis.rpop("bikes:repairs");
System.out.println(res4); // >>> bike:2
long res5 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res5); // >>> 1
long res6 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res6); // >>> 2
String res7 = jedis.lpop("bikes:repairs");
System.out.println(res7); // >>> bike:2
String res8 = jedis.lpop("bikes:repairs");
System.out.println(res8); // >>> bike:1
long res9 = jedis.llen("bikes:repairs");
System.out.println(res9); // >>> 0
long res10 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res10); // >>> 1
long res11 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res11); // >>> 2
String res12 = jedis.lmove("bikes:repairs", "bikes:finished", ListDirection.LEFT, ListDirection.LEFT);
System.out.println(res12); // >>> bike:2
List<String> res13 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res13); // >>> [bike:1]
List<String> res14 = jedis.lrange("bikes:finished", 0, -1);
System.out.println(res14); // >>> [bike:2]
jedis.del("bikes:repairs");
long res15 = jedis.rpush("bikes:repairs", "bike:1");
System.out.println(res15); // >>> 1
long res16 = jedis.rpush("bikes:repairs", "bike:2");
System.out.println(res16); // >>> 2
long res17 = jedis.lpush("bikes:repairs", "bike:important_bike");
System.out.println(res17); // >>> 3
List<String> res18 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res18); // >>> [bike:important_bike, bike:1, bike:2]
jedis.del("bikes:repairs");
long res19 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res19); // >>> 3
long res20 = jedis.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike");
System.out.println(res20); // >>> 5
List<String> res21 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res21); // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3]
jedis.del("bikes:repairs");
long res22 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res22); // >>> 3
String res23 = jedis.rpop("bikes:repairs");
System.out.println(res23); // >>> bike:3
String res24 = jedis.lpop("bikes:repairs");
System.out.println(res24); // >>> bike:1
String res25 = jedis.rpop("bikes:repairs");
System.out.println(res25); // >>> bike:2
String res26 = jedis.rpop("bikes:repairs");
System.out.println(res26); // >>> null
long res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res27); // >>> 5
String res28 = jedis.ltrim("bikes:repairs", 0, 2);
System.out.println(res28); // >>> OK
List<String> res29 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res29); // >>> [bike:1, bike:2, bike:3]
jedis.del("bikes:repairs");
res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res27); // >>> 5
res28 = jedis.ltrim("bikes:repairs", -3, -1);
System.out.println(res2); // >>> OK
res29 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res29); // >>> [bike:3, bike:4, bike:5]
jedis.del("bikes:repairs");
long res31 = jedis.rpush("bikes:repairs", "bike:1", "bike:2");
System.out.println(res31); // >>> 2
List<String> res32 = jedis.brpop(1, "bikes:repairs");
System.out.println(res32); // >>> (bikes:repairs, bike:2)
List<String> res33 = jedis.brpop(1,"bikes:repairs");
System.out.println(res33); // >>> (bikes:repairs, bike:1)
List<String> res34 = jedis.brpop(1,"bikes:repairs");
System.out.println(res34); // >>> null
jedis.del("new_bikes");
long res36 = jedis.lpush("new_bikes", "bike:1", "bike:2", "bike:3");
System.out.println(res36); // >>> 3
jedis.del("new_bikes");
String res37 = jedis.set("new_bikes", "bike:1");
System.out.println(res37); // >>> OK
String res38 = jedis.type("new_bikes");
System.out.println(res38); // >>> string
try {
long res39 = jedis.lpush("new_bikes", "bike:2", "bike:3");
} catch (Exception e) {
e.printStackTrace();
// >>> redis.clients.jedis.exceptions.JedisDataException:
// >>> WRONGTYPE Operation against a key holding the wrong kind of value
}
jedis.del("bikes:repairs");
jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res36); // >>> 3
boolean res40 = jedis.exists("bikes:repairs");
System.out.println(res40); // >>> true
String res41 = jedis.lpop("bikes:repairs");
System.out.println(res41); // >>> bike:3
String res42 = jedis.lpop("bikes:repairs");
System.out.println(res42); // >>> bike:2
String res43 = jedis.lpop("bikes:repairs");
System.out.println(res43); // >>> bike:1
boolean res44 = jedis.exists("bikes:repairs");
System.out.println(res44); // >>> false
jedis.del("bikes:repairs");
long res46 = jedis.llen("bikes:repairs");
System.out.println(res46); // >>> 0
String res47 = jedis.lpop("bikes:repairs");
System.out.println(res47); // >>> null
jedis.del("bikes:repairs");
long res48 = jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res48); // >>> 5
String res49 = jedis.ltrim("bikes:repairs", 0, 2);
System.out.println(res49); // >>> OK
List<String> res50 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res50); // >>> [bike:5, bike:4, bike:3]
jedis.close();
}
}
package io.redis.examples.async;
import io.lettuce.core.*;
import io.lettuce.core.api.async.RedisAsyncCommands;
import io.lettuce.core.api.StatefulRedisConnection;
import java.util.concurrent.CompletableFuture;
public class ListExample {
public void run() {
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
RedisAsyncCommands<String, String> asyncCommands = connection.async();
CompletableFuture<Void> queue = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res1 -> {
System.out.println(res1); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res2 -> {
System.out.println(res2); // >>> 2
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res3 -> {
System.out.println(res3); // >>> bike:1
return asyncCommands.rpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> bike:2
.toCompletableFuture();
queue.join();
CompletableFuture<Void> stack = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res4 -> {
System.out.println(res4); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res5 -> {
System.out.println(res5); // >>> 2
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res6 -> {
System.out.println(res6); // >>> bike:2
return asyncCommands.lpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> bike:1
.toCompletableFuture();
stack.join();
CompletableFuture<Void> llen = asyncCommands.llen("bikes:repairs")
.thenAccept(System.out::println) // >>> 0
.toCompletableFuture();
llen.join();
CompletableFuture<Void> lmovelrange = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res7 -> {
System.out.println(res7); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res8 -> {
System.out.println(res8); // >>> 2
return asyncCommands.lmove("bikes:repairs", "bikes:finished", LMoveArgs.Builder.leftLeft());
}).thenCompose(res9 -> {
System.out.println(res9); // >>> bike:2
return asyncCommands.lrange("bikes:repairs", 0, -1);
}).thenCompose(res10 -> {
System.out.println(res10); // >>> [bike:1]
return asyncCommands.lrange("bikes:finished", 0, -1);
})
.thenAccept(System.out::println) // >>> [bike:2]
.toCompletableFuture();
lmovelrange.join();
CompletableFuture<Void> lpushrpush = asyncCommands.rpush("bikes:repairs", "bike:1").thenCompose(res11 -> {
System.out.println(res11); // >>> 1
return asyncCommands.rpush("bikes:repairs", "bike:2");
}).thenCompose(res12 -> {
System.out.println(res12); // >>> 2
return asyncCommands.lpush("bikes:repairs", "bike:important_bike");
}).thenCompose(res13 -> {
System.out.println(res13); // >>> 3
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:important_bike, bike:1, bike:2]
.toCompletableFuture();
lpushrpush.join();
CompletableFuture<Void> variadic = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res14 -> {
System.out.println(res14); // >>> 3
return asyncCommands.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike");
}).thenCompose(res15 -> {
System.out.println(res15); // >>> 5
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3]
.toCompletableFuture();
variadic.join();
CompletableFuture<Void> lpoprpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res16 -> {
System.out.println(res16); // >>> 3
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res17 -> {
System.out.println(res17); // >>> bike:3
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res18 -> {
System.out.println(res18); // >>> bike:1
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res19 -> {
System.out.println(res19); // >>> bike:2
return asyncCommands.rpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
lpoprpop.join();
CompletableFuture<Void> ltrim = asyncCommands
.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res20 -> {
System.out.println(res20); // >>> 5
return asyncCommands.ltrim("bikes:repairs", 0, 2);
}).thenCompose(res21 -> {
System.out.println(res21); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:5, bike:4, bike:3]
.toCompletableFuture();
ltrim.join();
CompletableFuture<Void> ltrimendoflist = asyncCommands
.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res22 -> {
System.out.println(res22); // >>> 5
return asyncCommands.ltrim("bikes:repairs", -3, -1);
}).thenCompose(res23 -> {
System.out.println(res23); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:3, bike:4, bike:5]
.toCompletableFuture();
ltrimendoflist.join();
CompletableFuture<Void> brpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2").thenCompose(res24 -> {
System.out.println(res24); // >>> 2
return asyncCommands.brpop(1, "bikes:repairs");
}).thenCompose(res25 -> {
System.out.println(res25);
// >>> KeyValue[bikes:repairs, bike:2]
return asyncCommands.brpop(1, "bikes:repairs");
}).thenCompose(res26 -> {
System.out.println(res26);
// >>> KeyValue[bikes:repairs, bike:1]
return asyncCommands.brpop(1, "bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
brpop.join();
CompletableFuture<Void> rule1 = asyncCommands.del("new_bikes").thenCompose(res27 -> {
System.out.println(res27); // >>> 0
return asyncCommands.lpush("new_bikes", "bike:1", "bike:2", "bike:3");
})
.thenAccept(System.out::println) // >>> 3
.toCompletableFuture();
rule1.join();
CompletableFuture<Void> rule11 = asyncCommands.set("new_bikes_string", "bike:1").thenCompose(res28 -> {
System.out.println(res28); // >>> OK
return asyncCommands.type("new_bikes_string");
}).thenCompose(res29 -> {
System.out.println(res29); // >>> string
return asyncCommands.lpush("new_bikes_string", "bike:2", "bike:3");
}).handle((res, ex) -> {
if (ex == null) {
return res;
} else {
System.out.println(ex);
// >>> java.util.concurrent.CompletionException:
// >>> io.lettuce.core.RedisCommandExecutionException:
// >>> WRONGTYPE Operation against a key holding the wrong
// >>> kind of value
return -1L;
}
})
.thenAccept(System.out::println) // >>> -1
.toCompletableFuture();
rule11.join();
CompletableFuture<Void> rule2 = asyncCommands.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res30 -> {
System.out.println(res30); // >>> 3
return asyncCommands.exists("bikes:repairs");
}).thenCompose(res31 -> {
System.out.println(res31); // >>> 1
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res32 -> {
System.out.println(res32); // >>> bike:3
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res33 -> {
System.out.println(res33); // >>> bike:2
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res34 -> {
System.out.println(res34); // >>> bike:1
return asyncCommands.exists("bikes:repairs");
})
.thenAccept(System.out::println) // >>> 0
.toCompletableFuture();
rule2.join();
CompletableFuture<Void> rule3 = asyncCommands.del("bikes:repairs").thenCompose(res35 -> {
System.out.println(res35); // >>> 0
return asyncCommands.llen("bikes:repairs");
}).thenCompose(res36 -> {
System.out.println(res36); // >>> 0
return asyncCommands.lpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
rule3.join();
CompletableFuture<Void> ltrim1 = asyncCommands
.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res37 -> {
System.out.println(res37); // >>> 5
return asyncCommands.ltrim("bikes:repairs", 0, 2);
}).thenCompose(res38 -> {
System.out.println(res38); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3]
.toCompletableFuture();
ltrim1.join();
} finally {
redisClient.shutdown();
}
}
}
package example_commands_test
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
)
func ExampleClient_queue() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res1, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res1) // >>> 1
res2, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res2) // >>> 2
res3, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res3) // >>> bike:1
res4, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res4) // >>> bike:2
}
func ExampleClient_stack() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res5, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res5) // >>> 1
res6, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res6) // >>> 2
res7, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res7) // >>> bike:2
res8, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res8) // >>> bike:1
}
func ExampleClient_llen() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res9, err := rdb.LLen(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res9) // >>> 0
}
func ExampleClient_lmove_lrange() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res10, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res10) // >>> 1
res11, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res11) // >>> 2
res12, err := rdb.LMove(ctx, "bikes:repairs", "bikes:finished", "LEFT", "LEFT").Result()
if err != nil {
panic(err)
}
fmt.Println(res12) // >>> bike:2
res13, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res13) // >>> [bike:1]
res14, err := rdb.LRange(ctx, "bikes:finished", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res14) // >>> [bike:2]
}
func ExampleClient_lpush_rpush() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res15, err := rdb.RPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res15) // >>> 1
res16, err := rdb.RPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res16) // >>> 2
res17, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike").Result()
if err != nil {
panic(err)
}
fmt.Println(res17) // >>> 3
res18, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res18) // >>> [bike:important_bike bike:1 bike:2]
}
func ExampleClient_variadic() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res19, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res19) // >>> 3
res20, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike", "bike:very_important_bike").Result()
if err != nil {
panic(err)
}
fmt.Println(res20) // >>> 5
res21, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res21) // >>> [bike:very_important_bike bike:important_bike bike:1 bike:2 bike:3]
}
func ExampleClient_lpop_rpop() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res22, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res22) // >>> 3
res23, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res23) // >>> bike:3
res24, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res24) // >>> bike:1
res25, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res25) // >>> bike:2
res26, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res26) // >>> <empty string>
}
func ExampleClient_ltrim() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res27, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res27) // >>> 5
res28, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result()
if err != nil {
panic(err)
}
fmt.Println(res28) // >>> OK
res29, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res29) // >>> [bike:1 bike:2 bike:3]
}
func ExampleClient_ltrim_end_of_list() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res30, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res30) // >>> 5
res31, err := rdb.LTrim(ctx, "bikes:repairs", -3, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res31) // >>> OK
res32, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res32) // >>> [bike:3 bike:4 bike:5]
}
func ExampleClient_brpop() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res33, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res33) // >>> 2
res34, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res34) // >>> [bikes:repairs bike:2]
res35, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res35) // >>> [bikes:repairs bike:1]
res36, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res36) // >>> []
}
func ExampleClient_rule1() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res37, err := rdb.Del(ctx, "new_bikes").Result()
if err != nil {
panic(err)
}
fmt.Println(res37) // >>> 0
res38, err := rdb.LPush(ctx, "new_bikes", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res38) // >>> 3
}
func ExampleClient_rule11() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "new_bikes")
res39, err := rdb.Set(ctx, "new_bikes", "bike:1", 0).Result()
if err != nil {
panic(err)
}
fmt.Println(res39) // >>> OK
res40, err := rdb.Type(ctx, "new_bikes").Result()
if err != nil {
panic(err)
}
fmt.Println(res40) // >>> string
res41, err := rdb.LPush(ctx, "new_bikes", "bike:2", "bike:3").Result()
if err != nil {
fmt.Println(err)
// >>> WRONGTYPE Operation against a key holding the wrong kind of value
}
fmt.Println(res41)
}
func ExampleClient_rule2() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res42, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res42) // >>> 3
res43, err := rdb.Exists(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res43) // >>> 1
res44, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res44) // >>> bike:3
res45, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res45) // >>> bike:2
res46, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res46) // >>> bike:1
res47, err := rdb.Exists(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res47) // >>> 0
}
func ExampleClient_rule3() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res48, err := rdb.Del(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res48) // >>> 0
res49, err := rdb.LLen(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res49) // >>> 0
res50, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res50) // >>> <empty string>
}
func ExampleClient_ltrim1() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res51, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res51) // >>> 5
res52, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result()
if err != nil {
panic(err)
}
fmt.Println(res52) // >>> OK
res53, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res53) // >>> [bike:5 bike:4 bike:3]
}
using NRedisStack;
using StackExchange.Redis;
public class ListExample
{
public void Run()
{
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
var db = muxer.GetDatabase();
long res1 = db.ListLeftPush("bikes:repairs", "bike:1");
Console.WriteLine(res1); // >>> 1
long res2 = db.ListLeftPush("bikes:repairs", "bike:2");
Console.WriteLine(res2); // >>> 2
RedisValue res3 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res3); // >>> "bike:1"
RedisValue res4 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res4); // >>> "bike:2"
long res5 = db.ListLeftPush("bikes:repairs", "bike:1");
Console.WriteLine(res5); // >>> 1
long res6 = db.ListLeftPush("bikes:repairs", "bike:2");
Console.WriteLine(res6); // >>> 2
RedisValue res7 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res7); // >>> "bike:2"
RedisValue res8 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res8); // >>> "bike:1"
long res9 = db.ListLength("bikes:repairs");
Console.WriteLine(res9); // >>> 0
long res10 = db.ListLeftPush("{bikes}:repairs", "bike:1");
Console.WriteLine(res10); // >>> 1
long res11 = db.ListLeftPush("{bikes}:repairs", "bike:2");
Console.WriteLine(res11); // >>> 2
RedisValue res12 = db.ListMove("{bikes}:repairs", "{bikes}:finished", ListSide.Left, ListSide.Left);
Console.Write(res12); // >>> "bike:2"
RedisValue[] res13 = db.ListRange("{bikes}:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res13)); // >>> "bike:1"
RedisValue[] res14 = db.ListRange("{bikes}:finished", 0, -1);
Console.WriteLine(string.Join(", ", res14)); // >>> "bike:2"
db.KeyDelete("bikes:repairs");
long res15 = db.ListRightPush("bikes:repairs", "bike:1");
Console.WriteLine(res15); // >>> 1
long res16 = db.ListRightPush("bikes:repairs", "bike:2");
Console.WriteLine(res16); // >>> 2
long res17 = db.ListLeftPush("bikes:repairs", "bike:important_bike");
Console.WriteLine(res17); // >>> 3
RedisValue[] res18 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res18)); // >>> "bike:important_bike, bike:1, bike:2"
db.KeyDelete("bikes:repairs");
long res19 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res19); // >>> 3
long res20 = db.ListLeftPush("bikes:repairs", ["bike:important_bike", "bike:very_important_bike"]);
Console.WriteLine(res20); // >>> 5
RedisValue[] res21 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res21));
// >>> "bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3"
db.KeyDelete("bikes:repairs");
long res22 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res22); // >>> 3
RedisValue res23 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res23); // >>> "bike:3"
RedisValue res24 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res24); // >>> "bike:1"
RedisValue res25 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res25); // >>> "bike:2"
RedisValue res26 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res26); // >>> <Empty string>
long res27 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res27); // >>> 5
db.ListTrim("bikes:repairs", 0, 2);
RedisValue[] res28 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res28)); // "bike:5, bike:4, bike:3"
db.KeyDelete("bikes:repairs");
long res29 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res29); // >>> 5
db.ListTrim("bikes:repairs", -3, -1);
RedisValue[] res30 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res30)); // >>> "bike:3, bike:4, bike:5"
db.KeyDelete("bikes:repairs");
long res31 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2"]);
Console.WriteLine(res31); // >>> 2
Tuple<RedisKey, RedisValue>? res32 = db.BRPop(["bikes:repairs"], 1);
if (res32 != null)
Console.WriteLine($"{res32.Item1} -> {res32.Item2}"); // >>> "bikes:repairs -> bike:2"
Tuple<RedisKey, RedisValue>? res33 = db.BRPop(["bikes:repairs"], 1);
if (res33 != null)
Console.WriteLine($"{res33.Item1} -> {res33.Item2}"); // >>> "bikes:repairs -> bike:1"
Tuple<RedisKey, RedisValue>? res34 = db.BRPop(["bikes:repairs"], 1);
Console.WriteLine(res34); // >>> "Null"
db.KeyDelete("new_bikes");
long res36 = db.ListRightPush("new_bikes", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res36); // >>> 3
db.KeyDelete("new_bikes");
bool res37 = db.StringSet("new_bikes", "bike:1");
Console.WriteLine(res37); // >>> True
RedisType res38 = db.KeyType("new_bikes");
Console.WriteLine(res38); // >>> RedisType.String
try
{
long res39 = db.ListRightPush("new_bikes", ["bike:2", "bike:3"]);
}
catch (Exception e)
{
Console.WriteLine(e);
}
db.KeyDelete("bikes:repairs");
long res40 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res40); // >>> 3
bool res41 = db.KeyExists("bikes:repairs");
Console.WriteLine(res41); // >>> True
RedisValue res42 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res42); // >>> "bike:3"
RedisValue res43 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res43); // >>> "bike:2"
RedisValue res44 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res44); // >>> "bike:1"
bool res45 = db.KeyExists("bikes:repairs");
Console.WriteLine(res45); // >>> False
db.KeyDelete("bikes:repairs");
long res47 = db.ListLength("bikes:repairs");
Console.WriteLine(res47); // >>> 0
RedisValue res48 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res48); // >>> Null
db.KeyDelete("bikes:repairs");
long res49 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res49); // >>> 5
db.ListTrim("bikes:repairs", 0, 2);
RedisValue[] res50 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res50)); // >>> "bike:5, bike:4, bike:3"
}
}
<?php
require 'vendor/autoload.php';
use Predis\Client as PredisClient;
class DtListTest
{
public function testDtList() {
$r = new PredisClient([
'scheme' => 'tcp',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'database' => 0,
]);
$res1 = $r->lpush('bikes:repairs', 'bike:1');
echo $res1 . PHP_EOL;
// >>> 1
$res2 = $r->lpush('bikes:repairs', 'bike:2');
echo $res2 . PHP_EOL;
// >>> 2
$res3 = $r->rpop('bikes:repairs');
echo $res3 . PHP_EOL;
// >>> bike:1
$res4 = $r->rpop('bikes:repairs');
echo $res4 . PHP_EOL;
// >>> bike:2
$res5 = $r->lpush('bikes:repairs', 'bike:1');
echo $res5 . PHP_EOL;
// >>> 1
$res6 = $r->lpush('bikes:repairs', 'bike:2');
echo $res6 . PHP_EOL;
// >>> 2
$res7 = $r->lpop('bikes:repairs');
echo $res7 . PHP_EOL;
// >>> bike:2
$res8 = $r->lpop('bikes:repairs');
echo $res8 . PHP_EOL;
// >>> bike:1
$res9 = $r->llen('bikes:repairs');
echo $res9 . PHP_EOL;
// >>> 0
$res10 = $r->lpush('bikes:repairs', 'bike:1');
echo $res10 . PHP_EOL;
// >>> 1
$res11 = $r->lpush('bikes:repairs', 'bike:2');
echo $res11 . PHP_EOL;
// >>> 2
$res12 = $r->lmove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT');
echo $res12 . PHP_EOL;
// >>> 'bike:2'
$res13 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res13) . PHP_EOL;
// >>> ['bike:1']
$res14 = $r->lrange('bikes:finished', 0, -1);
echo json_encode($res14) . PHP_EOL;
// >>> ['bike:2']
$r->del('bikes:repairs');
$res15 = $r->rpush('bikes:repairs', 'bike:1');
echo $res15 . PHP_EOL;
// >>> 1
$res16 = $r->rpush('bikes:repairs', 'bike:2');
echo $res16 . PHP_EOL;
// >>> 2
$res17 = $r->lpush('bikes:repairs', 'bike:important_bike');
echo $res17 . PHP_EOL;
// >>> 3
$res18 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res18) . PHP_EOL;
// >>> ['bike:important_bike', 'bike:1', 'bike:2']
$r->del('bikes:repairs');
$res19 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3');
echo $res19 . PHP_EOL;
// >>> 3
$res20 = $r->lpush('bikes:repairs', 'bike:important_bike', 'bike:very_important_bike');
echo $res20 . PHP_EOL;
// >>> 5
$res21 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res21) . PHP_EOL;
// >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ...
$r->del('bikes:repairs');
$res22 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3');
echo $res22 . PHP_EOL;
// >>> 3
$res23 = $r->rpop('bikes:repairs');
echo $res23 . PHP_EOL;
// >>> 'bike:3'
$res24 = $r->lpop('bikes:repairs');
echo $res24 . PHP_EOL;
// >>> 'bike:1'
$res25 = $r->rpop('bikes:repairs');
echo $res25 . PHP_EOL;
// >>> 'bike:2'
$res26 = $r->rpop('bikes:repairs');
echo $res26 . PHP_EOL;
// >>> None
$res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5');
echo $res27 . PHP_EOL;
// >>> 5
$res28 = $r->ltrim('bikes:repairs', 0, 2);
echo $res28 . PHP_EOL;
// >>> True
$res29 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res29) . PHP_EOL;
// >>> ['bike:1', 'bike:2', 'bike:3']
$r->del('bikes:repairs');
$res27 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5');
echo $res27 . PHP_EOL;
// >>> 5
$res28 = $r->ltrim('bikes:repairs', -3, -1);
echo $res28 . PHP_EOL;
// >>> True
$res29 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res29) . PHP_EOL;
// >>> ['bike:3', 'bike:4', 'bike:5']
$r->del('bikes:repairs');
$res31 = $r->rpush('bikes:repairs', 'bike:1', 'bike:2');
echo $res31 . PHP_EOL;
// >>> 2
$res32 = $r->brpop('bikes:repairs', 1);
echo json_encode($res32) . PHP_EOL;
// >>> ['bikes:repairs', 'bike:2']
$res33 = $r->brpop('bikes:repairs', 1);
echo json_encode($res33) . PHP_EOL;
// >>> ['bikes:repairs', 'bike:1']
$res34 = $r->brpop('bikes:repairs', 1);
echo json_encode($res34) . PHP_EOL;
// >>> None
$res35 = $r->del('new_bikes');
echo $res35 . PHP_EOL;
// >>> 0
$res36 = $r->lpush('new_bikes', 'bike:1', 'bike:2', 'bike:3');
echo $res36 . PHP_EOL;
// >>> 3
$r->del('new_bikes');
$res37 = $r->set('new_bikes', 'bike:1');
echo $res37 . PHP_EOL;
// >>> True
$res38 = $r->type('new_bikes');
echo $res38 . PHP_EOL;
// >>> 'string'
try {
$res39 = $r->lpush('new_bikes', 'bike:2', 'bike:3');
// >>> redis.exceptions.ResponseError:
// >>> WRONGTYPE Operation against a key holding the wrong kind of value
} catch (\Predis\Response\ServerException $e) {
echo $e->getMessage() . PHP_EOL;
}
$r->del('bikes:repairs');
$res36 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3');
echo $res36 . PHP_EOL;
// >>> 3
$res40 = $r->exists('bikes:repairs');
echo $res40 . PHP_EOL;
// >>> 1
$res41 = $r->lpop('bikes:repairs');
echo $res41 . PHP_EOL;
// >>> 'bike:3'
$res42 = $r->lpop('bikes:repairs');
echo $res42 . PHP_EOL;
// >>> 'bike:2'
$res43 = $r->lpop('bikes:repairs');
echo $res43 . PHP_EOL;
// >>> 'bike:1'
$res44 = $r->exists('bikes:repairs');
echo $res44 . PHP_EOL;
// >>> False
$res45 = $r->del('bikes:repairs');
echo $res45 . PHP_EOL;
// >>> 0
$res46 = $r->llen('bikes:repairs');
echo $res46 . PHP_EOL;
// >>> 0
$res47 = $r->lpop('bikes:repairs');
echo $res47 . PHP_EOL;
// >>> None
$res48 = $r->lpush('bikes:repairs', 'bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5');
echo $res48 . PHP_EOL;
// >>> 5
$res49 = $r->ltrim('bikes:repairs', 0, 2);
echo $res49 . PHP_EOL;
// >>> True
$res50 = $r->lrange('bikes:repairs', 0, -1);
echo json_encode($res50) . PHP_EOL;
// >>> ['bike:5', 'bike:4', 'bike:3']
}
}
An important operation defined on Redis lists is the ability to pop elements. Popping elements is the operation of both retrieving the element from the list, and eliminating it from the list, at the same time. You can pop elements from left and right, similarly to how you can push elements in both sides of the list. We'll add three elements and pop three elements, so at the end of this sequence of commands the list is empty and there are no more elements to pop:
> DEL bikes:repairs
(integer) 1
> RPUSH bikes:repairs bike:1 bike:2 bike:3
(integer) 3
> RPOP bikes:repairs
"bike:3"
> LPOP bikes:repairs
"bike:1"
> RPOP bikes:repairs
"bike:2"
> RPOP bikes:repairs
(nil)"""
Code samples for List doc pages:
https://redis.io/docs/latest/develop/data-types/lists/
"""
import redis
r = redis.Redis(decode_responses=True)
res1 = r.lpush("bikes:repairs", "bike:1")
print(res1) # >>> 1
res2 = r.lpush("bikes:repairs", "bike:2")
print(res2) # >>> 2
res3 = r.rpop("bikes:repairs")
print(res3) # >>> bike:1
res4 = r.rpop("bikes:repairs")
print(res4) # >>> bike:2
res5 = r.lpush("bikes:repairs", "bike:1")
print(res5) # >>> 1
res6 = r.lpush("bikes:repairs", "bike:2")
print(res6) # >>> 2
res7 = r.lpop("bikes:repairs")
print(res7) # >>> bike:2
res8 = r.lpop("bikes:repairs")
print(res8) # >>> bike:1
res9 = r.llen("bikes:repairs")
print(res9) # >>> 0
res10 = r.lpush("bikes:repairs", "bike:1")
print(res10) # >>> 1
res11 = r.lpush("bikes:repairs", "bike:2")
print(res11) # >>> 2
res12 = r.lmove("bikes:repairs", "bikes:finished", "LEFT", "LEFT")
print(res12) # >>> 'bike:2'
res13 = r.lrange("bikes:repairs", 0, -1)
print(res13) # >>> ['bike:1']
res14 = r.lrange("bikes:finished", 0, -1)
print(res14) # >>> ['bike:2']
r.delete("bikes:repairs")
res15 = r.rpush("bikes:repairs", "bike:1")
print(res15) # >>> 1
res16 = r.rpush("bikes:repairs", "bike:2")
print(res16) # >>> 2
res17 = r.lpush("bikes:repairs", "bike:important_bike")
print(res17) # >>> 3
res18 = r.lrange("bikes:repairs", 0, -1)
print(res18) # >>> ['bike:important_bike', 'bike:1', 'bike:2']
r.delete("bikes:repairs")
res19 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res19) # >>> 3
res20 = r.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike")
print(res20) # >>> 5
res21 = r.lrange("bikes:repairs", 0, -1)
print(
res21
) # >>> ['bike:very_important_bike', 'bike:important_bike', 'bike:1', ...
r.delete("bikes:repairs")
res22 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res22) # >>> 3
res23 = r.rpop("bikes:repairs")
print(res23) # >>> 'bike:3'
res24 = r.lpop("bikes:repairs")
print(res24) # >>> 'bike:1'
res25 = r.rpop("bikes:repairs")
print(res25) # >>> 'bike:2'
res26 = r.rpop("bikes:repairs")
print(res26) # >>> None
res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res27) # >>> 5
res28 = r.ltrim("bikes:repairs", 0, 2)
print(res28) # >>> True
res29 = r.lrange("bikes:repairs", 0, -1)
print(res29) # >>> ['bike:1', 'bike:2', 'bike:3']
r.delete("bikes:repairs")
res27 = r.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res27) # >>> 5
res28 = r.ltrim("bikes:repairs", -3, -1)
print(res28) # >>> True
res29 = r.lrange("bikes:repairs", 0, -1)
print(res29) # >>> ['bike:3', 'bike:4', 'bike:5']
r.delete("bikes:repairs")
res31 = r.rpush("bikes:repairs", "bike:1", "bike:2")
print(res31) # >>> 2
res32 = r.brpop("bikes:repairs", timeout=1)
print(res32) # >>> ('bikes:repairs', 'bike:2')
res33 = r.brpop("bikes:repairs", timeout=1)
print(res33) # >>> ('bikes:repairs', 'bike:1')
res34 = r.brpop("bikes:repairs", timeout=1)
print(res34) # >>> None
res35 = r.delete("new_bikes")
print(res35) # >>> 0
res36 = r.lpush("new_bikes", "bike:1", "bike:2", "bike:3")
print(res36) # >>> 3
r.delete("new_bikes")
res37 = r.set("new_bikes", "bike:1")
print(res37) # >>> True
res38 = r.type("new_bikes")
print(res38) # >>> 'string'
try:
res39 = r.lpush("new_bikes", "bike:2", "bike:3")
# >>> redis.exceptions.ResponseError:
# >>> WRONGTYPE Operation against a key holding the wrong kind of value
except redis.exceptions.ResponseError as e:
print(e)
r.delete("bikes:repairs")
r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
print(res36) # >>> 3
res40 = r.exists("bikes:repairs")
print(res40) # >>> 1
res41 = r.lpop("bikes:repairs")
print(res41) # >>> 'bike:3'
res42 = r.lpop("bikes:repairs")
print(res42) # >>> 'bike:2'
res43 = r.lpop("bikes:repairs")
print(res43) # >>> 'bike:1'
res44 = r.exists("bikes:repairs")
print(res44) # >>> False
r.delete("bikes:repairs")
res45 = r.delete("bikes:repairs")
print(res45) # >>> 0
res46 = r.llen("bikes:repairs")
print(res46) # >>> 0
res47 = r.lpop("bikes:repairs")
print(res47) # >>> None
r.delete("bikes:repairs")
res48 = r.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5")
print(res48) # >>> 5
res49 = r.ltrim("bikes:repairs", 0, 2)
print(res49) # >>> True
res50 = r.lrange("bikes:repairs", 0, -1)
print(res50) # >>> ['bike:5', 'bike:4', 'bike:3']
import { createClient } from 'redis';
const client = createClient();
await client.connect();
const res1 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res1); // 1
const res2 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res2); // 2
const res3 = await client.rPop('bikes:repairs');
console.log(res3); // bike:1
const res4 = await client.rPop('bikes:repairs');
console.log(res4); // bike:2
const res5 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res5); // 1
const res6 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res6); // 2
const res7 = await client.lPop('bikes:repairs');
console.log(res7); // bike:2
const res8 = await client.lPop('bikes:repairs');
console.log(res8); // bike:1
const res9 = await client.lLen('bikes:repairs');
console.log(res9); // 0
const res10 = await client.lPush('bikes:repairs', 'bike:1');
console.log(res10); // 1
const res11 = await client.lPush('bikes:repairs', 'bike:2');
console.log(res11); // 2
const res12 = await client.lMove('bikes:repairs', 'bikes:finished', 'LEFT', 'LEFT');
console.log(res12); // 'bike:2'
const res13 = await client.lRange('bikes:repairs', 0, -1);
console.log(res13); // ['bike:1']
const res14 = await client.lRange('bikes:finished', 0, -1);
console.log(res14); // ['bike:2']
await client.del('bikes:repairs');
const res15 = await client.rPush('bikes:repairs', 'bike:1');
console.log(res15); // 1
const res16 = await client.rPush('bikes:repairs', 'bike:2');
console.log(res16); // 2
const res17 = await client.lPush('bikes:repairs', 'bike:important_bike');
console.log(res17); // 3
const res18 = await client.lRange('bikes:repairs', 0, -1);
console.log(res18); // ['bike:important_bike', 'bike:1', 'bike:2']
await client.del('bikes:repairs');
const res19 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res19); // 3
const res20 = await client.lPush(
'bikes:repairs', ['bike:important_bike', 'bike:very_important_bike']
);
console.log(res20); // 5
const res21 = await client.lRange('bikes:repairs', 0, -1);
console.log(res21); // ['bike:very_important_bike', 'bike:important_bike', 'bike:1', 'bike:2', 'bike:3']
await client.del('bikes:repairs');
const res22 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res22); // 3
const res23 = await client.rPop('bikes:repairs');
console.log(res23); // 'bike:3'
const res24 = await client.lPop('bikes:repairs');
console.log(res24); // 'bike:1'
const res25 = await client.rPop('bikes:repairs');
console.log(res25); // 'bike:2'
const res26 = await client.rPop('bikes:repairs');
console.log(res26); // null
const res27 = await client.lPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res27); // 5
const res28 = await client.lTrim('bikes:repairs', 0, 2);
console.log(res28); // OK
const res29 = await client.lRange('bikes:repairs', 0, -1);
console.log(res29); // ['bike:5', 'bike:4', 'bike:3']
await client.del('bikes:repairs');
const res27eol = await client.rPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res27eol); // 5
const res28eol = await client.lTrim('bikes:repairs', -3, -1);
console.log(res28eol); // 'OK'
const res29eol = await client.lRange('bikes:repairs', 0, -1);
console.log(res29eol); // ['bike:3', 'bike:4', 'bike:5']
await client.del('bikes:repairs');
const res31 = await client.rPush('bikes:repairs', ['bike:1', 'bike:2']);
console.log(res31); // 2
const res32 = await client.brPop('bikes:repairs', 1);
console.log(res32); // { key: 'bikes:repairs', element: 'bike:2' }
const res33 = await client.brPop('bikes:repairs', 1);
console.log(res33); // { key: 'bikes:repairs', element: 'bike:1' }
const res34 = await client.brPop('bikes:repairs', 1);
console.log(res34); // null
const res35 = await client.del('new_bikes');
console.log(res35); // 0
const res36 = await client.lPush('new_bikes', ['bike:1', 'bike:2', 'bike:3']);
console.log(res36); // 3
await client.del('new_bikes');
const res37 = await client.set('new_bikes', 'bike:1');
console.log(res37); // 'OK'
const res38 = await client.type('new_bikes');
console.log(res38); // 'string'
try {
const res39 = await client.lPush('new_bikes', 'bike:2', 'bike:3');
// redis.exceptions.ResponseError:
// [SimpleError: WRONGTYPE Operation against a key holding the wrong kind of value]
}
catch(e){
console.log(e);
}
await client.del('bikes:repairs');
await client.lPush('bikes:repairs', ['bike:1', 'bike:2', 'bike:3']);
console.log(res36); // 3
const res40 = await client.exists('bikes:repairs')
console.log(res40); // 1
const res41 = await client.lPop('bikes:repairs');
console.log(res41); // 'bike:3'
const res42 = await client.lPop('bikes:repairs');
console.log(res42); // 'bike:2'
const res43 = await client.lPop('bikes:repairs');
console.log(res43); // 'bike:1'
const res44 = await client.exists('bikes:repairs');
console.log(res44); // 0
await client.del('bikes:repairs');
const res45 = await client.del('bikes:repairs');
console.log(res45); // 0
const res46 = await client.lLen('bikes:repairs');
console.log(res46); // 0
const res47 = await client.lPop('bikes:repairs');
console.log(res47); // null
await client.del('bikes:repairs');
const res48 = await client.lPush(
'bikes:repairs', ['bike:1', 'bike:2', 'bike:3', 'bike:4', 'bike:5']
);
console.log(res48); // 5
const res49 = await client.lTrim('bikes:repairs', 0, 2);
console.log(res49); // 'OK'
const res50 = await client.lRange('bikes:repairs', 0, -1);
console.log(res50); // ['bike:5', 'bike:4', 'bike:3']
await client.close();
import redis.clients.jedis.UnifiedJedis;
import redis.clients.jedis.args.ListDirection;
import java.util.List;
public class ListExample {
public void run() {
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
long res1 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res1); // >>> 1
long res2 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res2); // >>> 2
String res3 = jedis.rpop("bikes:repairs");
System.out.println(res3); // >>> bike:1
String res4 = jedis.rpop("bikes:repairs");
System.out.println(res4); // >>> bike:2
long res5 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res5); // >>> 1
long res6 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res6); // >>> 2
String res7 = jedis.lpop("bikes:repairs");
System.out.println(res7); // >>> bike:2
String res8 = jedis.lpop("bikes:repairs");
System.out.println(res8); // >>> bike:1
long res9 = jedis.llen("bikes:repairs");
System.out.println(res9); // >>> 0
long res10 = jedis.lpush("bikes:repairs", "bike:1");
System.out.println(res10); // >>> 1
long res11 = jedis.lpush("bikes:repairs", "bike:2");
System.out.println(res11); // >>> 2
String res12 = jedis.lmove("bikes:repairs", "bikes:finished", ListDirection.LEFT, ListDirection.LEFT);
System.out.println(res12); // >>> bike:2
List<String> res13 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res13); // >>> [bike:1]
List<String> res14 = jedis.lrange("bikes:finished", 0, -1);
System.out.println(res14); // >>> [bike:2]
jedis.del("bikes:repairs");
long res15 = jedis.rpush("bikes:repairs", "bike:1");
System.out.println(res15); // >>> 1
long res16 = jedis.rpush("bikes:repairs", "bike:2");
System.out.println(res16); // >>> 2
long res17 = jedis.lpush("bikes:repairs", "bike:important_bike");
System.out.println(res17); // >>> 3
List<String> res18 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res18); // >>> [bike:important_bike, bike:1, bike:2]
jedis.del("bikes:repairs");
long res19 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res19); // >>> 3
long res20 = jedis.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike");
System.out.println(res20); // >>> 5
List<String> res21 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res21); // >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3]
jedis.del("bikes:repairs");
long res22 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res22); // >>> 3
String res23 = jedis.rpop("bikes:repairs");
System.out.println(res23); // >>> bike:3
String res24 = jedis.lpop("bikes:repairs");
System.out.println(res24); // >>> bike:1
String res25 = jedis.rpop("bikes:repairs");
System.out.println(res25); // >>> bike:2
String res26 = jedis.rpop("bikes:repairs");
System.out.println(res26); // >>> null
long res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res27); // >>> 5
String res28 = jedis.ltrim("bikes:repairs", 0, 2);
System.out.println(res28); // >>> OK
List<String> res29 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res29); // >>> [bike:1, bike:2, bike:3]
jedis.del("bikes:repairs");
res27 = jedis.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res27); // >>> 5
res28 = jedis.ltrim("bikes:repairs", -3, -1);
System.out.println(res2); // >>> OK
res29 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res29); // >>> [bike:3, bike:4, bike:5]
jedis.del("bikes:repairs");
long res31 = jedis.rpush("bikes:repairs", "bike:1", "bike:2");
System.out.println(res31); // >>> 2
List<String> res32 = jedis.brpop(1, "bikes:repairs");
System.out.println(res32); // >>> (bikes:repairs, bike:2)
List<String> res33 = jedis.brpop(1,"bikes:repairs");
System.out.println(res33); // >>> (bikes:repairs, bike:1)
List<String> res34 = jedis.brpop(1,"bikes:repairs");
System.out.println(res34); // >>> null
jedis.del("new_bikes");
long res36 = jedis.lpush("new_bikes", "bike:1", "bike:2", "bike:3");
System.out.println(res36); // >>> 3
jedis.del("new_bikes");
String res37 = jedis.set("new_bikes", "bike:1");
System.out.println(res37); // >>> OK
String res38 = jedis.type("new_bikes");
System.out.println(res38); // >>> string
try {
long res39 = jedis.lpush("new_bikes", "bike:2", "bike:3");
} catch (Exception e) {
e.printStackTrace();
// >>> redis.clients.jedis.exceptions.JedisDataException:
// >>> WRONGTYPE Operation against a key holding the wrong kind of value
}
jedis.del("bikes:repairs");
jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3");
System.out.println(res36); // >>> 3
boolean res40 = jedis.exists("bikes:repairs");
System.out.println(res40); // >>> true
String res41 = jedis.lpop("bikes:repairs");
System.out.println(res41); // >>> bike:3
String res42 = jedis.lpop("bikes:repairs");
System.out.println(res42); // >>> bike:2
String res43 = jedis.lpop("bikes:repairs");
System.out.println(res43); // >>> bike:1
boolean res44 = jedis.exists("bikes:repairs");
System.out.println(res44); // >>> false
jedis.del("bikes:repairs");
long res46 = jedis.llen("bikes:repairs");
System.out.println(res46); // >>> 0
String res47 = jedis.lpop("bikes:repairs");
System.out.println(res47); // >>> null
jedis.del("bikes:repairs");
long res48 = jedis.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5");
System.out.println(res48); // >>> 5
String res49 = jedis.ltrim("bikes:repairs", 0, 2);
System.out.println(res49); // >>> OK
List<String> res50 = jedis.lrange("bikes:repairs", 0, -1);
System.out.println(res50); // >>> [bike:5, bike:4, bike:3]
jedis.close();
}
}
package io.redis.examples.async;
import io.lettuce.core.*;
import io.lettuce.core.api.async.RedisAsyncCommands;
import io.lettuce.core.api.StatefulRedisConnection;
import java.util.concurrent.CompletableFuture;
public class ListExample {
public void run() {
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
RedisAsyncCommands<String, String> asyncCommands = connection.async();
CompletableFuture<Void> queue = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res1 -> {
System.out.println(res1); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res2 -> {
System.out.println(res2); // >>> 2
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res3 -> {
System.out.println(res3); // >>> bike:1
return asyncCommands.rpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> bike:2
.toCompletableFuture();
queue.join();
CompletableFuture<Void> stack = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res4 -> {
System.out.println(res4); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res5 -> {
System.out.println(res5); // >>> 2
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res6 -> {
System.out.println(res6); // >>> bike:2
return asyncCommands.lpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> bike:1
.toCompletableFuture();
stack.join();
CompletableFuture<Void> llen = asyncCommands.llen("bikes:repairs")
.thenAccept(System.out::println) // >>> 0
.toCompletableFuture();
llen.join();
CompletableFuture<Void> lmovelrange = asyncCommands.lpush("bikes:repairs", "bike:1").thenCompose(res7 -> {
System.out.println(res7); // >>> 1
return asyncCommands.lpush("bikes:repairs", "bike:2");
}).thenCompose(res8 -> {
System.out.println(res8); // >>> 2
return asyncCommands.lmove("bikes:repairs", "bikes:finished", LMoveArgs.Builder.leftLeft());
}).thenCompose(res9 -> {
System.out.println(res9); // >>> bike:2
return asyncCommands.lrange("bikes:repairs", 0, -1);
}).thenCompose(res10 -> {
System.out.println(res10); // >>> [bike:1]
return asyncCommands.lrange("bikes:finished", 0, -1);
})
.thenAccept(System.out::println) // >>> [bike:2]
.toCompletableFuture();
lmovelrange.join();
CompletableFuture<Void> lpushrpush = asyncCommands.rpush("bikes:repairs", "bike:1").thenCompose(res11 -> {
System.out.println(res11); // >>> 1
return asyncCommands.rpush("bikes:repairs", "bike:2");
}).thenCompose(res12 -> {
System.out.println(res12); // >>> 2
return asyncCommands.lpush("bikes:repairs", "bike:important_bike");
}).thenCompose(res13 -> {
System.out.println(res13); // >>> 3
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:important_bike, bike:1, bike:2]
.toCompletableFuture();
lpushrpush.join();
CompletableFuture<Void> variadic = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res14 -> {
System.out.println(res14); // >>> 3
return asyncCommands.lpush("bikes:repairs", "bike:important_bike", "bike:very_important_bike");
}).thenCompose(res15 -> {
System.out.println(res15); // >>> 5
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3]
.toCompletableFuture();
variadic.join();
CompletableFuture<Void> lpoprpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res16 -> {
System.out.println(res16); // >>> 3
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res17 -> {
System.out.println(res17); // >>> bike:3
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res18 -> {
System.out.println(res18); // >>> bike:1
return asyncCommands.rpop("bikes:repairs");
}).thenCompose(res19 -> {
System.out.println(res19); // >>> bike:2
return asyncCommands.rpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
lpoprpop.join();
CompletableFuture<Void> ltrim = asyncCommands
.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res20 -> {
System.out.println(res20); // >>> 5
return asyncCommands.ltrim("bikes:repairs", 0, 2);
}).thenCompose(res21 -> {
System.out.println(res21); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:5, bike:4, bike:3]
.toCompletableFuture();
ltrim.join();
CompletableFuture<Void> ltrimendoflist = asyncCommands
.rpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res22 -> {
System.out.println(res22); // >>> 5
return asyncCommands.ltrim("bikes:repairs", -3, -1);
}).thenCompose(res23 -> {
System.out.println(res23); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println)
// >>> [bike:3, bike:4, bike:5]
.toCompletableFuture();
ltrimendoflist.join();
CompletableFuture<Void> brpop = asyncCommands.rpush("bikes:repairs", "bike:1", "bike:2").thenCompose(res24 -> {
System.out.println(res24); // >>> 2
return asyncCommands.brpop(1, "bikes:repairs");
}).thenCompose(res25 -> {
System.out.println(res25);
// >>> KeyValue[bikes:repairs, bike:2]
return asyncCommands.brpop(1, "bikes:repairs");
}).thenCompose(res26 -> {
System.out.println(res26);
// >>> KeyValue[bikes:repairs, bike:1]
return asyncCommands.brpop(1, "bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
brpop.join();
CompletableFuture<Void> rule1 = asyncCommands.del("new_bikes").thenCompose(res27 -> {
System.out.println(res27); // >>> 0
return asyncCommands.lpush("new_bikes", "bike:1", "bike:2", "bike:3");
})
.thenAccept(System.out::println) // >>> 3
.toCompletableFuture();
rule1.join();
CompletableFuture<Void> rule11 = asyncCommands.set("new_bikes_string", "bike:1").thenCompose(res28 -> {
System.out.println(res28); // >>> OK
return asyncCommands.type("new_bikes_string");
}).thenCompose(res29 -> {
System.out.println(res29); // >>> string
return asyncCommands.lpush("new_bikes_string", "bike:2", "bike:3");
}).handle((res, ex) -> {
if (ex == null) {
return res;
} else {
System.out.println(ex);
// >>> java.util.concurrent.CompletionException:
// >>> io.lettuce.core.RedisCommandExecutionException:
// >>> WRONGTYPE Operation against a key holding the wrong
// >>> kind of value
return -1L;
}
})
.thenAccept(System.out::println) // >>> -1
.toCompletableFuture();
rule11.join();
CompletableFuture<Void> rule2 = asyncCommands.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3")
.thenCompose(res30 -> {
System.out.println(res30); // >>> 3
return asyncCommands.exists("bikes:repairs");
}).thenCompose(res31 -> {
System.out.println(res31); // >>> 1
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res32 -> {
System.out.println(res32); // >>> bike:3
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res33 -> {
System.out.println(res33); // >>> bike:2
return asyncCommands.lpop("bikes:repairs");
}).thenCompose(res34 -> {
System.out.println(res34); // >>> bike:1
return asyncCommands.exists("bikes:repairs");
})
.thenAccept(System.out::println) // >>> 0
.toCompletableFuture();
rule2.join();
CompletableFuture<Void> rule3 = asyncCommands.del("bikes:repairs").thenCompose(res35 -> {
System.out.println(res35); // >>> 0
return asyncCommands.llen("bikes:repairs");
}).thenCompose(res36 -> {
System.out.println(res36); // >>> 0
return asyncCommands.lpop("bikes:repairs");
})
.thenAccept(System.out::println) // >>> null
.toCompletableFuture();
rule3.join();
CompletableFuture<Void> ltrim1 = asyncCommands
.lpush("bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").thenCompose(res37 -> {
System.out.println(res37); // >>> 5
return asyncCommands.ltrim("bikes:repairs", 0, 2);
}).thenCompose(res38 -> {
System.out.println(res38); // >>> OK
return asyncCommands.lrange("bikes:repairs", 0, -1);
})
.thenAccept(System.out::println) // >>> [bike:5, bike:4, bike:3]
.toCompletableFuture();
ltrim1.join();
} finally {
redisClient.shutdown();
}
}
}
package example_commands_test
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
)
func ExampleClient_queue() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res1, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res1) // >>> 1
res2, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res2) // >>> 2
res3, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res3) // >>> bike:1
res4, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res4) // >>> bike:2
}
func ExampleClient_stack() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res5, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res5) // >>> 1
res6, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res6) // >>> 2
res7, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res7) // >>> bike:2
res8, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res8) // >>> bike:1
}
func ExampleClient_llen() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res9, err := rdb.LLen(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res9) // >>> 0
}
func ExampleClient_lmove_lrange() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res10, err := rdb.LPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res10) // >>> 1
res11, err := rdb.LPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res11) // >>> 2
res12, err := rdb.LMove(ctx, "bikes:repairs", "bikes:finished", "LEFT", "LEFT").Result()
if err != nil {
panic(err)
}
fmt.Println(res12) // >>> bike:2
res13, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res13) // >>> [bike:1]
res14, err := rdb.LRange(ctx, "bikes:finished", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res14) // >>> [bike:2]
}
func ExampleClient_lpush_rpush() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res15, err := rdb.RPush(ctx, "bikes:repairs", "bike:1").Result()
if err != nil {
panic(err)
}
fmt.Println(res15) // >>> 1
res16, err := rdb.RPush(ctx, "bikes:repairs", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res16) // >>> 2
res17, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike").Result()
if err != nil {
panic(err)
}
fmt.Println(res17) // >>> 3
res18, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res18) // >>> [bike:important_bike bike:1 bike:2]
}
func ExampleClient_variadic() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res19, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res19) // >>> 3
res20, err := rdb.LPush(ctx, "bikes:repairs", "bike:important_bike", "bike:very_important_bike").Result()
if err != nil {
panic(err)
}
fmt.Println(res20) // >>> 5
res21, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res21) // >>> [bike:very_important_bike bike:important_bike bike:1 bike:2 bike:3]
}
func ExampleClient_lpop_rpop() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res22, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res22) // >>> 3
res23, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res23) // >>> bike:3
res24, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res24) // >>> bike:1
res25, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res25) // >>> bike:2
res26, err := rdb.RPop(ctx, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res26) // >>> <empty string>
}
func ExampleClient_ltrim() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res27, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res27) // >>> 5
res28, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result()
if err != nil {
panic(err)
}
fmt.Println(res28) // >>> OK
res29, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res29) // >>> [bike:1 bike:2 bike:3]
}
func ExampleClient_ltrim_end_of_list() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res30, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res30) // >>> 5
res31, err := rdb.LTrim(ctx, "bikes:repairs", -3, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res31) // >>> OK
res32, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res32) // >>> [bike:3 bike:4 bike:5]
}
func ExampleClient_brpop() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res33, err := rdb.RPush(ctx, "bikes:repairs", "bike:1", "bike:2").Result()
if err != nil {
panic(err)
}
fmt.Println(res33) // >>> 2
res34, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res34) // >>> [bikes:repairs bike:2]
res35, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res35) // >>> [bikes:repairs bike:1]
res36, err := rdb.BRPop(ctx, 1, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res36) // >>> []
}
func ExampleClient_rule1() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
res37, err := rdb.Del(ctx, "new_bikes").Result()
if err != nil {
panic(err)
}
fmt.Println(res37) // >>> 0
res38, err := rdb.LPush(ctx, "new_bikes", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res38) // >>> 3
}
func ExampleClient_rule11() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "new_bikes")
res39, err := rdb.Set(ctx, "new_bikes", "bike:1", 0).Result()
if err != nil {
panic(err)
}
fmt.Println(res39) // >>> OK
res40, err := rdb.Type(ctx, "new_bikes").Result()
if err != nil {
panic(err)
}
fmt.Println(res40) // >>> string
res41, err := rdb.LPush(ctx, "new_bikes", "bike:2", "bike:3").Result()
if err != nil {
fmt.Println(err)
// >>> WRONGTYPE Operation against a key holding the wrong kind of value
}
fmt.Println(res41)
}
func ExampleClient_rule2() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res42, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3").Result()
if err != nil {
panic(err)
}
fmt.Println(res42) // >>> 3
res43, err := rdb.Exists(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res43) // >>> 1
res44, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res44) // >>> bike:3
res45, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res45) // >>> bike:2
res46, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res46) // >>> bike:1
res47, err := rdb.Exists(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res47) // >>> 0
}
func ExampleClient_rule3() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res48, err := rdb.Del(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res48) // >>> 0
res49, err := rdb.LLen(ctx, "bikes:repairs").Result()
if err != nil {
panic(err)
}
fmt.Println(res49) // >>> 0
res50, err := rdb.LPop(ctx, "bikes:repairs").Result()
if err != nil {
fmt.Println(err) // >>> redis: nil
}
fmt.Println(res50) // >>> <empty string>
}
func ExampleClient_ltrim1() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password docs
DB: 0, // use default DB
})
rdb.Del(ctx, "bikes:repairs")
res51, err := rdb.LPush(ctx, "bikes:repairs", "bike:1", "bike:2", "bike:3", "bike:4", "bike:5").Result()
if err != nil {
panic(err)
}
fmt.Println(res51) // >>> 5
res52, err := rdb.LTrim(ctx, "bikes:repairs", 0, 2).Result()
if err != nil {
panic(err)
}
fmt.Println(res52) // >>> OK
res53, err := rdb.LRange(ctx, "bikes:repairs", 0, -1).Result()
if err != nil {
panic(err)
}
fmt.Println(res53) // >>> [bike:5 bike:4 bike:3]
}
using NRedisStack;
using StackExchange.Redis;
public class ListExample
{
public void Run()
{
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
var db = muxer.GetDatabase();
long res1 = db.ListLeftPush("bikes:repairs", "bike:1");
Console.WriteLine(res1); // >>> 1
long res2 = db.ListLeftPush("bikes:repairs", "bike:2");
Console.WriteLine(res2); // >>> 2
RedisValue res3 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res3); // >>> "bike:1"
RedisValue res4 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res4); // >>> "bike:2"
long res5 = db.ListLeftPush("bikes:repairs", "bike:1");
Console.WriteLine(res5); // >>> 1
long res6 = db.ListLeftPush("bikes:repairs", "bike:2");
Console.WriteLine(res6); // >>> 2
RedisValue res7 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res7); // >>> "bike:2"
RedisValue res8 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res8); // >>> "bike:1"
long res9 = db.ListLength("bikes:repairs");
Console.WriteLine(res9); // >>> 0
long res10 = db.ListLeftPush("{bikes}:repairs", "bike:1");
Console.WriteLine(res10); // >>> 1
long res11 = db.ListLeftPush("{bikes}:repairs", "bike:2");
Console.WriteLine(res11); // >>> 2
RedisValue res12 = db.ListMove("{bikes}:repairs", "{bikes}:finished", ListSide.Left, ListSide.Left);
Console.Write(res12); // >>> "bike:2"
RedisValue[] res13 = db.ListRange("{bikes}:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res13)); // >>> "bike:1"
RedisValue[] res14 = db.ListRange("{bikes}:finished", 0, -1);
Console.WriteLine(string.Join(", ", res14)); // >>> "bike:2"
db.KeyDelete("bikes:repairs");
long res15 = db.ListRightPush("bikes:repairs", "bike:1");
Console.WriteLine(res15); // >>> 1
long res16 = db.ListRightPush("bikes:repairs", "bike:2");
Console.WriteLine(res16); // >>> 2
long res17 = db.ListLeftPush("bikes:repairs", "bike:important_bike");
Console.WriteLine(res17); // >>> 3
RedisValue[] res18 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res18)); // >>> "bike:important_bike, bike:1, bike:2"
db.KeyDelete("bikes:repairs");
long res19 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res19); // >>> 3
long res20 = db.ListLeftPush("bikes:repairs", ["bike:important_bike", "bike:very_important_bike"]);
Console.WriteLine(res20); // >>> 5
RedisValue[] res21 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res21));
// >>> "bike:very_important_bike, bike:important_bike, bike:1, bike:2, bike:3"
db.KeyDelete("bikes:repairs");
long res22 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res22); // >>> 3
RedisValue res23 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res23); // >>> "bike:3"
RedisValue res24 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res24); // >>> "bike:1"
RedisValue res25 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res25); // >>> "bike:2"
RedisValue res26 = db.ListRightPop("bikes:repairs");
Console.WriteLine(res26); // >>> <Empty string>
long res27 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res27); // >>> 5
db.ListTrim("bikes:repairs", 0, 2);
RedisValue[] res28 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res28)); // "bike:5, bike:4, bike:3"
db.KeyDelete("bikes:repairs");
long res29 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res29); // >>> 5
db.ListTrim("bikes:repairs", -3, -1);
RedisValue[] res30 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res30)); // >>> "bike:3, bike:4, bike:5"
db.KeyDelete("bikes:repairs");
long res31 = db.ListRightPush("bikes:repairs", ["bike:1", "bike:2"]);
Console.WriteLine(res31); // >>> 2
Tuple<RedisKey, RedisValue>? res32 = db.BRPop(["bikes:repairs"], 1);
if (res32 != null)
Console.WriteLine($"{res32.Item1} -> {res32.Item2}"); // >>> "bikes:repairs -> bike:2"
Tuple<RedisKey, RedisValue>? res33 = db.BRPop(["bikes:repairs"], 1);
if (res33 != null)
Console.WriteLine($"{res33.Item1} -> {res33.Item2}"); // >>> "bikes:repairs -> bike:1"
Tuple<RedisKey, RedisValue>? res34 = db.BRPop(["bikes:repairs"], 1);
Console.WriteLine(res34); // >>> "Null"
db.KeyDelete("new_bikes");
long res36 = db.ListRightPush("new_bikes", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res36); // >>> 3
db.KeyDelete("new_bikes");
bool res37 = db.StringSet("new_bikes", "bike:1");
Console.WriteLine(res37); // >>> True
RedisType res38 = db.KeyType("new_bikes");
Console.WriteLine(res38); // >>> RedisType.String
try
{
long res39 = db.ListRightPush("new_bikes", ["bike:2", "bike:3"]);
}
catch (Exception e)
{
Console.WriteLine(e);
}
db.KeyDelete("bikes:repairs");
long res40 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3"]);
Console.WriteLine(res40); // >>> 3
bool res41 = db.KeyExists("bikes:repairs");
Console.WriteLine(res41); // >>> True
RedisValue res42 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res42); // >>> "bike:3"
RedisValue res43 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res43); // >>> "bike:2"
RedisValue res44 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res44); // >>> "bike:1"
bool res45 = db.KeyExists("bikes:repairs");
Console.WriteLine(res45); // >>> False
db.KeyDelete("bikes:repairs");
long res47 = db.ListLength("bikes:repairs");
Console.WriteLine(res47); // >>> 0
RedisValue res48 = db.ListLeftPop("bikes:repairs");
Console.WriteLine(res48); // >>> Null
db.KeyDelete("bikes:repairs");
long res49 = db.ListLeftPush("bikes:repairs", ["bike:1", "bike:2", "bike:3", "bike:4", "bike:5"]);
Console.WriteLine(res49); // >>> 5
db.ListTrim("bikes:repairs", 0, 2);
RedisValue[] res50 = db.ListRange("bikes:repairs", 0, -1);
Console.WriteLine(string.Join(", ", res50)); // >>> "bike:5, bike:4, bike:3"
}
}