知识点

相关文章

更多

最近更新

更多

redis整合spring示例一

2019-03-12 22:05|来源: 网路

这里使用java操作redis的示例,也是领悟书生网站项目中使用的代码.当然本示例也是参考网上的相关文章做了相应的改动。


首先看看redis所依懒的maven包

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.6.2</version>
</dependency>


spring的配置文件

<context:component-scan base-package="com._656463.redis" />
<context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxTotal" value="50" />
     <property name="maxIdle" value="8" />
     <property name="maxWaitMillis" value="1000" />
     <property name="testOnBorrow" value="true"/>
     <property name="testOnReturn" value="true"/>
</bean>
  
<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool" scope="singleton">
    <constructor-arg index="0" ref="jedisPoolConfig" />
    <constructor-arg index="1">
        <list>
            <bean class="redis.clients.jedis.JedisShardInfo">
                <constructor-arg name="host" value="${redis.host}" />
                <constructor-arg name="port" value="${redis.port}" />
                 <property name="password" value="${redis.pass}"/>
            </bean>
        </list>
    </constructor-arg>
</bean>

属性文件:

redis.host=121.40.80.59
redis.port=6379
redis.pass=dddddd
  
redis.pool.maxIdle=300
redis.pool.maxActive=600
redis.pool.maxWait=1000
redis.pool.testOnBorrow=true

数据源接口

package com._656463.redis;
  
import redis.clients.jedis.ShardedJedis;
  
public interface RedisDataSource {
  
    /**
     * 获取redis的客户端
     * 
     * @return
     */
    public abstract ShardedJedis getRedisClient();
  
    /**
     * 将资源返还给pool
     * 
     * @param shardedJedis
     */
    public void returnResource(ShardedJedis shardedJedis);
  
    /**
     * 出现异常后,将资源返还给pool (其实不需要第二个方法)
     * 
     * @param shardedJedis
     * @param broken
     */
    public void returnResource(ShardedJedis shardedJedis, boolean broken);
}

实现类

package com._656463.redis;
  
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
  
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
  
@Repository("redisDataSource")
public class RedisDataSourceImpl implements RedisDataSource {
  
    @Autowired
    private ShardedJedisPool shardedJedisPool;
  
