TTL on RawKV

Time to Live

This page walks you through a simple demonstration of how to use TTL (Time To Live) on RawKV. TTL is a data clearing mechanism that automatically deletes data after a specified period of time. For example:

  • If TTL is not used, the data written to TiKV will always exist in TiKV unless it is manually deleted.
  • If TTL is used, and the TTL time of a key is set to one hour, the data of the key will be automatically deleted by TiKV after one hour.

Prerequisites

Before you start, ensure that you have installed TiUP and jshell, and have downloaded the tikv-client JARS file according to TiKV in 5 Minutes.

Step 1: Config TiKV to enable TTL

TTL is disabled by default. To enable it, create a file tikv.yaml using the following configuration.

[storage]
enable-ttl = true

Step 2: Start TiKV Cluster

For this tutorial, only one TiKV node is needed, so the tiup playground command is used.

Show TiUP version:

tiup -v

version >= 1.5.2:

tiup playground --mode tikv-slim  --kv.config tikv.yaml

version < 1.5.2:

tiup playground --kv.config tikv.yaml

Step 3: Write the code to test TTL

The following example shows how to verify the TTL works.

Save the following script to file test_raw_ttl.java.

import java.util.*;
import org.tikv.common.TiConfiguration;
import org.tikv.common.TiSession;
import org.tikv.raw.RawKVClient;
import org.tikv.shade.com.google.protobuf.ByteString;

TiConfiguration conf = TiConfiguration.createRawDefault("127.0.0.1:2379");
TiSession session = TiSession.create(conf);
RawKVClient client = session.createRawClient();

// write (k1, v1) with ttl=30 seconds
client.put(ByteString.copyFromUtf8("k1"), ByteString.copyFromUtf8("v1"), 30);

// write (k2, v2) without ttl
client.put(ByteString.copyFromUtf8("k2"), ByteString.copyFromUtf8("v2"));

// get k1 & k2 resturns v1 & v2
System.out.println(client.batchGet(new ArrayList<ByteString>() {{
      add(ByteString.copyFromUtf8("k1"));
      add(ByteString.copyFromUtf8("k2"));
}}));

// sleep 30 seconds
System.out.println("Sleep 30 seconds.")
Thread.sleep(30000);

// get k1 & k2 returns v2
// k1's ttl is expired
System.out.println(client.batchGet(new ArrayList<ByteString>() {{
      add(ByteString.copyFromUtf8("k1"));
      add(ByteString.copyFromUtf8("k2"));
}}));

Step 4: Run the code

jshell --class-path tikv-client-java.jar:slf4j-api.jar --startup test_raw_ttl.java

[key: "k1"
value: "v1"
, key: "k2"
value: "v2"
]
Sleep 30 seconds.
[key: "k2"
value: "v2"
]

After running the above code, you can find that k1 is automatically deleted when its TTL has expired.