Spring集成Jedis的使用实现单机版和集群版,实现省级联动

不和spring集成的jedis的使用https://blog.csdn.net/kxj19980524/article/details/83585441

redis集群搭建https://blog.csdn.net/kxj19980524/article/details/84073579

先导入依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.3</version>
</dependency>

redis的xml配置文件 ,放spring配置文件里也行,但是还是单独写一个比较好,一个单击版的一个集群版的,使用集群的时候把集群的配置文件放开单击的注掉就行了.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!--将redis对象交给spring容器管理-->
    <!--注册单机版的reids,创建jedisPool,需要通过构造方法注入pool和host-->
    <!--连接redis的单机版-->
    <!--注册单机版的实现类-->
    <bean id="jedisClientPool" class="com.bgs.redis.impl.JedisClientPool">
        <property name="jedisPool" ref="jedisPool"></property>
    </bean>

    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="host" value="192.168.44.9"></constructor-arg>
        <constructor-arg name="port" value="6379"></constructor-arg>
    </bean>

<!--
    <bean id="jedisClientCluster" class="com.buba.party.redis.impl.JedisClientCluster">
        <property name="jedisCluster" ref="jedisCluster"/>
    </bean>
    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg>
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.44.9"/>
                    <constructor-arg name="port" value="7001"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.44.9"/>
                    <constructor-arg name="port" value="7002"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.44.9"/>
                    <constructor-arg name="port" value="7003"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.44.9"/>
                    <constructor-arg name="port" value="7004"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.44.9"/>
                    <constructor-arg name="port" value="7005"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.44.9"/>
                    <constructor-arg name="port" value="7006"/>
                </bean>

            </set>
        </constructor-arg>
    </bean>-->
</beans>

如果单独使用一个配置文件的话,要把web.xml修改掉,把这块跟根据自己的前缀名进行修改,配置成*不然的话redis配置文件读取不到

 连接池类和接口,这里面的方法可以自己扩展,根据需要自己添加就行

package com.bgs.redis;   //这个是注入时的接口

public interface JedisClient {

    String set(String key, String value);
    String get(String key);
    Boolean exists(String key);
    Long expire(String key, int seconds);
    Long ttl(String key);
    Long incr(String key);
    Long hset(String key, String field, String value);
    String hget(String key, String field);
    Long hdel(String key, String... field);
}
package com.bgs.redis.impl;   //这个是单击版的实现类

import com.bgs.redis.JedisClient;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import javax.annotation.Resource;

public class JedisClientPool implements JedisClient {
    @Resource
    private JedisPool jedisPool;

    public JedisPool getJedisPool() {
        return jedisPool;
    }

    public void setJedisPool(JedisPool jedisPool) {
        this.jedisPool = jedisPool;
    }

    @Override
    public String set(String key, String value) {
        Jedis jedis = jedisPool.getResource();
        String result = jedis.set(key, value);
        jedis.close();
        return result;
    }

    @Override
    public String get(String key) {
        Jedis jedis = jedisPool.getResource();
        String result = jedis.get(key);
        jedis.close();
        return result;
    }

    @Override
    public Boolean exists(String key) {
        Jedis jedis = jedisPool.getResource();
        Boolean result = jedis.exists(key);
        jedis.close();
        return result;
    }

    @Override
    public Long expire(String key, int seconds) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.expire(key, seconds);
        jedis.close();
        return result;
    }

    @Override
    public Long ttl(String key) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.ttl(key);
        jedis.close();
        return result;
    }

    @Override
    public Long incr(String key) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.incr(key);
        jedis.close();
        return result;
    }

    @Override
    public Long hset(String key, String field, String value) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.hset(key, field, value);
        jedis.close();
        return result;
    }

    @Override
    public String hget(String key, String field) {
        Jedis jedis = jedisPool.getResource();
        String result = jedis.hget(key, field);
        jedis.close();
        return result;
    }

    @Override
    public Long hdel(String key, String... field) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.hdel(key, field);
        jedis.close();
        return result;
    }
}

 

package com.bgs.redis.impl;   //这个是集群版的实现类

import com.bgs.redis.JedisClient;
import redis.clients.jedis.JedisCluster;

import javax.annotation.Resource;

public class JedisClientCluster implements JedisClient {

    @Resource
    private JedisCluster jedisCluster;

    public JedisCluster getJedisCluster() {
        return jedisCluster;
    }

    public void setJedisCluster(JedisCluster jedisCluster) {
        this.jedisCluster = jedisCluster;
    }

    @Override
    public String set(String key, String value) {
        return jedisCluster.set(key, value);
    }

    @Override
    public String get(String key) {
        return jedisCluster.get(key);
    }

    @Override
    public Boolean exists(String key) {
        return jedisCluster.exists(key);
    }

    @Override
    public Long expire(String key, int seconds) {
        return jedisCluster.expire(key, seconds);
    }

    @Override
    public Long ttl(String key) {
        return jedisCluster.ttl(key);
    }

    @Override
    public Long incr(String key) {
        return jedisCluster.incr(key);
    }

    @Override
    public Long hset(String key, String field, String value) {
        return jedisCluster.hset(key, field, value);
    }

    @Override
    public String hget(String key, String field) {
        return jedisCluster.hget(key, field);
    }

    @Override
    public Long hdel(String key, String... field) {
        return jedisCluster.hdel(key, field);
    }

}

 

使用过程,我这个案例是查询省级联动信息,都是以json串形式存取的,不是固定的看你们需求

前台jsp页面,写三个input框就行了

