diff --git a/memorystore/valkey/session/snippets/README.md b/memorystore/valkey/session/snippets/README.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/memorystore/valkey/session/snippets/pom.xml b/memorystore/valkey/session/snippets/pom.xml new file mode 100644 index 00000000000..f4be44d7ba4 --- /dev/null +++ b/memorystore/valkey/session/snippets/pom.xml @@ -0,0 +1,117 @@ + + + + + + 4.0.0 + + com.example.memorystore + caching + 1.0-SNAPSHOT + + Google Cloud Memorystore Sample + http://www.example.com + + + UTF-8 + 11 + + + + + + org.junit + junit-bom + 5.11.0 + pom + import + + + + + + + + redis.clients + jedis + 4.3.1 + + + + + com.google.cloud + google-cloud-core + 2.16.0 + + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-params + test + + + + + + + + maven-clean-plugin + 3.4.0 + + + maven-resources-plugin + 3.3.1 + + + maven-compiler-plugin + 3.13.0 + + + maven-surefire-plugin + 3.3.0 + + + maven-jar-plugin + 3.4.2 + + + maven-install-plugin + 3.1.2 + + + maven-deploy-plugin + 3.1.2 + + + maven-site-plugin + 3.12.1 + + + maven-project-info-reports-plugin + 3.6.1 + + + + + \ No newline at end of file diff --git a/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreAddItemToBasket.java b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreAddItemToBasket.java new file mode 100644 index 00000000000..f677586fba0 --- /dev/null +++ b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreAddItemToBasket.java @@ -0,0 +1,65 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR IMPLIED WARRANTIES OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +public final class MemorystoreAddItemToBasket { + + /** Replace the Memorystore instance id. */ + private static final String INSTANCE_ID = "INSTANCE_ID"; + + /** Replace the Memorystore port, if not the default port. */ + private static final int PORT = 6379; + + /** User ID for managing the basket */ + private static final String USER_ID = "USERID"; + + /** Item to be added to the user's basket */ + private static final String ITEM_ID = "ITEM_ID"; + + private MemorystoreAddItemToBasket() { + // No-op; won't be called + } + + /** + * Adds an item to a user's basket in Memorystore. + * + * @param args command-line arguments + */ + public static void main(final String[] args) { + // Connect to the Memorystore instance + JedisPool pool = new JedisPool(INSTANCE_ID, PORT); + + try (Jedis jedis = pool.getResource()) { + String basketKey = "basket:" + USER_ID; + + // Add a single item to the user's basket + jedis.sadd(basketKey, ITEM); + System.out.printf("Added item to basket: %s%n", ITEM_ID); + + // Verify the item is in the basket + boolean exists = jedis.sismember(basketKey, ITEM); + if (exists) { + System.out.printf("Item successfully added: %s%n", ITEM_ID); + } else { + System.out.printf("Failed to add item: %s%n", ITEM_ID); + } + } catch (Exception e) { + System.err.printf("Error connecting to Redis: %s%n", e.getMessage()); + } + } +} diff --git a/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreClearBasket.java b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreClearBasket.java new file mode 100644 index 00000000000..d1006c86fa0 --- /dev/null +++ b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreClearBasket.java @@ -0,0 +1,60 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR IMPLIED WARRANTIES OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +public final class MemorystoreClearBasket { + + /** Replace the Memorystore instance id. */ + private static final String INSTANCE_ID = "INSTANCE_ID"; + + /** Replace the Memorystore port, if not the default port. */ + private static final int PORT = 6379; + + /** User ID for managing the basket */ + private static final String USER_ID = "USERID"; + + private MemorystoreClearBasket() { + // No-op; won't be called + } + + /** + * Clears a user's basket in Memorystore. + * + * @param args command-line arguments + */ + public static void main(final String[] args) { + // Connect to the Memorystore instance + JedisPool pool = new JedisPool(INSTANCE_ID, PORT); + + try (Jedis jedis = pool.getResource()) { + String basketKey = "basket:" + USER_ID; + + // Delete the basket (remove all items) + long deleted = jedis.del(basketKey); + + // Verify if the basket was cleared + if (deleted > 0) { + System.out.printf("Basket cleared successfully for user: %s%n", USER_ID); + } else { + System.out.printf("No basket found for user: %s%n", USER_ID); + } + } catch (Exception e) { + System.err.printf("Error connecting to Redis: %s%n", e.getMessage()); + } + } +} diff --git a/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreFilterByDesc.java b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreFilterByDesc.java new file mode 100644 index 00000000000..e2d491851a5 --- /dev/null +++ b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreFilterByDesc.java @@ -0,0 +1,68 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +public final class MemorystoreFilterByDesc { + + /** Replace the Memorystore instance id. */ + private static final String INSTANCE_ID = "INSTANCE_ID"; + + /** Replace the Memorystore port, if not the default port. */ + private static final int PORT = 6379; + + /** Replace the id of the item to write to Memorystore. */ + private static final String TOKEN = "TOKEN"; + + private MemorystoreFilterByDesc() { + // No-op; won't be called + } + + /** + * Writes to Memorystore with a Time-to-live(TTL) value. + * + * @param args command-line arguments + * @throws InterruptedException if the thread sleep is interrupted + */ + public static void main(final String[] args) throws InterruptedException { + // Connect to the Memorystore instance + JedisPool pool = new JedisPool(INSTANCE_ID, PORT); + + try (Jedis jedis = pool.getResource()) { + // Set a TTL of 10 seconds during entry creation + final int ttlSeconds = 10; + jedis.del(TOKEN); + + // Verify the user has been deleted + System.out.println("Verifying cache."); + String cachedUser = jedis.exist(TOKEN); + + // Print the cached item if found + if (cachedUser != null) { + System.out.printf("Found cached item: %s%n", cachedUser); + } + + // Print the cached item not found + if (cachedUser == null) { + System.out.printf("No cached item found: %s%n", ITEM_ID); + } + } catch (Exception e) { + // Print any errors found in the exception + System.err.printf("Error connecting to Redis: %s%n", e.getMessage()); + } + } +} diff --git a/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreLoginUser.java b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreLoginUser.java new file mode 100644 index 00000000000..530de20229c --- /dev/null +++ b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreLoginUser.java @@ -0,0 +1,68 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR IMPLIED WARRANTIES OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +import java.util.UUID; + +public final class MemorystoreLoginUser { + + /** Replace the Memorystore instance id. */ + private static final String INSTANCE_ID = "INSTANCE_ID"; + + /** Replace the Memorystore port, if not the default port. */ + private static final int PORT = 6379; + + /** User ID for login */ + private static final String USER_ID = "USERID"; + + /** Session expiration time in seconds (30 minutes) */ + private static final int SESSION_TIMEOUT = 1800; + + private MemorystoreLoginUser() { + // No-op; won't be called + } + + /** + * Logs in a user by creating a session in Memorystore. + * + * @param args command-line arguments + */ + public static void main(final String[] args) { + // Connect to the Memorystore instance + JedisPool pool = new JedisPool(INSTANCE_ID, PORT); + + try (Jedis jedis = pool.getResource()) { + String sessionKey = "session:" + USER_ID; + + // Check if the user is already logged in + if (jedis.exists(sessionKey)) { + System.out.printf("User %s is already logged in.%n", USER_ID); + return; + } + + // Generate a session token + String sessionToken = UUID.randomUUID().toString(); + + // Store the session token in Redis with an expiration time + jedis.setex(sessionKey, SESSION_TIMEOUT, sessionToken); + System.out.printf("User %s logged in with session: %s%n", USER_ID, sessionToken); + } catch (Exception e) { + System.err.printf("Error connecting to Redis: %s%n", e.getMessage()); + } + } +} diff --git a/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreRemoveItemFromBasket.java b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreRemoveItemFromBasket.java new file mode 100644 index 00000000000..68346859788 --- /dev/null +++ b/memorystore/valkey/session/snippets/src/main/java/samples/MemorystoreRemoveItemFromBasket.java @@ -0,0 +1,63 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR IMPLIED WARRANTIES OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +public final class MemorystoreRemoveItemFromBasket { + + /** Replace the Memorystore instance id. */ + private static final String INSTANCE_ID = "INSTANCE_ID"; + + /** Replace the Memorystore port, if not the default port. */ + private static final int PORT = 6379; + + /** User ID for managing the basket */ + private static final String USER_ID = "USERID"; + + /** Item to be removed from the user's basket */ + private static final String ITEM_ID = "ITEM_ID"; + + private MemorystoreRemoveItemFromBasket() { + // No-op; won't be called + } + + /** + * Removes an item from a user's basket in Memorystore. + * + * @param args command-line arguments + */ + public static void main(final String[] args) { + // Connect to the Memorystore instance + JedisPool pool = new JedisPool(INSTANCE_ID, PORT); + + try (Jedis jedis = pool.getResource()) { + String basketKey = "basket:" + USER_ID; + + // Remove the item from the user's basket + long removed = jedis.srem(basketKey, ITEM_ID); + + // Check if the item was successfully removed + if (removed > 0) { + System.out.printf("Removed item from basket: %s%n", ITEM_ID); + } else { + System.out.printf("Item not found in basket: %s%n", ITEM_ID); + } + } catch (Exception e) { + System.err.printf("Error connecting to Redis: %s%n", e.getMessage()); + } + } +}