SSM整合redis

摘要:
--初始化Jedis连接池--˃˂!

准备工作:

jedis连接

添加jar支持:

    <!--redis依赖 -->
<dependency>  
   <groupId>org.springframework.data</groupId>  
   <artifactId>spring-data-redis</artifactId>  
   <version>1.6.0.RELEASE</version>  
</dependency>  
<dependency>  
   <groupId>redis.clients</groupId>  
   <artifactId>jedis</artifactId>  
   <version>2.7.3</version>  
</dependency>

如果redis服务想被外部链接访问,需要修改redis.conf配置 (69行)

69 上面bind 相应本机的IP

136 行 daemonize yes

SSM整合redis第1张

启动服务:

./bin/redis-server bin/redis.conf

命令测试:

./bin/redis-cli -h 192.168.182.20

编码测试:

Jedis jedis=new Jedis("192.168.23.111",6379);

//jedis.ping();

JedisPool jedisPool=new JedisPool("192.168.23.111",6379);

Jedis resource = jedisPool.getResource();

单机版

1,在web.xml里面添加

SSM整合redis第2张

配置多个spring配置文件的路径

2,添加spring-redis.xml

<!-- 开启扫描 -->
    <context:component-scan base-package="com.duguangming.util"></context:component-scan>
    <!-- 初始化Jedis连接池-->
    <bean   class="redis.clients.jedis.JedisPoolConfig">
        <!--最大连接数,默认8个-->
        <property name="maxTotal" value="50" />
        <!--最大空闲连接数,默认8-->
        <property name="maxIdle" value="10" />
        <!--连接时的最大等待毫秒数-->
        <property name="maxWaitMillis" value="1000" />
        <!--获得一个jedis实例的时候是否检查连接可用性-->
        <property name="testOnBorrow" value="true" />
    </bean>
    <!-- 把jedisPool交给spring管理 -->
    <bean   class="redis.clients.jedis.JedisPool" >
        <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg>
        <constructor-arg name="host" value="192.168.239.20"></constructor-arg>
        <constructor-arg name="port" value="6379"></constructor-arg>
    </bean>

3,编写JedisUtil及实现类,序列化工具

public interfaceJedisUtil {
    /**
     * 放入缓存
     * @paramkey
     * @paramvalue
     */
    voidputObject(Object key, Object value);
    /**
     * 清除缓存
     * @paramarg0
     * @return
     */
    Object removeObject(Object arg0);
    /**
     * 从缓存中获取
     * @paramarg0
     * @return
     */
    Object getObject(Object arg0);
}
@Component
public class JedisUtilImpl implementsJedisUtil{
  
@Autowired
    privateJedisPool jedisPool;
   //放入缓存
    public voidputObject(Object key, Object value) {
        //TODO Auto-generated method stub
        Jedis resource =jedisPool.getResource();
        resource.set(SerializeUtil.serialize(key.toString()),
                SerializeUtil.serialize(value));
        resource.close();
    }
   //清楚缓存
    publicObject removeObject(Object arg0) {
        //TODO Auto-generated method stub
        Jedis resource =jedisPool.getResource();
        Object expire =resource.expire(
                SerializeUtil.serialize(arg0.toString()), 0);
        resource.close();
        returnexpire;
    }
    //从缓存中取
    publicObject getObject(Object arg0) {
        //TODO Auto-generated method stub
        Jedis resource =jedisPool.getResource();
        Object value =SerializeUtil.unserialize(resource.get(
                SerializeUtil.serialize(arg0.toString())));
        resource.close();
        returnvalue;
    }
}

序列化工具:

