redis 与 spring整合 hash 增删改操做 list增删改操做

本人,对于之前redis的学习是很是痛苦的!近期将之前的东西捡起来。以博客的形式存储,以便于之后快速捡起来,并和广大同胞一块儿分享!redis

1):简单介绍spring

redis 是基于C语言开发。数据库

redis是一个key-value存储系统。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。缓存

redis 是一个 缓存数据库(片面的理解) 既能够作缓存,也能够将数据持久化到磁盘中!服务器

 

本人有经过redis的hash数据类型来作过购物车数据结构

spring配置文件 spring-redis.xml并发

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
          <property name="maxIdle" value="6"></property>
          <property name="minEvictableIdleTimeMillis" value="300000"></property>
          <property name="numTestsPerEvictionRun" value="3"></property>
          <property name="timeBetweenEvictionRunsMillis" value="60000"></property>
     </bean> app


 
     <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
          <property name="poolConfig" ref="jedisPoolConfig"></property>
          <property name="hostName" value="***.***.**.**"></property> 《更改ip》
          <property name="port" value="6379"></property> 《更改 端口号》
          <property name="timeout" value="15000"></property>
          <property name="usePool" value="true"></property>
     </bean>
     <bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
          <property name="connectionFactory" ref="jedisConnectionFactory"></property>
          <property name="keySerializer">
                   <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
          </property>
          <property name="valueSerializer">
                   <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
          </property>
     </bean> 性能

 

hash数据结构图学习

 

简单介绍一下:

 

   注入redis数据源:  
   

  hash的操做方法

(1):得到hash数据类型的模板

   //得到redis缓存HASH数据类型(散列)
        HashOperations opsForHash = redisTemplate.opsForHash();

(2):经过 会员id 和 商品 id 获得商品信息

    //判断该用户(的商品)在缓存中有没有该数据     hkey需为string类型
        Order cacheOrder = (Order) opsForHash.get(order.getMemberId() + "", order.getGoodsId());

(3):存入信息 ,

  //根据会员ID 以及  商品 ID 将数据存入缓存中 【opsForHash.put(key, hashKey, value);】value为object类型
      opsForHash.put(order.getMemberId() + "", order.getGoodsId(), goodsOrder);

(4):修改商品库存(修改的原则是先对 value 数值进行修改  在将修改后的数值存入缓存中  会覆盖原来的缓存信息 )

  //判断该用户(的商品)在缓存中有没有该数据       【先修改数值】
      Order cacheOrder = (Order) opsForHash.get(order.getMemberId() + "", order.getGoodsId());

  //更新修改后的缓存数据
      opsForHash.put(order.getMemberId() + "", order.getGoodsId(), cacheOrder);

(5):删除缓存数据  【不过通常不会直接删除,只会作逻辑删除】

  opsForHash.delete(key, hashKeys);

 

简单演示一下list的几种方法:

(1):得到list数类型

  //得到redis缓存list数据类型
        ListOperations opsForList = redisTemplate.opsForList();

(2):根据键名得到长度

  Long size = opsForList.size(order.getMemberId() + "");

(3):添加信息

   //将购物信息添加到缓存中 rightPush 依次有右边添加  leftPush依次由左边添加
         opsForList.rightPush(order.getMemberId() +"" ,cacheOrder);

(4):得到list集合 【 0 ,-1 表明全部值】

    //得到全部当前能够的全部信息
          List<Order> range = opsForList.range(order.getMemberId() +"”, 0, -1);

 

  llist数据类型适合于消息队列的场景:好比12306并发量过高,而同一时间段内只能处理指定数量的订单!必须知足先进先出的原则,其他订单处于等待 

 

 

  redis事务  :原子性,即 要不所有成功 要不所有失败

  redis持久化 :rdb           aof

  RDB方式:

  RDB持久化默认生成的文件名为dump.rdb

  Redis.conf中能够配置,默认配置以下:【默认是开启RDB方式的】

  save 900 1
  save 300 10
  save 60 10000

  以上表示的意思是,【 知足任一条件 , 都会进行持久化 】

  900秒以内对服务进行了至少一次修改

  300秒以内服务器进行了至少10次修改

  60秒以内对服务器进行了至少10000次修改。

  AOF方式:

  appendonly yes              #启用aof持久化方式
  # appendfsync always     #每次收到写命令就当即强制写入磁盘,最慢的,可是保证彻底的持久化,不推荐使用
 
appendfsync everysec     #每秒钟强制写入磁盘一次,在性能和持久化方面作了很好的折中,推荐
  # appendfsync no          #彻底依赖os,性能最好,持久化没保证
 

 

  本人在写博客的时候也借鉴了一些博友的资源!

相关文章
相关标签/搜索