redis api操作

实体:
其中的 application_id是key值
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String

依赖:


    
        redis.clients
        jedis
        3.7.0
    

1.使用java 操作redis对以下信息做增删改查的操作

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.Map;
public class RecordBinlogDao {
    private static final String HOST = "localhost";
    private static final int PORT = 6379;
    private static final int TIMEOUT = 2000;
    private static final String PASSWORD = "password";
    private static final int MAX_TOTAL = 8;
    private static final int MAX_IDLE = 8;
    private static final int MIN_IDLE = 0;
    private static final boolean TEST_ON_BORROW = true;
    private JedisPool jedisPool;
    public RecordBinlogDao() {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(MAX_TOTAL);
        config.setMaxIdle(MAX_IDLE);
        config.setMinIdle(MIN_IDLE);
        config.setTestOnBorrow(TEST_ON_BORROW);
        jedisPool = new JedisPool(config, HOST, PORT, TIMEOUT, PASSWORD);
    }
    public void addRecordBinlog(RecordBinlog recordBinlog) {
        try (Jedis jedis = jedisPool.getResource()) {
            Map map = recordBinlog.toMap();
            jedis.hmset(recordBinlog.getApplicationId(), map);
        }
    }
    public void deleteRecordBinlog(String applicationId) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.del(applicationId);
        }
    }
    public void updateRecordBinlog(RecordBinlog recordBinlog) {
        try (Jedis jedis = jedisPool.getResource()) {
            Map map = recordBinlog.toMap();
            jedis.hmset(recordBinlog.getApplicationId(), map);
        }
    }
    public RecordBinlog getRecordBinlogById(String applicationId) {
        RecordBinlog recordBinlog = null;
        try (Jedis jedis = jedisPool.getResource()) {
            Map map = jedis.hgetAll(applicationId);
            if (!map.isEmpty()) {
                recordBinlog = new RecordBinlog();
                recordBinlog.fromMap(map);
            }
        }
        return recordBinlog;
    }
}
import java.util.HashMap;
import java.util.Map;
public class RecordBinlog {
    private String applicationId;
    private String binlogName;
    private String position;
    private String createTime;
    private String modifyTime;
    public RecordBinlog() {
    }
    public RecordBinlog(String applicationId, String binlogName, String position, String createTime, String modifyTime) {
        this.applicationId = applicationId;
        this.binlogName = binlogName;
        this.position = position;
        this.createTime = createTime;
        this.modifyTime = modifyTime;
    }
    public String getApplicationId() {
        return applicationId;
    }
    public void setApplicationId(String applicationId) {
        this.applicationId = applicationId;
    }
    public String getBinlogName() {
        return binlogName;
    }
    public void setBinlogName(String binlogName) {
        this.binlogName = binlogName;
    }
    public String getPosition() {
        return position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
    public String getCreateTime() {
        return createTime;
    }
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
    public String getModifyTime() {
        return modifyTime;
    }
    public void setModifyTime(String modifyTime) {
        this.modifyTime = modifyTime;
    }
    public Map toMap() {
        Map map = new HashMap<>();
        map.put("applicationId", applicationId);
        map.put("binlogName", binlogName);
        map.put("position", position);
        map.put("createTime", createTime);
        map.put("modifyTime", modifyTime);
        return map;
    }
    public void fromMap(Map map) {
        this.applicationId = map.get("applicationId");
        this.binlogName = map.get("binlogName");
        this.position = map.get("position");
        this.createTime = map.get("createTime");
        this.modifyTime = map.get("modifyTime");
    }
}

java多线程更新redis数据库数据:

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import redis.clients.jedis.Jedis;
public class MultiThreadUpdateRedis {
    private static final String HOST = "localhost";
    private static final int PORT = 6379;
    private static final int THREAD_NUM = 5; // 线程数
    public static void main(String[] args) {
        // 创建线程池
        ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUM);
        // 创建 Redis 连接
        Jedis jedis = new Jedis(HOST, PORT);
        // 获取所有 key
        Set keys = jedis.keys("*");
        // 计算每个线程处理的数据量
        int total = keys.size();
        int perThreadCount = total / THREAD_NUM;
        // 启动线程
        for (int i = 0; i < THREAD_NUM; i++) {
            int start = i * perThreadCount;
            int end = i == THREAD_NUM - 1 ? total : (i + 1) * perThreadCount;
            List subKeys = new ArrayList<>(keys).subList(start, end);
            executor.execute(new UpdateTask(subKeys, jedis));
        }
        // 等待所有线程执行完成
        executor.shutdown();
        while (!executor.isTerminated()) {
        }
        // 关闭 Redis 连接
        jedis.close();
    }
    private static class UpdateTask implements Runnable {
        private List keys;
        private Jedis jedis;
        public UpdateTask(List keys, Jedis jedis) {
            this.keys = keys;
            this.jedis = jedis;
        }
        @Override
        public void run() {
            for (String key : keys) {
                // 获取 key 对应的 value
                String value = jedis.get(key);
                // 更新 value
                value = value + "_updated";
                // 将更新后的 value 写回 Redis
                jedis.set(key, value);
            }
        }
    }
}

