Redis(105)Redis的数据类型支持哪些操作?

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:查找位于指定范围内的地理空间位置。
相关推荐
短剑重铸之日1 小时前
《SpringCloud实用版》 Seata 分布式事务实战:AT / TCC / Saga /XA
后端·spring·spring cloud·seata·分布式事务
FAFU_kyp1 小时前
RISC0_ZERO项目在macOs上生成链上证明避坑
开发语言·后端·学习·macos·rust
qq_12498707531 小时前
基于springboot的会议室预订系统设计与实现(源码+论文+部署+安装)
java·vue.js·spring boot·后端·信息可视化·毕业设计·计算机毕业设计
女王大人万岁2 小时前
Go语言time库核心用法与实战避坑
服务器·开发语言·后端·golang
J_liaty2 小时前
Spring Boot + MinIO 文件上传工具类
java·spring boot·后端·minio
短剑重铸之日2 小时前
《SpringCloud实用版》Stream + RocketMQ 实现可靠消息 & 事务消息
后端·rocketmq·springcloud·消息中间件·事务消息
没有bug.的程序员2 小时前
Spring Boot 事务管理:@Transactional 失效场景、底层内幕与分布式补偿实战终极指南
java·spring boot·分布式·后端·transactional·失效场景·底层内幕
LuminescenceJ3 小时前
GoEdge 开源CDN 架构设计与工作原理分析
分布式·后端·网络协议·网络安全·rpc·开源·信息与通信
Tony Bai3 小时前
【分布式系统】11 理论的试金石:用 Go 从零实现一个迷你 Raft 共识
开发语言·后端·golang
短剑重铸之日3 小时前
《SpringCloud实用版》统一认证授权:Spring Authorization Server + OAuth2 + JWT 生产级方案
java·后端·spring·jwt·oauth2