Redis支持多种数据类型,每种数据类型提供了一系列操作。以下是Redis支持的主要数据类型及其操作的详细介绍,并附上代码示例:
1. String(字符串)
操作
SET:设置键的值。GET:获取键的值。INCR:将键的值自增。DECR:将键的值自减。MSET:同时设置多个键值对。MGET:同时获取多个键的值。
示例代码
java
import redis.clients.jedis.Jedis;
public class RedisStringExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost")) {
// 设置键值
jedis.set("key1", "value1");
System.out.println("key1: " + jedis.get("key1"));
// 自增
jedis.set("counter", "10");
jedis.incr("counter");
System.out.println("counter: " + jedis.get("counter"));
// 同时设置多个键值对
jedis.mset("key2", "value2", "key3", "value3");
System.out.println("key2: " + jedis.get("key2"));
System.out.println("key3: " + jedis.get("key3"));
}
}
}
2. Hash(哈希)
操作
HSET:设置哈希表字段的值。HGET:获取哈希表字段的值。HGETALL:获取哈希表中的所有字段和值。HMSET:同时设置多个字段值。HMGET:同时获取多个字段值。
示例代码
java
import redis.clients.jedis.Jedis;
import java.util.Map;
public class RedisHashExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost")) {
// 设置哈希表字段值
jedis.hset("hash1", "field1", "value1");
System.out.println("hash1.field1: " + jedis.hget("hash1", "field1"));
// 同时设置多个字段值
jedis.hset("hash1", Map.of("field2", "value2", "field3", "value3"));
System.out.println("hash1.field2: " + jedis.hget("hash1", "field2"));
System.out.println("hash1.field3: " + jedis.hget("hash1", "field3"));
// 获取哈希表中的所有字段和值
Map<String, String> hash = jedis.hgetAll("hash1");
hash.forEach((k, v) -> System.out.println(k + ": " + v));
}
}
}
3. List(列表)
操作
LPUSH:将一个或多个值插入列表的头部。RPUSH:将一个或多个值插入列表的尾部。LPOP:移除并返回列表的头元素。RPOP:移除并返回列表的尾元素。LRANGE:获取列表指定范围内的元素。
示例代码
java
import redis.clients.jedis.Jedis;
import java.util.List;
public class RedisListExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost")) {
// 在列表头部插入元素
jedis.lpush("list1", "value1", "value2", "value3");
System.out.println("list1: " + jedis.lrange("list1", 0, -1));
// 在列表尾部插入元素
jedis.rpush("list1", "value4", "value5");
System.out.println("list1: " + jedis.lrange("list1", 0, -1));
// 移除并返回列表的头元素
System.out.println("lpop: " + jedis.lpop("list1"));
System.out.println("list1: " + jedis.lrange("list1", 0, -1));
}
}
}
4. Set(集合)
操作
SADD:向集合添加一个或多个成员。SREM:移除集合中的一个或多个成员。SMEMBERS:获取集合中的所有成员。SISMEMBER:判断某个值是否是集合的成员。
示例代码
java
import redis.clients.jedis.Jedis;
import java.util.Set;
public class RedisSetExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost")) {
// 向集合添加成员
jedis.sadd("set1", "member1", "member2", "member3");
System.out.println("set1: " + jedis.smembers("set1"));
// 移除集合中的成员
jedis.srem("set1", "member2");
System.out.println("set1: " + jedis.smembers("set1"));
// 判断某个值是否是集合的成员
System.out.println("ismember: " + jedis.sismember("set1", "member1"));
}
}
}
5. Sorted Set(有序集合)
操作
ZADD:向有序集合添加一个或多个成员,或者更新已存在成员的分数。ZREM:移除有序集合中的一个或多个成员。ZRANGE:按索引范围返回有序集合中指定区间内的成员。ZRANGEBYSCORE:按分数范围返回有序集合中指定区间内的成员。
示例代码
java
import redis.clients.jedis.Jedis;
import java.util.Set;
public class RedisSortedSetExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost")) {
// 向有序集合添加成员
jedis.zadd("zset1", 1, "member1");
jedis.zadd("zset1", 2, "member2");
jedis.zadd("zset1", 3, "member3");
System.out.println("zset1: " + jedis.zrange("zset1", 0, -1));
// 移除有序集合中的成员
jedis.zrem("zset1", "member2");
System.out.println("zset1: " + jedis.zrange("zset1", 0, -1));
// 按分数范围返回有序集合中指定区间内的成员
Set<String> members = jedis.zrangeByScore("zset1", 1, 2);
members.forEach(member -> System.out.println("member: " + member));
}
}
}
6. Bitmap(位图)
操作
SETBIT:设置或清除指定偏移量的位。GETBIT:获取指定偏移量的位。BITCOUNT:计算位图中被设置为1的位的数量。
示例代码
java
import redis.clients.jedis.Jedis;
public class RedisBitmapExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost")) {
// 设置指定偏移量的位
jedis.setbit("bitmap1", 1, true);
jedis.setbit("bitmap1", 3, true);
jedis.setbit("bitmap1", 5, true);
// 获取指定偏移量的位
System.out.println("bit at 1: " + jedis.getbit("bitmap1", 1));
System.out.println("bit at 2: " + jedis.getbit("bitmap1", 2));
// 计算位图中被设置为1的位的数量
System.out.println("bit count: " + jedis.bitcount("bitmap1"));
}
}
}
7. HyperLogLog(基数统计)
操作
PFADD:向HyperLogLog添加元素。PFCOUNT:返回HyperLogLog的基数估计值。
示例代码
java
import redis.clients.jedis.Jedis;
public class RedisHyperLogLogExample {
public static void main(String[] args) {
try (Jedis jedis = new Jedis("localhost")) {
// 向HyperLogLog添加元素
jedis.pfadd("hll1", "elem1", "elem2", "elem3");
// 返回HyperLogLog的基数估计值
long count = jedis.pfcount("hll1");
System.out.println("HyperLogLog count: " + count);
}
}
}
8. Geo(地理空间)
操作
GEOADD:将地理空间位置添加到键。GEOPOS:获取地理空间位置的坐标。GEODIST:计算两个地理空间位置之间的距离。GEORADIUS:查找位于指定范围内的地理空间位置。