Redis 客户端连接:Java

Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:

Redis 对于客户端连接相关的命令如下:

config get maxclients                  # 获取 redis-server 的客户端连接上限
config set maxclients millseconds_num  # 修改 redis-server 客户端连接上限

client list                   # 返回连接到 redis-server 的客户端列表

client getname                # 返回当前连接名称
client setname                # 设置当前的连名称

client pause 10000            # 挂起当前客户端连接 10000 毫秒

client kill addr ip_port        # 关闭指定端口的客户端连接,该 ip_port 必须是 client list 中列出的
client kill id client_id        # 关闭指定 id 的客户端连接,该 client_id 必须是 client list 中列出的

如果需要允许所有外部 IP 访问 Redis ,需要注销掉 redis 配置文件中的 bind 127.0.0.1(此时 redis 最好设置终端登陆密码);

当然也可以通过 bind 设置指定的多个 ip 访问 redis;

Java 客户端连接的基本代码

Java 连接 redis-server,读写 redis-server 缓存数据的基本代码如下:

public class RedisJavaTest {
    private final static Logger log = LogManager.getLogger();

    public static void main(String[] args) throws IOException {

        /* 创建 redis 客户端 */
        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.auth("assad");    //密码登陆
        log.debug(jedis.ping());          //进行登陆测试

        /* 从 redis-server 读写数据 */
        
        // 写入 Java String 和 基本类型,对应 redis string 储存类型
        jedis.set("key1","Hello world!");
        jedis.set("key2",2333+"");
        jedis.set("key3",2.333+"");
        jedis.set("key4",false+"");
        // 获取 redis string 类型
        String val1 = jedis.get("key1");
        int val2 = Integer.parseInt(jedis.get("key2"));
        double val3 = Double.parseDouble(jedis.get("key3"));
        boolean val4 = Boolean.parseBoolean(jedis.get("key4"));
        log.debug("key1: " + val1);
        log.debug("key2: " + val2);
        log.debug("key3: " + val3);
        log.debug("key4: " + val4);

        // 写入 Java List 类型, 对应 redis list 类型
        List<String> staffs = Arrays.asList("assad","vancy","canndy");
        for(String staff : staffs)
            jedis.rpush("staffs",staff);
        // 获取 redis list 类型
        List<String> staffList = jedis.lrange("staffs",0,-1);
        log.debug("staffs: " + staffList.stream().collect(Collectors.joining(", ")));

        // 写入 Java Set 类型,对应 redis set 类型
        Set<String> citys = new HashSet<>(Arrays.asList("Guangzhou", "Shanghai", "Beijing"));
        for(String city : citys)
            jedis.sadd("citys",city);
        // 获取 redis set 类型
        Set<String> cityList  = jedis.smembers("citys");
        log.debug("citys: " + cityList.stream().collect(Collectors.joining(", ")));

        // 写入Java Bean :写入为 redis hash 类型
        User user1 = new User("assad",22,"Guangzou");
        Map<String,String> userMap = new HashMap<>();
        userMap.put("name",user1.getName());
        userMap.put("age",user1.getAge()+"");
        userMap.put("city",user1.getCity());
        jedis.hmset("user:assad",userMap);
        // 获取 redis hash 类型(Java bean)
        Map<String,String> userMapped = jedis.hgetAll("user:assad");
        User user2 = new User(userMapped.get("name"), Integer.parseInt(userMapped.get("age")), userMapped.get("city"));
        log.debug("user: " + user2);

        // 获取所有 keys
        Set<String> keyset = jedis.keys("*");
        log.debug("keys: " + keyset.stream().collect(Collectors.joining(", ")));

    }

    static class User implements Serializable{
        public final static long serialVersionUID = 2333L;
        private String name;
        private int age;
        private String city;
        // getter,setter,contructor,toString
    }
}

运行输出如下:

19:41:51.189 [main] DEBUG redis.RedisJavaTest - PONG
19:41:51.192 [main] DEBUG redis.RedisJavaTest - key1: Hello world!
19:41:51.192 [main] DEBUG redis.RedisJavaTest - key2: 2333
19:41:51.192 [main] DEBUG redis.RedisJavaTest - key3: 2.333
19:41:51.192 [main] DEBUG redis.RedisJavaTest - key4: false
19:41:51.232 [main] DEBUG redis.RedisJavaTest - staffs: assad, vancy, canndy
19:41:51.234 [main] DEBUG redis.RedisJavaTest - citys: Guangzhou, Beijing, Shanghai
19:41:51.235 [main] DEBUG redis.RedisJavaTest - user: User{name='assad', age=22, city='Guangzou'}
19:41:51.235 [main] DEBUG redis.RedisJavaTest - keys: key1, key2, user:assad, key3, key4, citys, staffs