Spring整合Redis

摘要:
Redis。maxIdle=300#最小空闲数,数据库连接的最小空闲时间。Redis。minIdle=10#连接池中的最大数据库连接数。设置为0表示无限制redis。maxActive=600#最大连接建立等待时间。再贴现。MaxWait=5000#借用获取jedis实例时是否提前执行validate操作;如果为真,则获得的jedis实例可用;Redis。testOnBorrow=true3.在spring配置文件中,配置redis:applicationContext编辑Xml:① 如果添加了哨兵机制,您需要对其进行配置,或者您可以启用多个来配置多个,但是,您不能配置--名称的含义或argname=“port”value=”10002“/˃˂constructor argname=“port”value=”10003“jedisConnectionFactory.setPoolConfig();。。。。sethostName…˂!

Oracle:  存储数据,   使用SQL操作数据库

  Java 程序作为客户端, 发送sql, 操作数据库:  jdbc

Redis: key/value 内存式数据库,  存储数据,   redis: 存储热点数据

  Java程序作为客户端,  jedis

使用Spring-data-redis+jedis操作redis

  与Spring整合, spring-data-redis, 底层使用的jedis  注意:测试前必须得先开启redis服务器,如果配置主从复制需要全部开启,配置哨兵也需要全部开启 ****

1、导入依赖

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.1</version>
</dependency>

2、添加redis的配置文件:redis.properties

#访问地址
redis.host=127.0.0.1
#访问端口
redis.port=6379
#注意,如果没有password,此处不设置值,但这一项要保留
redis.password=
#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
redis.maxIdle=300
#最小空闲数,数据库连接的最小空闲时间。
redis.minIdle=10
#连接池的最大数据库连接数。设为0表示无限制
redis.maxActive=600
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWait=5000
#在borrow获取一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

3、在spring配置文件中,配置redis:

applicationContext-redis.xml:

  ①如果添加了哨兵机制则需要配置,或开启几台配几台,可以不配置

<!--redis哨兵 -->
<bean id="redisSentinelConfiguration"
    class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
    <property name="master">
        <bean
            class="org.springframework.data.redis.connection.RedisNode">
            <property name="name" value="mymaster" />   --name的意思
        </bean>
    </property>
    <!-- 哨兵 -->
    <property name="sentinels">
        <set>
            <bean
                class="org.springframework.data.redis.connection.RedisNode">
                <constructor-arg name="host" value="127.0.0.1" />
                <constructor-arg name="port" value="10001" />
            </bean>
            <bean
                class="org.springframework.data.redis.connection.RedisNode">
                <constructor-arg name="host" value="127.0.0.1" />
                <constructor-arg name="port" value="10002" />
            </bean>
            <bean
                class="org.springframework.data.redis.connection.RedisNode">
                <constructor-arg name="host" value="127.0.0.1" />
                <constructor-arg name="port" value="10003" />
            </bean>
        </set>
    </property>
</bean>

name就是哨兵的名字

Spring整合Redis第1张

 配置几台哨兵就添加几个bean,ip、端口需要一致

Spring整合Redis第2张

  ②jedis连接对象

底层:JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisSentinelConfiguration);

 ...jedisConnectionFactory.setPoolConfig(); ....sethostName...

<bean id="jedisConnectionFactory"
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="poolConfig" ref="jedisPoolConfig"></property>
        <property name="hostName" value="${redis.host}"></property>
        <property name="port" value="${redis.port}"></property>
        <property name="password" value="${redis.password}" />
        <!-- 哨兵 -->
        <constructor-arg name="sentinelConfig"
            ref="redisSentinelConfiguration" />
    </bean>

    <bean id="jedisPoolConfig"
        class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.maxActive}" /><!-- 最大连接数 -->
        <property name="maxIdle" value="${redis.maxIdle}" /><!-- 最大闲置 -->
        <property name="minIdle" value="${redis.minIdle}" /><!-- 最小闲置 -->
        <property name="maxWaitMillis" value="${redis.maxWait}" /><!-- 
            最大等待 -->
        <property name="testOnBorrow" value="${redis.testOnBorrow}" /><!-- 
            可以获取 -->
    </bean>

  ③RedisTemplate的bean

<bean id="redisTemplate"
    class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory"
        ref="jedisConnectionFactory" />

    <!-- 序列化方式 建议key/hashKey采用StringRedisSerializer -->
    <property name="keySerializer">
        <bean
            class="org.springframework.data.redis.serializer.StringRedisSerializer" />
    </property>
    <property name="valueSerializer">
        <bean
            class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
    </property>
    <property name="hashKeySerializer">
        <bean
            class="org.springframework.data.redis.serializer.StringRedisSerializer" />
    </property>
    <property name="hashValueSerializer">
        <bean
            class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
    </property>
    <!-- 开启REIDS事务支持 -->
    <property name="enableTransactionSupport" value="false" />
</bean>

<!-- 对string操作的封装 -->
<!-- <bean   class="org.springframework.data.redis.core.StringRedisTemplate"> 
        <constructor-arg ref="jedisConnectionFactory" /> 
        开启REIDS事务支持
        <property name="enableTransactionSupport" value="false" /> 
    </bean> -->

  配置RedisTemplate这个bean,类似Mybatis的SqlSession, 使用RedisTemplate操作redis, 封装好了操作redis的方法 ,  他有一个子类, StringRedisTemplate,开发中, 使用RedisTemplate