<select style="width:130px" name="provinceCode" id="province">
    <option value="0">--请选择--</option>
</select>
<select style=" width:130px" id="city" name="cityCode">
    <option value="0">--请选择--</option>
</select>
<select style=" width:130px" id="area" name="areaCode">
    <option value="0">--请选择--</option>
</select>

js代码,这是用的ajax访问后台来进行查询,每次点击都进行查询相应的展示的东西然后添加到下拉框

 

$("#province").change(function(){
    $("#city").empty();
    $("#area").empty();
    var pId = $("#province").val();
    $("#city").append("<option value='0'>--请选择--</option>");
    $("#area").append("<option value='0'>--请选择--</option>");
    $.ajax({
        url:"${pageContext.request.contextPath}/province/findAllCity",
        type:"post",
        dataType:"json",
        data:{"province":pId},
        success:function(data){
            $(data).each(function(a,b){
                $("#city").append("<option value='"+b.cityid+"'>"+b.city+"</option>");
            });
        },
        error:function(){
        }
    });
});

$("#city").change(function(){
    $("#area").empty();
    var pId = $("#city").val();
    $("#area").append("<option value='0'>--请选择--</option>");
    $.ajax({
        url:"${pageContext.request.contextPath}/province/findAllArea",
        type:"post",
        dataType:"json",
        data:{"area":pId},
        success:function(data){
            $(data).each(function(a,b){
                $("#area").append("<option value='"+b.areaid+"'>"+b.area+"</option>");
            });
        },
        error:function(){
        }
    });
});

Controller 代码

package com.bgs.controller;

import com.bgs.pojo.City;
import com.bgs.pojo.HatArea;
import com.bgs.pojo.HatCity;
import com.bgs.pojo.HatProvince;
import com.bgs.service.ProvinceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("/province")
public class ProvinceController {

    @Autowired
    private ProvinceService provinceService;

    //获取所有的省信息
    @RequestMapping ("/findAllProvince")
    @ResponseBody
    public List<HatProvince> findAllProvince(){
        List<HatProvince> allProvince = provinceService.findAllProvince();
        return  allProvince;
    }

    //获取所有城市信息
    @RequestMapping("/findAllCity")
    @ResponseBody
    public List<HatCity> findAllCity(String province){
        List<HatCity> allCity = provinceService.findAllCity(province);
        return  allCity;
    }

    //获取所有的县
    @RequestMapping("/findAllArea")
    @ResponseBody
    public List<HatArea> findAllArea(String area){
        List<HatArea> allArea = provinceService.findAllArea(area);
        return allArea;
    }
} 

 实现类代码,里面的逻辑呢就是注入jedis后,如果redis中有缓存就从缓存中拿,如果没有从数据库拿,mapper那边自己写就可以了就是个查询

 

package com.bgs.serviceimpl;

import com.alibaba.fastjson.JSONObject;
import com.bgs.mapper.HatAreaMapper;
import com.bgs.mapper.HatCityMapper;
import com.bgs.mapper.HatProvinceMapper;
import com.bgs.pojo.HatArea;
import com.bgs.pojo.HatCity;
import com.bgs.pojo.HatProvince;
import com.bgs.redis.JedisClient;
import com.bgs.redis.impl.JedisClientPool;
import com.bgs.service.ProvinceService;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
@Service
public class ProvinceServiceImpl implements ProvinceService {
    @Autowired
    private HatProvinceMapper hatProvinceMapper;

    @Autowired
    private HatCityMapper hatCityMapper;

    @Autowired
    private HatAreaMapper hatAreaMapper;

    @Autowired
    private JedisClient jedisClient;
    @Override
    public List<HatProvince> findAllProvince() {
        String province = jedisClient.get("province");  //判断redis中有没有该key
        List<HatProvince> allProvince = null;
        if(StringUtils.isNotBlank(province)){             //如果有就取出来转换成存的时候的list集合
            allProvince = JSONObject.parseArray(province, HatProvince.class);
            return allProvince;
        }
        allProvince = hatProvinceMapper.findAllProvince();  //如果没有的话从数据库取出来存入redis当中
        String s = JSONObject.toJSONString(allProvince);
        jedisClient.set("province",s);              
        return allProvince;
    }

    @Override
    public List<HatArea> findAllArea(String area) {
        List<HatArea> allArea = null;
        String area1 = jedisClient.hget("area", area);
       // String s = jedisClient.get(area);
        if(StringUtils.isNotBlank(area1)){
            allArea = JSONObject.parseArray(area1, HatArea.class);
            return allArea;
        }
        allArea = hatAreaMapper.findAllArea(area);
        //jedisClient.set(area,JSONObject.toJSONString(allArea));
        jedisClient.hset("area",area,JSONObject.toJSONString(allArea)); //这个存取方式是以hash的方式存取的
        return allArea;
    }

    @Override
    public List<HatCity> findAllCity(String province) {
        List<HatCity> allCity =null;
        //String s = jedisClient.get(province);
        String city = jedisClient.hget("city", province);
        if(StringUtils.isNotBlank(city)){
            allCity = JSONObject.parseArray(city, HatCity.class);
            return allCity;
        }
        allCity = hatCityMapper.findAllCity(province);
        //jedisClient.set(province,JSONObject.toJSONString(allCity));
        jedisClient.hset("city",province,JSONObject.toJSONString(allCity));
        return allCity;
    }
}

这个就是省的表,查询id值和名字就可以了存redis也是根据这个存的,百度一查都有这种表的

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值