示例代码中创建了 5 个线程,每个线程处理 Redis 中的一部分数据。在处理数据时,直接使用 Redis 客户端提供的 API 进行读取和更新操作即可。需要注意的是,在多线程环境下,需要保证线程安全,可以使用 Redis 客户端提供的连接池技术来保证线程安全。

下面是一个使用多线程更新 Redis 数据库中指定 key 值的数据的示例代码,示例代码中以 application_id 作为 key 值,使用多线程更新 binlog_name、position、create_time、modify_time 这几个字段的值

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import redis.clients.jedis.Jedis;
public class MultiThreadUpdateRedis {
    private static final String HOST = "localhost";
    private static final int PORT = 6379;
    private static final int THREAD_NUM = 5; // 线程数
    public static void main(String[] args) {
        // 创建线程池
        ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUM);
        // 创建 Redis 连接
        Jedis jedis = new Jedis(HOST, PORT);
        // 获取所有 key
        Set keys = jedis.keys("*");
        // 启动线程
        for (String key : keys) {
            executor.execute(new UpdateTask(key, jedis));
        }
        // 等待所有线程执行完成
        executor.shutdown();
        while (!executor.isTerminated()) {
        }
        // 关闭 Redis 连接
        jedis.close();
    }
    private static class UpdateTask implements Runnable {
        private String key;
        private Jedis jedis;
        public UpdateTask(String key, Jedis jedis) {
            this.key = key;
            this.jedis = jedis;
        }
        @Override
        public void run() {
            // 获取原始值
            String value = jedis.get(key);
            // 解析原始值,获取 binlog_name、position、create_time、modify_time 的值
            String[] parts = value.split(",");
            String binlogName = parts[1];
            String position = parts[2];
            String createTime = parts[3];
            String modifyTime = parts[4];
            // 更新 binlog_name、position、create_time、modify_time 的值
            binlogName = binlogName + "_updated";
            position = position + "_updated";
            createTime = createTime + "_updated";
            modifyTime = modifyTime + "_updated";
            // 将更新后的值写回 Redis
            String updatedValue = String.format("%s,%s,%s,%s,%s", key, binlogName, position, createTime, modifyTime);
            jedis.set(key, updatedValue);
        }
    }
}

示例代码中以 application_id 作为 key 值,使用多线程更新 binlog_name、position、create_time、modify_time 这几个字段的值。在处理数据时,先获取 key 对应的原始值,再对原始值进行解析,获取需要更新的字段的值。然后更新这些字段的值,并将更新后的值写回 Redis。需要注意的是,在多线程环境下,需要保证线程安全,可以使用 Redis 客户端提供的连接池技术来保证线程安全。

