1):简单介绍

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>   
      <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 hmset 覆盖key下的所有值吗_持久化

 

   注入redis数据源:  

   

redis hmset 覆盖key下的所有值吗_缓存_02

  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,性能最好,持久化没保证