redis 后台缓存技术,整合进入spring

时间:2022-09-26 17:24:12

前面技术汇总

redis 后台缓存技术,整合进入spring

NoSQL技术

  1. 内存数据库 Redis(NoSQL、非关系型数据库)

    读写快、适合做缓存

  2. 文档数据库 MongoDB(NoSQL、非关系型数据库)

    扩展性好、适合集群扩展、存储大量非核心数据

  3. Oracle、MySQL、DB2(SQL、关系型数据库)

    安全性、完整性好、存储核心业务数据

  4. 关系型和非关系型区别?

    关系型是以表结构作为存储,表之间采用主外键约束表示。 非关系型是以Key-Value键值对结构存储

Redis命令


Redis中Value值类型有:字符串、哈希、列表、集合、有序集合
  1. 字符串操作(重点)

    • 存入

      set key value

    • 取值

      get key

    • 获取值长度

      strlen key

    • 递增或递减

      incr keyincrby key ndecr keydecrby key n

    • 追加,字符串拼接

      append key value

  2. key操作(重点)

    • 查看所有key

      keys *

    • 删除key

      del key

    • 修改key名

      rename key newkey

    • 指定过期时间

      expire key 秒

  3. 哈希操作(HashMap)

    value结构: 字段名1 值1、字段名2 值2

    • 存入值

      hset key 字段名1 值1 hmset key字段名1 值1、字段名2 值2

    • 取值

      hget key 字段名 hmget key 字段名1 字段名2

    • 字段个数

      hlen key

    • 查看所有字段名

      hkeys key

    • 删除某个字段

      hdel key 字段名

  4. 列表操作(List)(重点)

    • 存入值

      lpush key value //放头部 rpush key value //放尾部

    • 取值

      lrange key 0 -1 //取所有lindex key index //按索引取某一个

    • 更新

      lset key index newvalue

    • 删除

      lrem key count value //删除count个等于value的元素 lpop key //删除第一个元素 rpop key //删除最后一个元素

    • 获取长度

      llen key

  5. 集合操作(Set)

    • 存入值

      sadd key value value

    • 取值

      smembers key

    • 删除元素

      srem key value

    • 获取长度

      scard key

    • 获取随机元素

      srandmember key count

    • 运算

      交:sinter key1 key2 并:sunion key1 key2 差:sdiff key1 key2

      
      A = {1 3 5 7}  
      
      B = {3 5 8 2}  
      
      交集:A和B都有的元素 {3 5}  
      并集:A加B元素 {1 2 3 5 7 8}  
      差集:A差B {1 7}  B差A {2 8}  
  6. 有序集合

    • 存入值

      zadd key score value score value

    • 取值

      zrange key 0 -1 //取所有值,由小到大zrevrange key 0 -1 //取所有值,由大到小

    • 统计

      zcount key min max//统计分数在min和max之间的元素数量 zcard key //获取元素总数

    • 删除

      zrem key value

    • 获取排名

      zrank key value //由小到大,获取元素排名索引值 zrevrank key value //由大到小,获取元素排名索引值

Java对Redis操作

  1. 引入jedis.jar工具包

  2. 建立连接

    Jedis jedis = new Jedis();//默认连接本机Jedis jedis = new Jedis(host,port);//连接其他机器

  3. 数据操作

    jedis.get/jedis.set等方法做字符串、哈希、列表、集合、有序集合操作

    
    Jedis jedis = new Jedis();//连接本机Redis
    //获取字符串信息
    String v1 = jedis.get("java10");// get java10
    System.out.println("java10存储的值为"+v1);
    //获取List列表信息lrange list1 0 -1
    List<String> list = jedis.lrange("list1", 0, -1);
    for(String s:list){
     System.out.println(s);
    }
    jedis.close();

Redis缓存应用

redis 后台缓存技术,整合进入spring

Spring+Redis集合


Spring框架和Redis结合,需要使用Spring-DATA框架功能。
  1. 准备工作

    引入spring-data-redis.jar

  2. 在Spring中配置下面组件

    • JedisPoolConfig

      <bean id="redisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">

      
       <property name="maxTotal" value="100"></property>
       <property name="minIdle" value="5"></property>
      </bean>
    • JedisConnectionFactory

      <bean id="redisConnectionFactory"

      
      class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
       <property name="hostName" value="localhost"></property>
       <property name="port" value="6379"></property>
       <property name="poolConfig" ref="redisPoolConfig"></property>
      </bean>
    • RedisTemplate

      <bean id="template"

      
       class="org.springframework.data.redis.core.RedisTemplate">
       <property name="connectionFactory" ref="redisConnectionFactory"></property>
      </bean>
  1. 编写RedisDao

    可以将RedisTemplate注入进来,使用Template做写入和取值操作。

    @Repository("redisDao")//扫描Dao
    public class RedisDaoImpl implements RedisDao{
    
     @Resource//注入Template
     private RedisTemplate template;
     
     @Override
     public Object getObject(String key) {
      //利用template对象操作
     }
    
    }

Redis持久化

Redis支持RDB和AOF两种持久化机制。

  • RDB 快照机制

    RDB持久化频率比较低,丢失数据量会较大。快照机制如下:

    
    save 900 1  //900秒修改1次
    save 300 10 //300秒修改10次
    save 60 10000 //60秒修改10000次

    按频率调用save命令,生成dump.rdb.

  • AOF 日志机制

    利用appendonly.aof日志文件,将操作命令记录下来。