数据缓存技术 SpringDataRedis

数据缓存技术 SpringDataRedis

项目思考

  • 由于高并发 数据访问量过大对于数据库服务器造成访问压力过大,防止服务端崩溃。因此产生的两种优化方式,
    • 第一种 : 数据缓存技术,用到的技术点就是-springDataRedis
    • 第二种 : 网页静态化技术, Freemarker

两种缓存技术区别

  • springDataRedis 针对数据量小,但是变化比较多的情况,因为基于是内存,所以存储空间有限。例如电商项目中秒杀单品,轮播图,或者p2p项目的招标 投标的内容。。
  • freemarker 技术是本地数据保存,针对的数据量大,但是不经常的变化的场景。例如新闻详情页,商品详情页..

redis同memecache 区别?

  1. 关注数据持久化和主从复制时,redis使用率更高。
  2. key-value这样简单的数据储存,memcache的内存使用率更高;采用hash结构,redis的内存使用率会更高,redis支持的数据类型更加丰富
  3. memecache 把数据全部存在内存之中,redis实现了部分持久化,memecache一断电就数据就会全部丢失
1. redis
  • 以key-value形式存在的数据库技术,运行于内存中,相似的技术还有memcache、memcached 、MongoDB
2. Jedis
  • 官方推荐的面向redis的客户端框架,内部提供了大量的API可以供其调用
3. springDataRedis介绍
  • 通过在spring中进行部分配置,就可以访问redis服务,并且springDataRedis内部对于包(Jedis, JRedis,andRJC)底层开发工具进行封装,通过RedisTemplate 实现对于redis数据库CRUD 。 并且将同一类型操作封装为 operation 接口
    • ValueOperations:简单 K-V 操作
    • SetOperations:set 类型数据操作
    • ZSetOperations:zset 类型数据操作
    • HashOperations:针对 map 类型的数据操作
    • ListOperations:针对 list 类型的数据操作

springdataredis 实现原理,底层封装介绍

springdataredis 入门Demo

  • 1 添加依赖
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.2.RELEASE</version>
</dependency>
  • 2 配置properties文件
# Redis settings 
# server IP 
redis.host=127.0.0.1 
# server port 
redis.port=6379 
# server pass 
redis.pass= 
# use dbIndex 
redis.database=0 
# 最大空闲数
redis.maxIdle=300 
#连接时的最大等待毫秒数 
redis.maxWait=3000 
#在提取一个 jedis 实例时,是否提前进行验证操作;如果为 true,则得到的 jedis 实例均是可用的;
redis.testOnBorrow=true 

* 3 在springmvc配置,JedisPoolConfig,JedisConnectionFactory,RedisTemplate

<context:property-placeholder location="classpath*:properties/*.properties" />

<!-- redis 相关配置 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="maxWaitMillis" value="${redis.maxWait}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>

<bean id="JedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"

p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolConfig"/>

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">

    <property name="connectionFactory" ref="JedisConnectionFactory" />

</bean>  
  • Hash 类型操作

    package com.ruirui;
    
    import java.util.List;
    import java.util.Set;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.BoundHashOperations;
    import org.springframework.data.redis.core.BoundValueOperations;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations="classpath:spring/applicationContext-redis.xml")
    public class Demo {
    
    @Autowired
    private RedisTemplate redisTemplate;
    
    @Test
    public void setValue(){
    
        redisTemplate.boundHashOps("namehash").put("a", "1");
        redisTemplate.boundHashOps("namehash").put("b", "1");
        redisTemplate.boundHashOps("namehash").put("c", "1");
        redisTemplate.boundHashOps("namehash").put("d", "1");
    }  
    
    @Test
    public void testGetKeys(){
        Set s = redisTemplate.boundHashOps("namehash").keys();
        System.out.println(s);
    } 
    
    @Test
    public void testGetValues(){
        List values = redisTemplate.boundHashOps("namehash").values();
        System.out.println(values);
    }
    
    @Test
    public void testGetValueByKey(){
        Object object = redisTemplate.boundHashOps("namehash").get("b"); 
        System.out.println(object);
    } 
    @Test
    public void testRemoveValueByKey(){
    
        redisTemplate.boundHashOps("namehash").delete("c");
    
    }}
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值