注意:一般只使用RedisTemplate,实体类习惯性实现序列化接口

public class House implements Serializable{
    private static final long serialVersionUID = -4392862698633582732L;

使用RedisTemplate来操作Redis

RedisTemplate / StringRedisTemplate中定义了对redis的5种数据结构的操作:

  •   opsForValue()  操作字符串
  •   opsForHash()  操作hash
  •   opsForList()   操作list
  •   opsForSet()  操作set
  •   opsForZSet() 操作ZSet

1、两者数据各自存,各自取,数据不互通。

RedisTemplate不能取StringRedisTemplate存入的数据。

StringRedisTemplate不能取RedisTemplate存入的数据

2、序列化策略不同。

RedisTemplate采用JDK的序列化策略

StringRedisTemplate采用String的序列化策略

如果你需要缓存的是字符串,那么你就使用StringRedisTemplate即可。

但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,

那么使用RedisTemplate是更好的选择

测试方法(5种数据类型的简单使用):

1、opsForValue : String

// 存入数据
redisTemplate.opsForValue().set("aaa", "111", 100, TimeUnit.SECONDS);
redisTemplate.opsForValue().set("bbb", "2222");
// 获取数据
String k1 = (String) redisTemplate.opsForValue().get("bbb");
System.out.println(k1);

2、opsForHash() : hash

// 一对key/value添加
 redisTemplate.opsForHash().put("h1", "name", "张三");
 redisTemplate.opsForHash().put("h1", "age", "21");
 redisTemplate.opsForHash().put("h1", "sex", "男"); 
//批量添加
 Map map = new HashMap(); 
 map.put("name", "李四");
 map.put("age", "21");
 map.put("sex", "男"); 
 redisTemplate.opsForHash().putAll("h2", map);
//取值
System.out.println(redisTemplate.opsForHash().get("h1", "name"));
//redisTemplate.opsForHash().hasKey("h1", "age");
Map reMap = redisTemplate.opsForHash().entries("h2");
System.out.println(reMap);

3、rightPushAll :list

redisTemplate.opsForList().rightPushAll("l1", "1","2","3","4","5","1");

4、opsForSet : set

redisTemplate.opsForSet().add("s1", "1","2","3","1","4");

5、opsForZSet : ZSet

//存数据
 Set<TypedTuple<String>> set = new HashSet<>(); set.add(new
 DefaultTypedTuple("张三", 80.0)); set.add(new DefaultTypedTuple("李四", 85.0));
 set.add(new DefaultTypedTuple("王五", 68.0)); set.add(new
 DefaultTypedTuple("赵六", 90.0));
 redisTemplate.opsForZSet().add("zset", set);
 //取数据
 Set<String>  values = redisTemplate.opsForZSet().reverseRange("zset", 0, -1);
 System.out.println(values);

免责声明:文章转载自《Spring整合Redis》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ORACLE对象大小写问题[ html canvas 绘制文本 ] canvas绘图实现绘制文本 strokeText fillText方法及textAlign textBaseline font 属性实例演示下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

136-如何访问redis数据库

//当我们使用Redis的时候,并没有注入Mapper,反而时注入了一个redisTemPlate @Autowired private RedisTemplate<Object,Object> redisTemplate; @Override public Integer queryUserCount() {...

线上redis热key问题

一个安静的晚上突然被群里报警打断,然后果断不情愿的爬起来找问题,通过监控发现一个服务的QPS暴增,接口响应延迟也上来了,达到s级别了,所以赶紧找问题。 因为应用很依赖redis,第一时间先看是不是它,果然还真是它,看下图: 确定了问题的方向就该找具体原因了,进一步查看Zabbix发现其中一台redis的CPU使用率明显升高,如下图: 连到机器上top发...

11.Redis详解(十一)------ 过期删除策略和内存淘汰策略

在介绍这篇文章之前,我们先来看如下几个问题: ①、如何设置Redis键的过期时间? ②、设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗? ③、如何设置Redis的内存大小?当内存满了之后,Redis有哪些内存淘汰策略?我们又该如何选择? 如果上面的几个问题你都懂,那么下面的内容你就不用看了;如果你不是很懂,那...

bitmap原理和redis bitmap应用

bitmap原理 bitmap是什么?在计算机中一个字节(byte)=8位(bit),这里的bit就是位,数据的最小表示单位,map一般是表示地图或者映射。 简单回顾一下二进制的一些知识: 1byte=8bit 1个bit有二种状态:0或1 所以1个byte可以表示00000000->11111111,也就是十进制0-255 其中十进制和二进制的对应...

redis maxmemory设置

关于maxmemory的设置,如果redis的应用场景是作为db使用,那不要设置这个选项,因为db是不能容忍丢失数据的。 如果作为cache使用,则可以启用这个选项(其实既然有淘汰策略,那就是cache了。。。) 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key, #...

redis sentinel哨兵模式集群搭建教程

1.环境说明 我们将使用192.168.220.128、192.168.220.129两台机器搭建sentinel交叉主从为例 当前我们已在192.168.220.128上按redis安装教程安装了redis,192.168.220.129上没有安装 2. 配置128上的slave cd /usr/myapp/redis-2.8.17/conf #进入...