1、java操作Redis的基本数据类型
1、使用java操作Redis需要用到 jedis jar 包 我用的是 jedis-2.7.2.jar(2.7以后才支持集群操作) 测试需要 junit 的jar包
链接: https://pan.baidu.com/s/1K0YrsN-OqKT0F3xvooug0w 密码: 67fj
2、代码实现
package com.xyq.redis.test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class TestRedis {
private Jedis jedis;
// before注解的方法,在运行test注解的方法之前会运行
@Before
public void setup(){
// 连接redis服务器
jedis = new Jedis("192.168.43.202", 6379);
// 查看服务是否运行
System.out.println(jedis.ping());//输出PONG则连接成功
}
/**
* java 操作Redis的String数据类型
*/
@Test
public void testString(){
jedis.set("name", "z3");//设置数据
System.out.println(jedis.get("name"));//获得数据
jedis.append("name", "is a man");//追加
System.out.println(jedis.get("name"));//获得数据
jedis.del("name");// 删除某个键
System.out.println(jedis.get("name"));
jedis.mset("name", "z3", "age", "23", "sex", "nan");// 设置多个键值对
System.out.println(jedis.mget("name", "age", "sex"));
}
/**
* java 操作Redis的Hash数据类型
*/
@Test
public void testHash(){
Map<String, String> map = new HashMap<String, String>();
jedis.hset("user", "name", "L4");//设置数据
System.out.println(jedis.hget("user", "name"));//获得数据
map.put("age", "30");
map.put("sex", "nan");
jedis.hmset("user", map);
List<String> result = jedis.hmget("user", "name", "age", "sex");
System.out.println(result);
}
/**
* java 操作Redis的List数据类型,List既可以用作栈,也可以用作队列
*/
@Test
public void testList(){
//1、栈操作
jedis.del("list1");
jedis.lpush("list1", "z3");
jedis.lpush("list1", "l4");
jedis.lpush("list1", "w5");
List<String> result1 = jedis.lrange("list1", 0, -1);
System.out.println(result1);
jedis.del("list1");
//2、队列操作
jedis.rpush("list1", "z3");
jedis.rpush("list1", "l4");
jedis.rpush("list1", "w5");
List<String> result2 = jedis.lrange("list1", 0, -1);
System.out.println(result2);
}
/**
* java 操作Redis的Set数据类型
*/
@Test
public void testSet(){
jedis.sadd("set1", "z3");
jedis.sadd("set1", "L4");
jedis.sadd("set1", "w5");
jedis.sadd("set1", "z6");
Set<String> result = jedis.smembers("set1");
System.out.println(result);
}
/**
* java 操作Redis的ZSet数据类型
*/
@Test
public void testZSet(){
jedis.zadd("zset1", 1, "one");
jedis.zadd("zset1", 6, "six");
jedis.zadd("zset1", 5, "five");
jedis.zadd("zset1", 3, "three");
Set<String> result = jedis.zrange("zset1", 0, -1);
System.out.println(result);
}
}
2、java操作Redis实现带条件的查询
1、基本思路
redis实现条件查询其实就是需要我们自己建立id与其他属性的联系集。比如在关系型数据库里面,建立一个汽车表user:id, name, age, sex当我们需要查询age等于25的所有user信息的时候,我们首先需要建立一个id和age之间的联系集,通过匹配得到id再去查找user信息。
2、代码实现
user实体类
package com.xyq.redis.test.entity;
public class User {
private int id;
private String name;
private int age;
private String sex;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public User() {
}
@Override
public String toString() {
return "user[id" + id + "name" + name + "age" + age + "sex" +sex + "]";
}
}
json工具类
需要用到 gson-2.2.4.jar 也在上面连接中
package com.xyq.redis.test.Util;
import com.google.gson.Gson;
public class GsonUtil {
public static String object2Json(Object object) {
Gson gson = new Gson();
return gson.toJson(object);
}
public static <T> T json2Object(String json, Class<T> clazz) {
Gson gson = new Gson();
return gson.fromJson(json, clazz);
}
}
RedisSelect类
package com.xyq.redis.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.xyq.redis.test.Util.GsonUtil;
import com.xyq.redis.test.entity.User;
import redis.clients.jedis.Jedis;
public class RedisSelect {
public static void main(String[] args) {
// 将User表的内容field:id value: json 保存一个记录
final String SYS_USER_TABLE = "SYS_USER_TABLE";
// 用于保存性别为男性的User用户的Redis的Set
final String SYS_USER_TABLE_SEX_MAN = "SYS_USER_TABLE_SEX_MAN";
// 用于保存性别为女性的用户的Redis的Set
final String SYS_USER_TABLE_SEX_WOMAN = "SYS_USER_TABLE_SEX_WOMAN";
// 用于保存age为25岁的用户的Redis的Set
final String SYS_USER_TABLE_AGE_25 = "SYS_USER_TABLE_AGE_25";
// 连接redis服务器
Jedis jedis = new Jedis("192.168.43.202", 6379);
// 查看服务是否运行
System.out.println(jedis.ping());//输出PONG则连接成功
// 模拟数据库的表User的数据
List<User> users = new ArrayList<User>();
for(int i=0; i<5; i++){
User user = new User();
user.setId(i);
user.setName("z" + i);
user.setAge(20 + i);
user.setSex("man");
users.add(user);
}
for(int i=5; i<10; i++){
User user = new User();
user.setId(i);
user.setName("L" + i);
user.setAge(20 + i);
user.setSex("woman");
users.add(user);
}
// 通过Hash存放
Map< String, String> map = new HashMap<String, String>();
for(int i=0; i<users.size(); i++){
map.put(users.get(i).getId() + "", GsonUtil.object2Json(users.get(i)));
//将性别为男性的User用户加入到Redis中key为SYS_USER_TABLE_SEX_MAN的Set集合里面
if("man".equals(users.get(i).getSex())){
jedis.sadd(SYS_USER_TABLE_SEX_MAN, users.get(i).getId()+"");
}
// 将性别为男性的User用户加入到Redis中key为SYS_USER_TABLE_SEX_MAN的Set集合里面
if("woman".equals(users.get(i).getSex())){
jedis.sadd(SYS_USER_TABLE_SEX_WOMAN, users.get(i).getId()+"");
}
// 将年龄为25的User用户加入到Redis中key为SYS_USER_TABLE_AGE_25的Set集合里面
if(users.get(i).getAge() == 25){
jedis.sadd(SYS_USER_TABLE_AGE_25, users.get(i).getId()+"");
}
}
// 每条记录一 feild :id value:json 的形式保存
jedis.hmset(SYS_USER_TABLE, map);
// 查询年龄为25岁,性别为女的user用户(就是两个集合求交集)
Set<String> result = jedis.sinter(SYS_USER_TABLE_SEX_WOMAN, SYS_USER_TABLE_AGE_25);
for(String key:result){
// 根据id到Redis中的SYS_USER_TABLE,查询符合条件的user
String hkey = jedis.hget(SYS_USER_TABLE, key);
System.out.println(hkey);
// 将查询到的json数据,转换为User用户
User user = GsonUtil.json2Object(hkey, User.class);
System.out.println(user);
}
}
}