java多线程更新redis数据库数据,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String ,

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import redis.clients.jedis.Jedis;
import com.alibaba.fastjson.JSON;
public class MultiThreadUpdateRedis {
    private static final String HOST = "localhost";
    private static final int PORT = 6379;
    private static final int THREAD_NUM = 5; // 线程数
    public static void main(String[] args) {
        // 创建线程池
        ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUM);
        // 创建 Redis 连接
        Jedis jedis = new Jedis(HOST, PORT);
        // 获取所有 key
        Set keys = jedis.keys("*");
        // 启动线程
        for (String key : keys) {
            executor.execute(new UpdateTask(key, jedis));
        }
        // 等待所有线程执行完成
        executor.shutdown();
        while (!executor.isTerminated()) {
        }
        // 关闭 Redis 连接
        jedis.close();
    }
    private static class UpdateTask implements Runnable {
        private String key;
        private Jedis jedis;
        public UpdateTask(String key, Jedis jedis) {
            this.key = key;
            this.jedis = jedis;
        }
        @Override
        public void run() {
            // 获取原始值
            String value = jedis.get(key);
            // 将原始值转换成对象
            MyObject myObject = JSON.parseObject(value, MyObject.class);
            // 更新 binlog_name、position、create_time、modify_time 的值
            myObject.setBinlogName(myObject.getBinlogName() + "_updated");
            myObject.setPosition(myObject.getPosition() + "_updated");
            myObject.setCreateTime(myObject.getCreateTime() + "_updated");
            myObject.setModifyTime(myObject.getModifyTime() + "_updated");
            // 将更新后的对象转换成字符串,并写回 Redis
            String updatedValue = JSON.toJSONString(myObject);
            jedis.set(key, updatedValue);
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中以 application_id 作为 key 值,使用多线程更新 binlog_name、position、create_time、modify_time 这几个字段的值。在处理数据时,先将原始值转换成对象,获取需要更新的字段的值。然后更新这些字段的值,并将更新后的对象转换成字符串,写回 Redis。需要注意的是,在多线程环境下,需要保证线程安全,可以使用 Redis 客户端提供的连接池技术来保证线程安全。另外,示例代码中使用了 fastjson 库,可以方便地将对象转换成 JSON 格式字符串。

java多线程更新redis数据库数据,redis的密码是1234,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String ,

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import com.alibaba.fastjson.JSON;
public class MultiThreadUpdateRedis {
    private static final String HOST = "localhost";
    private static final int PORT = 6379;
    private static final int THREAD_NUM = 5; // 线程数
    private static final String PASSWORD = "1234"; // Redis 密码
    public static void main(String[] args) {
        // 创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(THREAD_NUM);
        // 设置最大空闲连接数
        config.setMaxIdle(10);
        // 创建 Redis 连接池
        JedisPool pool = new JedisPool(config, HOST, PORT, 1000, PASSWORD);
        // 创建线程池
        ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUM);
        // 创建 Redis 连接
        Jedis jedis = pool.getResource();
        // 获取所有 key
        Set keys = jedis.keys("*");
        // 启动线程
        for (String key : keys) {
            executor.execute(new UpdateTask(key, pool));
        }
        // 等待所有线程执行完成
        executor.shutdown();
        while (!executor.isTerminated()) {
        }
        // 关闭 Redis 连接
        jedis.close();
        // 关闭 Redis 连接池
        pool.close();
    }
    private static class UpdateTask implements Runnable {
        private String key;
        private JedisPool pool;
        public UpdateTask(String key, JedisPool pool) {
            this.key = key;
            this.pool = pool;
        }
        @Override
        public void run() {
            // 从连接池中获取 Redis 连接
            Jedis jedis = pool.getResource();
            try {
                // 获取原始值
                String value = jedis.get(key);
                // 将原始值转换成对象
                MyObject myObject = JSON.parseObject(value, MyObject.class);
                // 更新 binlog_name、position、create_time、modify_time 的值
                myObject.setBinlogName(myObject.getBinlogName() + "_updated");
                myObject.setPosition(myObject.getPosition() + "_updated");
                myObject.setCreateTime(myObject.getCreateTime() + "_updated");
                myObject.setModifyTime(myObject.getModifyTime() + "_updated");
                // 将更新后的对象转换成字符串,并写回 Redis
                String updatedValue = JSON.toJSONString(myObject);
                jedis.set(key, updatedValue);
            } finally {
                // 将 Redis 连接归还连接池
                jedis.close();
            }
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中以 application_id 作为 key 值,使用多线程更新 binlog_name、position、create_time、modify_time 这几个字段的值。在处理数据时,先将原始值转换成对象,获取需要更新的字段的值。然后更新这些字段的值,并将更新后的对象转换成字符串,写回 Redis。需要注意的是,在多线程环境下,需要保证线程安全,可以使用 Redis 客户端提供的连接池技术来保证线程安全。另外,示例代码中使用了 fastjson 库,可以方便地将对象转换成 JSON 格式字符串。

java操作redis数据库数据插入数据,redis的密码是1234,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String ,

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import com.alibaba.fastjson.JSON;
public class InsertRedis {
    private static final String HOST = "localhost";
    private static final int PORT = 6379;
    private static final String PASSWORD = "1234"; // Redis 密码
    public static void main(String[] args) {
        // 创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(10);
        // 设置最大空闲连接数
        config.setMaxIdle(5);
        // 创建 Redis 连接池
        JedisPool pool = new JedisPool(config, HOST, PORT, 1000, PASSWORD);
        // 创建 Redis 连接
        Jedis jedis = pool.getResource();
        try {
            // 创建一个 MyObject 对象
            MyObject myObject = new MyObject();
            myObject.setApplicationId("1001");
            myObject.setBinlogName("binlog-001");
            myObject.setPosition("123456");
            myObject.setCreateTime("2021-01-01 00:00:00");
            myObject.setModifyTime("2021-01-02 00:00:00");
            // 将对象转换成 JSON 格式字符串
            String value = JSON.toJSONString(myObject);
            // 将对象写入 Redis
            jedis.set("1001", value);
        } finally {
            // 关闭 Redis 连接
            jedis.close();
            // 关闭 Redis 连接池
            pool.close();
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中以 application_id 作为 key 值,插入一个对象。先创建一个 MyObject 对象,设置它的属性值,然后将对象转换成 JSON 格式字符串,使用 Redis 客户端提供的 set 方法将对象写入 Redis。需要注意的是,在写入 Redis 时,需要将对象转换成字符串格式,示例代码中使用了 fastjson 库来完成这个任务。

java操作redis数据库数据查询数据,redis的密码是1234,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String ,

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import com.alibaba.fastjson.JSON;
public class QueryRedis {
    private static final String HOST = "localhost";
    private static final int PORT = 6379;
    private static final String PASSWORD = "1234"; // Redis 密码
    public static void main(String[] args) {
        // 创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(10);
        // 设置最大空闲连接数
        config.setMaxIdle(5);
        // 创建 Redis 连接池
        JedisPool pool = new JedisPool(config, HOST, PORT, 1000, PASSWORD);
        // 创建 Redis 连接
        Jedis jedis = pool.getResource();
        try {
            // 根据 key 值获取 Redis 中的值
            String value = jedis.get("1001");
            // 将 JSON 格式字符串转换成 MyObject 对象
            MyObject myObject = JSON.parseObject(value, MyObject.class);
            // 打印对象信息
            System.out.println(myObject.getApplicationId());
            System.out.println(myObject.getBinlogName());
            System.out.println(myObject.getPosition());
            System.out.println(myObject.getCreateTime());
            System.out.println(myObject.getModifyTime());
        } finally {
            // 关闭 Redis 连接
            jedis.close();
            // 关闭 Redis 连接池
            pool.close();
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中以 application_id 作为 key 值,查询对应的对象。先使用 Redis 客户端提供的 get 方法,根据 key 值获取 Redis 中的值,得到一个 JSON 格式字符串。然后使用 fastjson 库将 JSON 格式字符串转换成 MyObject 对象。最后打印对象的信息。需要注意的是,在读取 Redis 中的数据时,需要将字符串转换成对象。

ava操作redis集群插入数据,redis的密码是1234,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String ,

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import com.alibaba.fastjson.JSON;
import java.util.HashSet;
import java.util.Set;
public class InsertRedisCluster {
    private static final String PASSWORD = "1234"; // Redis 密码
    public static void main(String[] args) {
        // 创建 Redis 集群节点信息集合
        Set nodes = new HashSet();
        nodes.add(new HostAndPort("192.168.0.1", 6379));
        nodes.add(new HostAndPort("192.168.0.2", 6379));
        nodes.add(new HostAndPort("192.168.0.3", 6379));
        nodes.add(new HostAndPort("192.168.0.4", 6379));
        nodes.add(new HostAndPort("192.168.0.5", 6379));
        nodes.add(new HostAndPort("192.168.0.6", 6379));
        // 创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(10);
        // 设置最大空闲连接数
        config.setMaxIdle(5);
        // 创建 Redis 集群连接
        JedisCluster jedisCluster = new JedisCluster(nodes, 1000, 1000, 3, PASSWORD, config);
        try {
            // 创建一个 MyObject 对象
            MyObject myObject = new MyObject();
            myObject.setApplicationId("1001");
            myObject.setBinlogName("binlog-001");
            myObject.setPosition("123456");
            myObject.setCreateTime("2021-01-01 00:00:00");
            myObject.setModifyTime("2021-01-02 00:00:00");
            // 将对象转换成 JSON 格式字符串
            String value = JSON.toJSONString(myObject);
            // 将对象写入 Redis
            jedisCluster.set("1001", value);
        } finally {
            // 关闭 Redis 集群连接
            jedisCluster.close();
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中以 application_id 作为 key 值,插入一个对象。先创建一个 MyObject 对象,设置它的属性值,然后将对象转换成 JSON 格式字符串,使用 Redis 集群客户端提供的 set 方法将对象写入 Redis。需要注意的是,在写入 Redis 集群时,需要使用 JedisCluster 类来完成操作,示例代码中使用了 JedisCluster 类的 set 方法。同时,在写入 Redis 时,需要将对象转换成字符串格式,示例代码中使用了 fastjson 库来完成这个任务。

java操作redis集群查询数据,redis的密码是1234,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String ,

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import com.alibaba.fastjson.JSON;
import java.util.HashSet;
import java.util.Set;
public class QueryRedisCluster {
    private static final String PASSWORD = "1234"; // Redis 密码
    public static void main(String[] args) {
        // 创建 Redis 集群节点信息集合
        Set nodes = new HashSet();
        nodes.add(new HostAndPort("192.168.0.1", 6379));
        nodes.add(new HostAndPort("192.168.0.2", 6379));
        nodes.add(new HostAndPort("192.168.0.3", 6379));
        nodes.add(new HostAndPort("192.168.0.4", 6379));
        nodes.add(new HostAndPort("192.168.0.5", 6379));
        nodes.add(new HostAndPort("192.168.0.6", 6379));
        // 创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(10);
        // 设置最大空闲连接数
        config.setMaxIdle(5);
        // 创建 Redis 集群连接
        JedisCluster jedisCluster = new JedisCluster(nodes, 1000, 1000, 3, PASSWORD, config);
        try {
            // 从 Redis 中读取对象
            String value = jedisCluster.get("1001");
            // 将 JSON 格式字符串转换成 MyObject 对象
            MyObject myObject = JSON.parseObject(value, MyObject.class);
            // 输出对象属性值
            System.out.println("application_id: " + myObject.getApplicationId());
            System.out.println("binlog_name: " + myObject.getBinlogName());
            System.out.println("position: " + myObject.getPosition());
            System.out.println("create_time: " + myObject.getCreateTime());
            System.out.println("modify_time: " + myObject.getModifyTime());
        } finally {
            // 关闭 Redis 集群连接
            jedisCluster.close();
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中以 application_id 作为 key 值,查询对应的对象。先使用 Redis 集群客户端提供的 get 方法从 Redis 中读取对象,将对象的 JSON 格式字符串转换成 MyObject 对象,然后输出对象属性值。需要注意的是,在查询 Redis 集群时,需要使用 JedisCluster 类来完成操作,示例代码中使用了 JedisCluster 类的 get 方法。同时,在读取 Redis 时,需要将对象的字符串格式转换成对象,示例代码中使用了 fastjson 库来完成这个任务。

java多线程操作redis集群更新数据,redis的密码是1234,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String ,

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import com.alibaba.fastjson.JSON;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class UpdateRedisCluster {
    private static final String PASSWORD = "1234"; // Redis 密码
    public static void main(String[] args) {
        // 创建 Redis 集群节点信息集合
        Set nodes = new HashSet();
        nodes.add(new HostAndPort("192.168.0.1", 6379));
        nodes.add(new HostAndPort("192.168.0.2", 6379));
        nodes.add(new HostAndPort("192.168.0.3", 6379));
        nodes.add(new HostAndPort("192.168.0.4", 6379));
        nodes.add(new HostAndPort("192.168.0.5", 6379));
        nodes.add(new HostAndPort("192.168.0.6", 6379));
        // 创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(10);
        // 设置最大空闲连接数
        config.setMaxIdle(5);
        // 创建 Redis 集群连接
        JedisCluster jedisCluster = new JedisCluster(nodes, 1000, 1000, 3, PASSWORD, config);
        try {
            // 创建线程池
            ExecutorService executorService = Executors.newFixedThreadPool(10);
            // 启动 10 个线程更新 Redis
            for (int i = 0; i < 10; i++) {
                executorService.submit(new UpdateTask(jedisCluster, "1001", i + ""));
            }
            // 等待所有线程执行完毕
            executorService.shutdown();
            while (!executorService.isTerminated()) {
                Thread.sleep(100);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭 Redis 集群连接
            jedisCluster.close();
        }
    }
    private static class UpdateTask implements Runnable {
        private JedisCluster jedisCluster;
        private String applicationId;
        private String value;
        public UpdateTask(JedisCluster jedisCluster, String applicationId, String value) {
            this.jedisCluster = jedisCluster;
            this.applicationId = applicationId;
            this.value = value;
        }
        @Override
        public void run() {
            try {
                // 获取 Redis 中的对象
                String oldValue = jedisCluster.get(applicationId);
                // 将 JSON 格式字符串转换成 MyObject 对象
                MyObject myObject = JSON.parseObject(oldValue, MyObject.class);
                // 修改对象属性值
                myObject.setPosition(value);
                // 将 MyObject 对象转换成 JSON 格式字符串
                String newValue = JSON.toJSONString(myObject);
                // 更新 Redis 中的对象
                jedisCluster.set(applicationId, newValue);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中创建了一个线程池,启动了 10 个线程来更新 Redis 中的对象。每个线程都会读取 Redis 中的对象,修改对象的 position 属性,然后再将修改后的对象更新到 Redis 中。需要注意的是,在更新 Redis 时,需要使用 JedisCluster 类来完成操作,示例代码中使用了 JedisCluster 类的 set 方法。同时,在读取 Redis 时,需要将对象的字符串格式转换成对象,示例代码中使用了 fastjson 库来完成这个任务。

java多线程操作redis集群插入数据,redis的密码是1234,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import com.alibaba.fastjson.JSON;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class InsertRedisCluster {
    private static final String PASSWORD = "1234"; // Redis 密码
    public static void main(String[] args) {
        // 创建 Redis 集群节点信息集合
        Set nodes = new HashSet();
        nodes.add(new HostAndPort("192.168.0.1", 6379));
        nodes.add(new HostAndPort("192.168.0.2", 6379));
        nodes.add(new HostAndPort("192.168.0.3", 6379));
        nodes.add(new HostAndPort("192.168.0.4", 6379));
        nodes.add(new HostAndPort("192.168.0.5", 6379));
        nodes.add(new HostAndPort("192.168.0.6", 6379));
        // 创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(10);
        // 设置最大空闲连接数
        config.setMaxIdle(5);
        // 创建 Redis 集群连接
        JedisCluster jedisCluster = new JedisCluster(nodes, 1000, 1000, 3, PASSWORD, config);
        try {
            // 创建线程池
            ExecutorService executorService = Executors.newFixedThreadPool(10);
            // 启动 10 个线程插入 Redis
            for (int i = 0; i < 10; i++) {
                executorService.submit(new InsertTask(jedisCluster, UUID.randomUUID().toString(), "binlog_" + i, "position_" + i, "2021-01-01 00:00:00", "2021-01-01 00:00:00"));
            }
            // 等待所有线程执行完毕
            executorService.shutdown();
            while (!executorService.isTerminated()) {
                Thread.sleep(100);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭 Redis 集群连接
            jedisCluster.close();
        }
    }
    private static class InsertTask implements Runnable {
        private JedisCluster jedisCluster;
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        public InsertTask(JedisCluster jedisCluster, String applicationId, String binlogName, String position, String createTime, String modifyTime) {
            this.jedisCluster = jedisCluster;
            this.applicationId = applicationId;
            this.binlogName = binlogName;
            this.position = position;
            this.createTime = createTime;
            this.modifyTime = modifyTime;
        }
        @Override
        public void run() {
            try {
                // 创建对象
                MyObject myObject = new MyObject();
                myObject.setApplicationId(applicationId);
                myObject.setBinlogName(binlogName);
                myObject.setPosition(position);
                myObject.setCreateTime(createTime);
                myObject.setModifyTime(modifyTime);
                // 将 MyObject 对象转换成 JSON 格式字符串
                String value = JSON.toJSONString(myObject);
                // 将对象插入 Redis
                jedisCluster.set(applicationId, value);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中创建了一个线程池,启动了 10 个线程来插入 Redis 中的对象。每个线程都会创建一个新的对象,然后将对象转换成 JSON 格式字符串,再将字符串插入 Redis 中。需要注意的是,在插入 Redis 时,需要使用 JedisCluster 类来完成操作,示例代码中使用了 JedisCluster 类的 set 方法。同时,在创建对象时,需要设置对象的各个属性值,示例代码中使用了随机 UUID 来作为 application_id 的值。

java多线程操作redis集群查询数据,redis的密码是1234,其中的 application_id是key值,value是对象
application_id String,
binlog_name String,
position String ,
create_time String ,
modify_time String

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import com.alibaba.fastjson.JSON;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class QueryRedisCluster {
    private static final String PASSWORD = "1234"; // Redis 密码
    public static void main(String[] args) {
        // 创建 Redis 集群节点信息集合
        Set nodes = new HashSet();
        nodes.add(new HostAndPort("192.168.0.1", 6379));
        nodes.add(new HostAndPort("192.168.0.2", 6379));
        nodes.add(new HostAndPort("192.168.0.3", 6379));
        nodes.add(new HostAndPort("192.168.0.4", 6379));
        nodes.add(new HostAndPort("192.168.0.5", 6379));
        nodes.add(new HostAndPort("192.168.0.6", 6379));
        // 创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 设置最大连接数
        config.setMaxTotal(10);
        // 设置最大空闲连接数
        config.setMaxIdle(5);
        // 创建 Redis 集群连接
        JedisCluster jedisCluster = new JedisCluster(nodes, 1000, 1000, 3, PASSWORD, config);
        try {
            // 创建线程池
            ExecutorService executorService = Executors.newFixedThreadPool(10);
            // 启动 10 个线程查询 Redis
            for (int i = 0; i < 10; i++) {
                executorService.submit(new QueryTask(jedisCluster, "application_id_" + i));
            }
            // 等待所有线程执行完毕
            executorService.shutdown();
            while (!executorService.isTerminated()) {
                Thread.sleep(100);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭 Redis 集群连接
            jedisCluster.close();
        }
    }
    private static class QueryTask implements Runnable {
        private JedisCluster jedisCluster;
        private String applicationId;
        public QueryTask(JedisCluster jedisCluster, String applicationId) {
            this.jedisCluster = jedisCluster;
            this.applicationId = applicationId;
        }
        @Override
        public void run() {
            try {
                // 从 Redis 中获取对象
                String value = jedisCluster.get(applicationId);
                // 将 JSON 格式字符串转换成 MyObject 对象
                MyObject myObject = JSON.parseObject(value, MyObject.class);
                // 输出对象的各个属性值
                System.out.println(myObject.getApplicationId() + " " + myObject.getBinlogName() + " " + myObject.getPosition() + " " + myObject.getCreateTime() + " " + myObject.getModifyTime());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    private static class MyObject {
        private String applicationId;
        private String binlogName;
        private String position;
        private String createTime;
        private String modifyTime;
        // 省略 getter 和 setter 方法
    }
}

示例代码中创建了一个线程池,启动了 10 个线程来查询 Redis 中的对象。每个线程都会根据给定的 application_id 值从 Redis 中获取对应的对象,并将对象转换成 MyObject 类型。需要注意的是,在获取 Redis 中的对象时,需要使用 JedisCluster 类来完成操作,示例代码中使用了 JedisCluster 类的 get 方法。同时,在将 JSON 格式字符串转换成对象时,需要使用 fastjson 库的 parseObject 方法。

你可能感兴趣的:(redis,java,数据库)