public classSerializeUtil {
    public static byte[] serialize(Object object) {
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try{
            //序列化
            baos = newByteArrayOutputStream();
            oos = newObjectOutputStream(baos);
            oos.writeObject(object);
            byte[] bytes =baos.toByteArray();
            returnbytes;
        } catch(Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static Object unserialize(byte[] bytes) {
        if (bytes == null)
            return null;
        ByteArrayInputStream bais = null;
        try{
            //反序列化
            bais = newByteArrayInputStream(bytes);
            ObjectInputStream ois = newObjectInputStream(bais);
            returnois.readObject();
        } catch(Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

4,在服务层注入接口测试缓存功能

SSM整合redis第3张

service层实现类具体代码:

public List<Class>listAll() {
        List<Class> classListByParam = null;
        //从缓存中获取班级列表
        Object classList = jedisUtil.getObject("ddd");
        //判断缓存中是否存在
        if(classList!=null){//不空,强转返回
            System.out.println("redis缓存中存在,直接返回");
            classListByParam= (List<Class>)SerializeUtil.unserialize((byte[])classList);
        }else{
            System.out.println("redis缓存中不存在,从数据库中取出,并且放入缓存");
            //查询数据库,取出
            classListByParam =classDAO.listAll();
            //放入redis缓存
            jedisUtil.putObject("ddd", SerializeUtil.serialize(classListByParam));
        }
        returnclassListByParam;
    }

redis集群版(实体类需要实现序列化接口)

注意:在项目中使用集群(  要求jedis2.8以上版本,更换pom版本)

ssm项目中,spring-redis-cluster.xml主配置文件的配置

<!--扫描包-->
    <context:component-scan base-package="com.duguangming.util"></context:component-scan>
    <bean class="redis.clients.jedis.JedisCluster">
       <constructor-arg name="nodes">
           <set>
               <!--配置集群任意一台节点就可以-->
               <bean class="redis.clients.jedis.HostAndPort">
                   <constructor-arg name="host" value="192.168.239.20"/>
                   <constructor-arg name="port" value="7001"/>
               </bean>
               <bean class="redis.clients.jedis.HostAndPort">
                   <constructor-arg name="host" value="192.168.239.20"/>
                   <constructor-arg name="port" value="7002"/>
               </bean>
               <bean class="redis.clients.jedis.HostAndPort">
                   <constructor-arg name="host" value="192.168.239.20"/>
                   <constructor-arg name="port" value="7003"/>
               </bean>
               <bean class="redis.clients.jedis.HostAndPort">
                   <constructor-arg name="host" value="192.168.239.21"/>
                   <constructor-arg name="port" value="7004"/>
               </bean>
               <bean class="redis.clients.jedis.HostAndPort">
                   <constructor-arg name="host" value="192.168.239.21"/>
                   <constructor-arg name="port" value="7005"/>
               </bean>
               <bean class="redis.clients.jedis.HostAndPort">
                   <constructor-arg name="host" value="192.168.239.21"/>
                   <constructor-arg name="port" value="7006"/>
               </bean>
           </set>
       </constructor-arg>
    </bean>
</beans>

ssm项目中,web.xml的路径配置

SSM整合redis第4张

ssm项目中,JedisUtilImpl实现类的

@Component
public class JedisUtilImpl implementsJedisUtil{
    @Autowired
    privateJedisCluster jedisCluster;
    public voidputObject(Object key, Object value) {
        jedisCluster.set(SerializeUtil.serialize(key),SerializeUtil.serialize(value));
    }
    publicObject removeObject(Object arg0) {
        return jedisCluster.expire(SerializeUtil.serialize(arg0),1);
    }
    publicObject getObject(Object arg0) {
        byte[] bytes =jedisCluster.get(SerializeUtil.serialize(arg0));
        returnSerializeUtil.unserialize(bytes);
    }
}

免责声明:文章转载自《SSM整合redis》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇字典树的使用(匹配子串)mysql中的data下的数据文件(.FRM、.MYD、.MYI)恢复为数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

centos安装redis并开启多个redis实例

1.下载安装包       下载地址 :  http://download.redis.io/releases/,去里面找对应的版本下载        例如  wget http://download.redis.io/releases/redis-5.0.0.tar.gz 2.解压       tar -zxf  redis-5.0.0.tar.gz  ...

redis 3 主从节点保证数据一致性+ 数据持久化(RDB+AOF)

redis主从保证数据一致性 前言 在redis中为了保证redis的高可用,一般会搭建一种集群模式就是主从模式。 主从模式可以保证redis的高可用,那么redis是怎么保证主从服务器的数据一致性的,接下来我们浅谈下redis主(master)从(slave)同步的原理。 初次全量同步(即从节点作为新节点,刚连上的时候) 当一个redis服务器初次向主服...

window10 64位系统下redis服务端的下载-安装-配置-卸载

redis下载 windows下载地址:https://github.com/microsoftarchive/redis/releases 自己定义一个目录,解压一下,我的目录是这个,其中:redis-cli.exe是客户端,redis-server.exe是服务端 redis启动 之后cmd打开一个窗口,将目录切换到redis的目录下,运行启动命令...

dbUtils 工具类介绍

导包: commons-dbutils.jar 核心类: QueryRunner 常用方法: // 执行增,删,改语句, 返回影响的行数 int update(String sql,Object... params); // 执行增, 删, 改语句, 但是需要调用者提供 Connection 对象, 支持事务. int updat...

从今天开始看《Redis深度历险》--位图

网页版redis并不支持bitfield这个指令 位图这一概念让我想起来一个算法问题,在N亿个数字中判断某个数是否存在,感兴趣的可以去看一下。 看过上面的问题之后我相信对书中的零存整取、整存零取概念就会理解了,书中的例子是将hello字符串转换为ASCII码进行零存整取、整存零取。   相关指令   setbit key value 按位存   getbi...

MultipartFile(文件的上传)--CommonsMultipartResolver

一 : applicationContext.xml中:必须声明不然获取不到 <!-- 上传文件的配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">...