Redis简介及使用

1.简介
        为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生
    的数据库解决方案,就是NoSql。redis为其产品Redis是使用c语言开发的一
    个高性能键值数据库。Redis可以通过一些键值类型来存储数据。
        key-value ,即使断电也不会丢失数据,主要 用来做缓存数据库和web集群时
    当做中央缓存存放session,内存级别的缓存操作很快
        把经常需要查询的,很少修改数据,放到读速度很快的空间(内存)以便减少
    访问数据库的时间,减轻压力,减少访问时间
        redis中的计数器是原子性的内存操作,可以解决库存溢出的问题。
    用处:中央缓存,!!!
    redis对象保存方式?
        json字符串
            需要把对象转换成json字符串,当做字符串处理,直接set,get来设置
            优点:设置获取比较简单 ,少量数据用
            缺点:没有提供专门的方法需要手动转换
        字节:
            需要做序列化,就是把对象序列化字节保存,百万大数据用
    redis数据淘汰机制
         内存有限,需要保存有效的数据,redis内存数据集大小上升到一定
        大小时就会施行数据淘汰策略,redis提供6中策略
        volatile-lru:从以设置过期时间的数据集,中挑选最近最少使用的淘汰
        allkeys-lru: 从数据及中挑选最近最少使用的数据淘汰。
    java访问Redis
        使用jedis java客户端来访问redis服务器,类似于jdbc访问mysql一样
        Spring data也可以 相当于jedis二次封装
    redis具有事务的特性
2.导入jar包
    <!-- Redis客户端 -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.7.2</version>
            </dependency>
    
2.spring整合redis service层配置文件
    <!-- 访问单机版redis,创建RedisPool对象 -->
        <bean id="jedisPoolId" class="redis.clients.jedis.JedisPool">
           <constructor-arg name="host" value="10.0.129.80"></constructor-arg>
           <constructor-arg name="port" value="6379"></constructor-arg>
        </bean>
        
        <bean class="com.util.redis.JedisPoolClient">
            <property name="jedisPool" ref="jedisPoolId"></property>
        </bean>  
    
    <!-- 集群  -->
        <bean class="com.util.redis.JedisClusterClient">
           <property name="jedisCluster" ref="jedisClusterId"></property>
        </bean>
   
    <!-- 访问redis集群,创建JedisCluster对象   -->
        <bean id="jedisClusterId" class="redis.clients.jedis.JedisCluster">
            <constructor-arg name="nodes">
               <set>
                  <bean class="redis.clients.jedis.HostAndPort">
                      <constructor-arg name="host" value="10.0.129.80"></constructor-arg>
                      <constructor-arg name="port" value="6379"></constructor-arg>
                  </bean>
                  ...
                  ...
                  ...
               </set>
            </constructor-arg>
        </bean>
3.redis单机版和集群版公共实现的接口
    public interface JedisClient {
        String set(String key,String value);
        String get(String key);
        Long del(String key);
        Boolean exists(String key);
        
        Long hset(String key,String field,String value);
        String hget(String key,String field);
        Long hdel(String key,String... field);
        Boolean hexists(String key,String field);
        List<String> hvals(String key);
        
        Long expire(String key,int seconds);
        Long ttl(String key);
        Long incr(String key);
    }
4.分别实现单机版实现类和集群版实现类
    集群版
    public class JedisClusterClient implements JedisClient {
        private JedisCluster jedisCluster;
        ...
        ...
    }
    单机版
    public class JedisPoolClient  implements JedisClient{
        private JedisPool jedisPool;    
    }

4.从redis中取数据
    @Autowired //单机版和集群版公共实现的接口(自己写)
    JedisClient jedisClient
    //在redis中取数据
    String json = jedisClient.get(ITEM_REDIS_KEY+":"+itemId+":BASE");
    if (StringUtils.isNotBlank(json)) {
        TbItem item=JsonUtils.jsonToPojo(json, TbItem.class);
        return item;
    }    
    //向redis中存数据
      TbItem item = mapper.selectByPrimaryKey(itemId);
    if (item!=null) {
        jedisClient.set(ITEM_REDIS_KEY+":"+itemId+":BASE",JsonUtils.objectToJson(item));
        jedisClient.expire(ITEM_REDIS_KEY+":"+itemId+":BASE", ITEM_REDIS_EXPIRE);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值