四、Spring 框架中接入单机Redis的两种方式

2021-03-28 03:25

阅读:587

标签:内存管理   add   相关   就是   core   lru   version   tab   exe   

1、Redis的简单介绍
1)Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
2)Redis的内存管理机制:
在Redis中,并不是所有的数据都一直存储在内存中的。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。
3)Redis性能和集群管理:
Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。Redis更偏向于在服务器端构建分布式存储。
4)Redis 同其他 key - value 缓存数据库比较具有以下
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
5)Redis优势
.性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
.丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
.原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
.丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
.Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
2、spring框架中接入redis的两种方式:
步骤1:引入相关依赖
技术图片技术图片
        
        dependency>
            groupId>redis.clientsgroupId>
            artifactId>jedisartifactId>
            version>2.7.1version>
        dependency>
        dependency>
            groupId>commons-poolgroupId>
            artifactId>commons-poolartifactId>
            version>1.5.6version>
        dependency>

        dependency>
            groupId>org.springframework.datagroupId>
            artifactId>spring-data-redisartifactId>
            version>1.6.2.RELEASEversion>
        dependency>

        
        dependency>
            groupId>com.fasterxml.jackson.coregroupId>
            artifactId>jackson-coreartifactId>
            version>2.5.1version>
        dependency>
        dependency>
            groupId>com.fasterxml.jackson.coregroupId>
            artifactId>jackson-databindartifactId>
            version>2.5.1version>
        dependency>
        dependency>
            groupId>com.fasterxml.jackson.coregroupId>
            artifactId>jackson-annotationsartifactId>
            version>2.5.1version>
        dependency>
View Code
步骤2:Redis相关属性文件:redis.properties
技术图片技术图片
#访问地址
redis.host=127.0.0.1
#访问端口
redis.port=6379
#注意,如果没有password,此处不设置值,但这一项要保留
redis.password=@redisLearn

#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
redis.maxIdle=300
#连接池的最大数据库连接数。设为0表示无限制
redis.maxActive=600

#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWait=1000

#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

#客户端连接超时时间
redis.timeout=30000

#可用数据库数
redis.database = 0
View Code

 步骤3:Spring中引入Redis配置、及调用实例

  方式1:通过spring-data-redis工具实现对Redis的操作 spring-redis.xml

技术图片技术图片
xml version="1.0" encoding="UTF-8"?>
beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
">

    
    context:property-placeholder location="classpath:conf/redis.properties" ignore-unresolvable="true" />

    
    bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        property name="maxTotal" value="${redis.maxActive}" />
        property name="maxIdle" value="${redis.maxIdle}" />
        property name="testOnBorrow" value="${redis.testOnBorrow}" />
    bean>

    
    bean id="jedisConnectionFactory"
          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        property name="hostName" value="${redis.host}">property>
        property name="port" value="${redis.port}">property>
        
        property name="poolConfig" ref="poolConfig">property>
    bean>

    
    bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
        property name="connectionFactory" ref="jedisConnectionFactory" />
        
        property name="keySerializer" >
            bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        property>
        property name="valueSerializer" >
            bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
        property>
        property name="hashKeySerializer">
            bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        property>
        property name="hashValueSerializer">
            bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>
        property>
        
        property name="enableTransactionSupport" value="true">property>
    bean >

beans>
View Code

     方式2:通过jedis客户端工具实现对Redis的操作   spring-jedis.xml

 

技术图片技术图片
xml version="1.0" encoding="UTF-8"?>
beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
">

    
    context:property-placeholder location="classpath:conf/redis.properties" ignore-unresolvable="true" />

    
    bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        property name="maxTotal" value="${redis.maxActive}" />
        property name="maxIdle" value="${redis.maxIdle}" />
        property name="testOnBorrow" value="${redis.testOnBorrow}" />
    bean>

    bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        constructor-arg name="poolConfig" ref="poolConfig" />
        constructor-arg name="host" value="${redis.host}" />
        constructor-arg name="port" value="${redis.port}" type="int" />
        constructor-arg name="timeout" value="${redis.timeout}" type="int" />
        constructor-arg name="password" value="${redis.password}" />
        constructor-arg name="database" value="${redis.database}" type="int" />
    bean>

beans>
View Code

 

四、Spring 框架中接入单机Redis的两种方式

标签:内存管理   add   相关   就是   core   lru   version   tab   exe   

原文地址:https://www.cnblogs.com/jiarui-zjb/p/13645858.html


评论


亲,登录后才可以留言!