redis增大查询速度(项目中实际应用举例)
2017-08-23 01:56
881 查看
1、关于保存User表的方案
1.1 使用Redis的Hash类型去保存关系型数据库的User表
1.2 redis的Hash的key为"SYS_USER_TABLE_SEX_MAN",field:userid value:json 数据
2、利用Redis的Set来保存满足一类条件的User用户的id信息。例如,性别为女,年龄大于25岁等条件。
3、Java实现的具体代码如下:
3.1 Json相关的工具类
3.2 User实体类
3.3 Redis实现类似SQL的多条件查询测试
1.1 使用Redis的Hash类型去保存关系型数据库的User表
1.2 redis的Hash的key为"SYS_USER_TABLE_SEX_MAN",field:userid value:json 数据
2、利用Redis的Set来保存满足一类条件的User用户的id信息。例如,性别为女,年龄大于25岁等条件。
3、Java实现的具体代码如下:
3.1 Json相关的工具类
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); } }
3.2 User实体类
public class User { private int id; private String name; private String sex; private int age; public User() { } public int getAge() { return age; } public void setAge(int age) { this.age = age; } 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 String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]"; } }
3.3 Redis实现类似SQL的多条件查询测试
public class RedisSQL { public static void main(String[] args) { // 将User表的内容放到Redis里面,下面为key // 将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_FEMAN = "SYS_USER_TABLE_SEX_FEMAN"; // 用于保存age为25岁的用户的Redis的Set final String SYS_USER_TABLE_AGE_25 = "SYS_USER_TABLE_AGE_25"; // 获取数据库的连接 Jedis jedis = new Jedis("192.168.2.116", 6379); // 模拟数据库的表User的数据 List<User> users = new ArrayList<User>(); for (int i = 0; i < 5; i++) { User user = new User(); user.setId(i); user.setName("zhang" + i); user.setSex("man"); user.setAge(20 + i); users.add(user); } for (int i = 5; i < 10; i++) { User user = new User(); user.setId(i); user.setName("zhang" + i); user.setSex("feman"); user.setAge(20 + i); 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集合里面 // 只需要加入User用户的id就可以了 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集合里面 // 只需要加入User用户的id就可以了 if ("feman".equals(users.get(i).getSex())) { jedis.sadd(SYS_USER_TABLE_SEX_FEMAN, users.get(i).getId() + ""); } // 如果有age,birthday等,使用类似的方法 // 在Redis里面,新建立一个Set,用来保存符合条件的相关User的id信息 if ("25".equals(users.get(i).getAge() + "")) { jedis.sadd(SYS_USER_TABLE_AGE_25, users.get(i).getId() + ""); } } // 查看转换结果 // Set<String> keySet = map.keySet(); // for (String key : keySet) { // System.out.println(map.get(key)); // } // 保存User表的数据到Redis中 // key为SYS_USER_TABLE // 每条记录一 feild :id value:json 的形式保存 jedis.hmset(SYS_USER_TABLE, map); // =============================== // 模拟SQL的where多条件查询 // 查询年龄为25岁,性别为女的user用户 Set<String> sinter = jedis.sinter(SYS_USER_TABLE_SEX_FEMAN); for (String key : sinter) { // 根据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); } // 查询年龄为25岁,性别为女的user用户 Set<String> sinter2 = jedis.sinter(SYS_USER_TABLE_SEX_FEMAN, SYS_USER_TABLE_AGE_25); for (String key : sinter2) { // 根据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); } } }
相关文章推荐
- ASP.NET 之 CheckBoxList在实际项目中的应用——高级查询、数据库读出默认选中
- 【Redis】Redis在实际项目中的应用
- Redis在Php项目中的实际应用场景
- Redis在Php项目中的实际应用场景
- Redis在Laravel项目中的应用实例详解
- java 乐观锁悲观锁项目实际应用
- Spring管理事物应用到实际的项目中--编程式事物
- Redis实战应用举例
- [Flex]浅析Mate flex framework在实际项目中的应用(一)
- [Flex]浅析Mate flex framework在实际项目中的应用(二)
- 加速Java应用开发速度2——加速项目调试启动速度
- 菜鸟-手把手教你把Acegi应用到实际项目中(10)-保护业务方法
- IEC61850变电站基本通信结构-原理和模型_4实际应用建模举例
- 【git 学习--02】项目实际应用之 git rebase 【变基】非默认仓库代码
- 工厂模式与抽象工厂在实际项目中的应用
- 【学习方法】常见算法在实际项目中的应用
- 加速Java应用开发速度2——加速项目调试启动速度
- 【grunt第三弹】grunt在前端实际项目中的应用
- ESB 在实际项目中的应用(WebSphere Message Broker )
- Redis 在电商中的实际应用场景