    public ShardedJedis getRedisClient() {
        try {
            ShardedJedis shardJedis = shardedJedisPool.getResource();
            return shardJedis;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
  
    public void returnResource(ShardedJedis shardedJedis) {
        shardedJedisPool.returnResource(shardedJedis);
    }
  
    public void returnResource(ShardedJedis shardedJedis, boolean broken) {
        if (broken) {
            shardedJedisPool.returnBrokenResource(shardedJedis);
        } else {
            shardedJedisPool.returnResource(shardedJedis);
        }
    }
}

redis连接模板类RedisClientTemplate

package com._656463.redis;
  
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
  
import redis.clients.jedis.ShardedJedis;
  
@Repository("redisClientTemplate")
public class RedisClientTemplate {
  
    @Autowired
    private RedisDataSource redisDataSource;
  
    public void disconnect() {
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        shardedJedis.disconnect();
    }
      
    public void delKey(String key){
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        boolean broken = false;
        try {
            if (shardedJedis != null) {
                shardedJedis.del(key);
            }
        } catch (Exception e) {
            e.printStackTrace();
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
    }
      
    public void delKey(byte[] key){
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        boolean broken = false;
        try {
            if (shardedJedis != null) {
                shardedJedis.del(key);
            }
        } catch (Exception e) {
            e.printStackTrace();
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
    }
      
    public void setExpire(String key,int seconds){
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        boolean broken = false;
        try {
            if (shardedJedis != null) {
                shardedJedis.expire(key, seconds);
            }
        } catch (Exception e) {
            e.printStackTrace();
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
    }
      
    public void setExpire(byte[] key,int seconds){
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        boolean broken = false;
        try {
            if (shardedJedis != null) {
                shardedJedis.expire(key, seconds);
            }
        } catch (Exception e) {
            e.printStackTrace();
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
    }
  
    /**
     * 设置单个值
     * 
     * @param key
     * @param value
     * @return
     */
    public String set(String key, String value) {
        String result = null;
  
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
        boolean broken = false;
        try {
            result = shardedJedis.set(key, value);
        } catch (Exception e) {
            e.printStackTrace();
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
        return result;
    }
  
    /**
     * 获取单个值
     * 
     * @param key
     * @return
     */
    public String get(String key) {
        String result = null;
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        if (shardedJedis == null) {
            return result;
        }
  
        boolean broken = false;
        try {
            result = shardedJedis.get(key);
  
        } catch (Exception e) {
            e.printStackTrace();
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
        return result;
    }
  
    /**
     * 存储byte对象
     * 
     * @param key
     * @param value
     */
    public void set(byte[] key, byte[] value) {
  
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        if (shardedJedis == null) {
            return;
        }
        boolean broken = false;
        try {
            shardedJedis.set(key, value);
        } catch (Exception e) {
            e.printStackTrace();
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
    }
  
    /**
     * 获取byte[]对象
     * 
     * @param key
     * @return
     */
    public byte[] get(byte[] key) {
        ShardedJedis shardedJedis = redisDataSource.getRedisClient();
        if (shardedJedis == null) {
            return null;
        }
  
        boolean broken = false;
        try {
            return shardedJedis.get(key);
        } catch (Exception e) {
            e.printStackTrace();
            broken = true;
        } finally {
            redisDataSource.returnResource(shardedJedis, broken);
        }
        return null;
    }
}


先到这,下篇继续


redis知识点

redis快速入门

reids常用命令

redis数据结构

java_API_客户端

Jedis

Tlcache

redis_持久化

AOF

RDB

发布订阅(pub/sub)

redis_事件

redis事务

redis通讯协议

RESP(Redis Serialization Protocol)

redis高可用

redis哨兵

监控(Monitoring) 提醒(Notification) 自动故障迁移(Automatic failover)

redis主从复制

  • 复制模式

    1. 主从复制
    2. 从从复制
  • 复制过程

    • slave向master发送sync命令;
    • master开启子进程执行bgsave写入rdb文件;
    • master发送缓存和RDB文件给slave;
    • master发送数据发送给slave完成复制;

redis集群(Redis_Cluster)

相关问答

更多
  • 缓存或者session,session放到redis 可以方便分布式以及系统重启不丢失系统的session信息#这样用户就不会感觉到服务是否重启过。
  • 本人,对于以前redis的学习是非常痛苦的!近期将以前的东西捡起来。以博客的形式存储,以便于以后快速捡起来,并和广大同胞一起分享! 1):简单介绍 redis 是基于C语言开发。 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 redis 是一个 缓存数据库(片面的理解) 既可以做缓存,也可以将数据持久化到磁盘中! 本 ...
  • java使用redis缓存可以使用jedis框架,jedis操作简单,没有什么复杂的东西需要学习,网上资料很多,随便看看就会了. 将spring与redis缓存集成,其实也是使用jedis框架,只不过spring对它进行了一层封装,并将这层封装库命名为spring-data-redis. 下面将要使用spring-data-redis与jedis的jar包,并通过spring的aop功能,将redis缓存无缝无侵入的整合进来. 可以到http://download.csdn.net/detail/u0136 ...
  • 本人,对于以前redis的学习是非常痛苦的!近期将以前的东西捡起来。以博客的形式存储,以便于以后快速捡起来,并和广大同胞一起分享! 1):简单介绍 redis 是基于C语言开发。 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 redis 是一个 缓存数据库(片面的理解) 既可以做缓存,也可以将数据持久化到磁盘中! 本 ...
  • java使用redis缓存可以使用jedis框架,jedis操作简单,没有什么复杂的东西需要学习,网上资料很多,随便看看就会了. 将spring与redis缓存集成,其实也是使用jedis框架,只不过spring对它进行了一层封装,并将这层封装库命名为spring-data-redis. 下面将要使用spring-data-redis与jedis的jar包,并通过spring的aop功能,将redis缓存无缝无侵入的整合进来. 可以到http://download.csdn.net/detail/u0136 ...
  • 基于这段时间折腾redis遇到了各种问题,想着整理一下。本文主要介绍基于Spring+Mybatis以注解的形式整合Redis。
  • 我觉得搭建框架必须要自己来动手做!可能前期会很困扰,出现很多错误。但是只要有一次搭建成功的话,你就会豁然开朗。因为每个人的思路,方法都不一样。单纯的借用别人的框架去完成功能,之后会更困扰的!
  • 集群环境下,每台服务器的spring cache是不同步的,这样会出问题的,spring cache只适合单机环境 redis是设置单独的缓存服务器,所有集群服务器统一访问redis,不会出现缓存不同步的情况 spring cache是很早就有的东西,现在+redis是为了顺应时代,更好的兼容集群环境,加强保留spring cache功能,不如直接使用redis
  • spring