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 连接 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