zoukankan      html  css  js  c++  java
  • Java开发之Redis

    简介

    Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key - value 数据库

    Redis 与 其他 key - value 缓存产品均有以下特点:

    • Redis 支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

    • Redis 不仅仅支持简单的 key - value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储

    • Redis 支持数据的备份,即 master - slave 模式的数据备份

    优点

    • 性能极高 – Redis 读的速度是 110000 次 /s, 写的速度是 81000 次 /s 。

    • 丰富的数据类型 - Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

    • 原子性 - Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。

    • 其他特性 - Redis 还支持 publish/subscribe 通知,key 过期等特性。

    数据类型、数据结构

    Redis 支持 5 种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)

        支持 8 种数据结构:int、 raw、 embstr、 ziplist、 linkedlist、 hashtable 、intset、 skiplist

    存储类型和数据结构的关系

      Redis中的Key与Value在表层都是一个redisObject实例(5种存储类型与8种数据结构的桥梁), 所以该结构有所谓的"类型", 即是ValueType. 对于每一种ValueType类型的redisObject;

      redisObject至少支持两种不同的底层数据结构来实现. 以应对在不同的应用场景中, 如Redis的运行效率, 或内存占用等。

      redisObject 主要的字段有encoding(数据结构) type(存储类型) *ptr(指向底层实现的数据结构指针) refcount(引用计数) lru(最后一次被命令程序访问的时间)

      ps: 详见Redis数据结构底层实现

    使用场景

    RedisTemplate

    Redis的基础信息及5种数据结构的概念大致介绍到这,下面将结合Spring封装的RedisTemplate来对这5种数据结构进行讲解

    5种数据结构操作

    redisTemplate.opsForValue();//操作字符串
    redisTemplate.opsForHash();//操作hash
    redisTemplate.opsForList();//操作list
    redisTemplate.opsForSet();//操作set
    redisTemplate.opsForZSet();//操作有序set

    对于这5种数据结构的具体操作可以通过查看源码知晓(源码解释很详细了),当然也可以参考《如何使用RedisTemplate访问Redis数据结构》

    序列化策略

    在这里我需要解释,也是开发中经常遇到的问题--序列化策略问题

      spring-data-redis中redisTemplate默认使用JDK的序列化策略,会出现两个问题:

    • 使用redis-cli查看数据时,携带很多字符,不易查看
    • JDK Serializer太费资源

      当然序列化策略是可以自定义的,spring-data-redis的序列化类有下面这几个:

    • GenericToStringSerializer: 可以将任何对象泛化为字符串并序列化
    • Jackson2JsonRedisSerializer: 跟JacksonJsonRedisSerializer实际上是一样的
    • JacksonJsonRedisSerializer: 序列化object对象为json字符串
    • JdkSerializationRedisSerializer: 序列化java对象(被序列化的对象必须实现Serializable接口)
    • StringRedisSerializer: 简单的字符串序列化
    • GenericToStringSerializer:类似StringRedisSerializer的字符串序列化
    • GenericJackson2JsonRedisSerializer:类似Jackson2JsonRedisSerializer,但使用时构造函数不用特定的类参考以上序列化,自定义序列化类;  推荐使用

      顺便介绍一下 StringRedisTemplate吧,这货是RedisTemplate的子类,默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

      

     

  • 相关阅读:
    LeetCode:Multiply Strings
    c/c++ 输入输出缓冲区
    Scala access modifiers and qualifiers in detail
    PUT vs POST in REST
    Redis优化总结
    硬中断和软中断(转)
    Redis监控技巧(转)
    Understanding mysql max_connect_errors
    TCP : two different sockets sharing a port?
    libevent 安装异常
  • 原文地址:https://www.cnblogs.com/JackpotHan/p/12175137.html
Copyright © 2011-2022 走看看