Redis在项目中如何使用?

一、简单介绍

redis最主要的功能:
	1.1 做缓存,一些经常查询的数据又不会修改的数据就可以放在redis中;
	1.2 可以做redis队列,比如短信邮件可以放入到redis队列中。
	1.3 redis-session共享
	缺点:数据多了会消耗内存,
	优点:但是查询数据库快,可以减轻数据库的压力。
	首先redis有16个数据库,那么根据数据库的下标去区分数据到底存入到那个数据库。数据是保存在内			存中的,

二、代码操作:

2.1   properties中的配置:
	redis.host=127.0.0.1     本机地址 需要开启
	redis.port=6379            redis的端口号
	redis.database=15     redis数据库的下标,有了这个操作就是把数据存入到下标为15的数据库中
	redis.password=20162016  redis密码
	redis.timeout=3000    超时时间
	
2.2   applicationContext.xml中的配置:
	<!--redis中设置了密码 ,默认添加到redis的第一个数据库-->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
    <constructor-arg index="0" ref="jedisPoolConfig"/>
    <constructor-arg index="1" value="${redis.host}" type="java.lang.String" />
    <constructor-arg index="2" value="${redis.port}" type="int"/>
    <constructor-arg index="3" value="${redis.timeout}" type="int"/>
    <constructor-arg index="4" value="${redis.password}" type="java.lang.String"/>
</bean>

<!--指定redis中数据库的小标为 15 -->
<bean id="jedisPool1" class="redis.clients.jedis.JedisPool">
    <constructor-arg index="0" ref="jedisPoolConfig"/>
    <constructor-arg index="1" value="${redis.host}" type="java.lang.String" />
    <constructor-arg index="2" value="${redis.port}" type="int"/>
    <constructor-arg index="3" value="${redis.timeout}" type="int"/>
    <constructor-arg index="4" value="${redis.password}" type="java.lang.String"/>
    <constructor-arg index="5" value="${redis.database}" type="int"/>
</bean>

三、代码

/**
 * Redis帮助类
 *
 */
@Component
public class RedisHelper {

    @Autowired
    private JedisPool jedisPool;  //如果注入这个就是默认把数据存入到redis的第一个数据库


    @Autowired
    private JedisPool jedisPool1;  //如果注入这个就是把数据存入到redis的16个数据库 下标为15
     /**
     * cache前缀
     */
    @Value("${cachePrefix}")   //这个写一个前缀 。类似于一个文件夹 在RedisDesktopManager 可视化工具中可以查看
    private String cachePrefix;


    /**
     * 根据key获取缓存数据
     *
     * @param key
     * @return
     */
    public String get(String key) {
        Jedis jedis = jedisPool.getResource();
        try {
            return jedis.get(cachePrefix + key);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 获取指定前缀的所有key
     *
     * @param prefix
     * @return
     */
    public Set<String> keys(String prefix) {
        Jedis jedis = jedisPool.getResource();
        try {
            return jedis.keys(cachePrefix + prefix);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 根据key设置缓存数据,如果以前存在更新,如果以前没有添加
     *
     * @param key
     * @param value
     */
    public void set(String key, String value) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.set(cachePrefix + key, value);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 根据key设置缓存数据,如果以前存在更新,如果以前没有添加
     *
     * @param key
     * @param value
     * @param expire 过期时间,单位秒
     */
    public void set(String key, String value, int expire) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.set(cachePrefix + key, value);
            jedis.expire(cachePrefix + key, expire);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 根据key删除缓存数据
     *
     * @param key
     */
    public void del(String key) {


        Jedis jedis = jedisPool.getResource();
        try {
            jedis.del(cachePrefix + key);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 设置集合   这个的话简单减少一下,他主要在我们的项目中和es结合使用的,比如订单和商品是发布的es中,因为es查询速度很快
     * 那么可变参数 我们只需要把商品的id和订单的id存入到一个数组中,再调用此方法,到时候再es中根据redis中下面smembers这个方法
     * 拿到所有的id,再到数据库查询出来一个对象存入到es中,到时候商品和订单就是从数据库查询出来的。
     * @param name
     * @param value
     */
    public void sadd(String name, String... value) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.sadd(cachePrefix + name, value);

        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 获取集合  
     * @param name
     */
    public void scard(String name){
        Jedis jedis = jedisPool.getResource();
        try {
            Long scard = jedis.scard(cachePrefix + name);
            System.out.println("scard=="+scard);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 获取指定键名的集合中的所有成员
     *
     * @param name
     * @return
     */
    public Set<String> smembers(String name) {
        Jedis jedis = jedisPool.getResource();
        try {
            return jedis.smembers(cachePrefix + name);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 返回集合中的随机元素
     *
     * @param name
     * @param count
     * @return
     */
    public List<String> srandmember(String name, int count) {
        Jedis jedis = jedisPool.getResource();
        try {
            return jedis.srandmember(cachePrefix + name, count);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 移除集合
     *
     * @param name
     * @return
     */
    public void spop(String name) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.spop(cachePrefix + name);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 移除集合中的一个或多个元素
     *
     * @param name
     * @return
     */
    public void srem(String name, String... key) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.srem(cachePrefix + name, key);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 添加到hash
     *
     * @param name
     * @param key
     * @param value
     */
    public void hset(String name, String key, String value) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.hset(cachePrefix + name, key, value);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 从hash中读取
     *
     * @param name
     * @param key
     * @return
     */
    public String hget(String name, String key) {
        Jedis jedis = jedisPool.getResource();
        try {
            return jedis.hget(cachePrefix + name, key);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 从hash中删除
     *
     * @param name
     * @param key
     */
    public void hdel(String name, String key) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.hdel(cachePrefix + name, key);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 设置key的过期时间
     * @param name
     * @param seconds
     */
    public void expire(String name, int seconds){
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.expire(cachePrefix + name, seconds);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 检查键是否存在
     * @param name
     * @return
     */
    public Boolean exists(String name){
        Jedis jedis = jedisPool.getResource();
        try {
            return jedis.exists(cachePrefix + name);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }
}

 

## redis队列代码

/**
 *
 * 队列帮助类
 *
 */
@Component
public class QueueHelper {

    @Autowired
    private JedisPool jedisPool;

    /**
     * Queue前缀
     */
    @Value("${queuePrefix}")
    private String prefix;

    /**
     * 读取队列
     * @return
     */
    public String pop(String name) {
        Jedis jedis = jedisPool.getResource();
        try {
            return jedis.lpop(prefix + name);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }

    /**
     * 写入队列   简单介绍一下:value就是我们发送短信的对象,比如把电话号码 、发布的内容、封转到一个对象中,再把此对象转换为json字符串的		格式传进来,到时候再定时任务中再调上面那个方法查询出来,再去调发布短信和邮件的方法就可以了,注意:此时的定时任务需要配置为一直运行。
     * 
     * @param value
     */
    public void push(String name, String value) {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.rpush(prefix + name, value);
        } finally {
            jedisPool.returnResourceObject(jedis);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42075468/article/details/89040452