redis初试

前言:

项目中用到了redis,代码是别人写的,但是感觉redis很强大,技多不压身所以学习了一下,下面展示一下:

正文:

搭建:两台虚拟机三主三从,安装过程还算是曲折,以后写博客吧

使用:

jar包:

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

redis也算是独立出来的一个服务,建立接口JedisClient还有实现单机版的类JedisClientSingle,实现增删改

public class JedisClientSingle implements JedisClient {

    @Autowired
    private 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 Long hset(String key, String item, String value) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.hset(key,item,value);
        jedis.close();
        return result;
    }
    @Override
    public String hget(String key, String item) {
        Jedis jedis = jedisPool.getResource();
        String result = jedis.hget(key,item);
        jedis.close();
        return result;
    }
    //incr递增1并返回递增后的结果
    @Override
    public Long incr(String key) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.incr(key);
        jedis.close();
        return result;
    }
    //decr递减1并返回递减后的结果
    @Override
    public Long decr(String key) {
        //似incr
    }
    //设置到期时间
    @Override
    public Long expire(String key, int second) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.expire(key, second);
        jedis.close();
        return result;
    }
    //以秒为单位返回 key 的剩余过期时间
    //当 key 不存在时,返回 -2 ; 当 key 存在但没有设置剩余生存时间时,返回 -1
    @Override
    public Long ttl(String key) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.ttl(key);
        jedis.close();
        return result;
    }
    @Override
    public Long hdel(String key, String item) {
        Jedis jedis = jedisPool.getResource();
        Long result = jedis.hdel(key,item);
        jedis.close();
        return result;
    }
相对而言集群版因为都是现成的东西使用代码量要少一些:直接调用JedisCluster方法

交个spring管理:

<!--<!–redis客户端单机版–>-->
    <!--<bean id="jedisPool" class="redis.clients.jedis.JedisPool">-->
        <!--<constructor-arg name="host" value="192.168.22.102"></constructor-arg>-->
        <!--<constructor-arg name="port" value="6380"></constructor-arg>-->
    <!--</bean>-->
    <!--<!–配置客户端实现类–>-->
    <!--<bean id="jedisClientSingle" class="com.taotao.rest.component.impl.JedisClientSingle"/>-->

    <!--配置redis客户端集群版-->
    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg>
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.22.102"/>
                    <constructor-arg name="port" value="6380"/>
                </bean>
            ……
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.22.103"/>
                    <constructor-arg name="port" value="6383"/>
                </bean>
         ……
            </set>
        </constructor-arg>
    </bean>
    <bean id="jedisClientCluster" class="com.taotao.rest.component.impl.JedisClientCluster"/>
调用:

先注入:

@Autowired
    private JedisClient jedisClient;


查询前先查redis,没有查到则从数据库查到数据并在返回前将数据保存到redis中,集群自动同步;REDIS_CONTENT_KEY交给spring管理的变量(の常量?)

 @Override
     public List<TbContent> getContentList(Long cid){
        //添加缓存
        //查询数据库之前先查询缓存,如果有直接返回
        try {
            String json = jedisClient.hget(REDIS_CONTENT_KEY,cid+"");
            if(!StringUtils.isBlank(json)){
                //把json转换成list
               return JsonUtils.jsonToList(json,TbContent.class);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
         //根据cid查询内容列表内容
        TbContentExample example = new TbContentExample();
        TbContentExample.Criteria criteria = example.createCriteria();
        criteria.andCategoryIdEqualTo(cid);
        //执行查询
        List<TbContent> list =contentMapper.selectByExampleWithBLOBs(example);
        //返回结果之前,向缓存中添加数据
        try {
            //为了规范key可以使用hash
            //定义一个保存内容的key,hash中每项就是cid
            //value就是list,需要把list转换成json数据
            jedisClient.hset(REDIS_CONTENT_KEY,cid+"",JsonUtils.objectToJson(list));
        }catch (Exception e){
            e.printStackTrace();
        }
        return list;
    }
备注:redis和查询服务是同一服务

小结:

一个简单的应用,redis还需要进一步的学习


评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值