从头学习Spring之二(数据操作之NoSQL)

对于详细内容没有深入了解,此处是学习 Spring ,只对此进行简单描述(主要是我没了解和学习过),后续还会学习

一、 Docker 辅助开发

  1.容器:应用层的抽象,是一个标准化的单元。

  2. Docker :容器的管理引擎

  3. Docker 的一些常用命令:

    1)镜像相关 docker pull <image> // 下载镜像 docker search <image> // 查找镜像 

    2)容器相关: 

1 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] // 将一个镜像运行起来,变成一个容器 -d,后台运行容器;-e,设置环境变量;--expose/-p 宿主端口:容器端口 --name,指定容器名称; --link,链接不同容器;-v,租住目录:容器目录,挂在磁盘卷 
2 docker start/stop <容器名> 
3 docker ps <容器名> 
4 docker logs <容器名>

二、 Spring 对 MongoDB 文档型数据库的支持

   Spring Data MongoDB :

    1.支持:

       MongoTemplate : save / remove 、 Criteria / Query / Update 

       Repository :使用 @EnableMongoRepositories 注解开启 Repository 支持

        对应接口: MongoRepository<T, ID>、PagingAndSortingRepository<T, ID>、CrudRepository<T, ID> 

    2.注解:

       @Document :用来标识此类对应哪一个文档

       @Id :标明类中哪个成员是 id 

    3. MongoDB 创建库和用户:

      创建库: use test // 创建test库 、

      创建用户:

 1 // 创建名为test的用户,密码为pwd,对test库有读写权限
 2 db.createUser(
 3     {
 4         user:"test",
 5         pwd:"pwd",
 6         roles:[
 7             { role:"readWrite", db: "test" }
 8         ]
 9     }
10 )

 三、 Spring 对 Redis 的支持

  1. Redis :开源、 K-V 存储、支持多种数据结构

  2. Spring对 Redis 的支持

     Spring Data Redis :

      支持客户端 Jedis / Lettuce 

       RedisTemplate 

       Repository 支持

  3. Jedis 客户端简单使用

    注意: Jedis 不是线程安全的;通过 JedisPool 获得 Jedis 实例;直接使用 Jedis 中的方法

    1)依赖: Jedis 

    2)配置:

spring:
    redis:
    host: localhost
    port: 6379
    password: 密码
    client-name: 名称
    # jedis配置
    jedis:
      pool:
        max-active: 7
        min-idle: 2
        max-wait: 1000ms

  3. Redis 的哨兵模式和集群模式

    1)哨兵模式:是一种 Redis 的高可用方案

      监控、通知、自动故障转移、服务发现

       Jedis 通过 JedisSentinePool 实现

    2)集群模式:数据自动分片(分成16384个 Hash Slot );在部分节点失效时有一定可用性

       Jedis 通过 JedisCluster 实现: Jedis 只从 Master 读数据,如果想要自动读写分离,可以定制

      注意:集群模式下无法对 KEY 进行批量操作

  4. Spring 的缓存抽象

    为不同的缓存提供一层抽象

      为 Java 方法增加缓存,缓存执行结果;支持 ConcurrentMap、EhCache、Caffeine、JCache(JSR-107) 

      接口: org.springframeword.cache.Cache 和 org.springframeword.cache.CacheManager 

    常用注解:   

@EnableCaching    // 开启缓存支持
@Cacheable          // 执行一个缓存方法,结果在缓存里则直接去缓存中取,否则将结果加入缓存
@CacheEvict        // 缓存清理
@CachePut          // 不管方法执行结果,直接去设置缓存
@Caching            // 对缓存清理、缓存设置打包
@CacheConfig     // 对缓存进行设置,如缓存的名字

  5.使用 Redis 作为缓存

    依赖: spring-boot-starter-cache 和 spring-boot-starter-data-redis 

    配置:

spring.cache.type=redis
spring.cache.cache-name=缓存名
spring.cache.redis.time-to-live=缓存的ttl时间(如 5000 为 5 秒)
spring.cache.redis.cache-null-value=true/false

  6. Redis 的其他用法

    配置连接工厂: LettuceConnectionFactory 与 JedisConnectionFactory 

RedisStandaloneConfiguration // 单节点
RedisSentinelConfiguration  // 哨兵
RedisClusterConfiguration  // 集群

    读写分离:

       Lettuce 内置支持读写分离:

        只读主,只读从;优先读主,优先读从

      配置

LettuceClientConfiguration    
LettucePoolingClientConfiguration    
LettuceClientConfigurationBuilderCustomizer    

     RedisTemplate :

RedisTemplate<K, V>
    opsForXxx()  // 如 opsForHash()
StringRedisTemplate

    注意:一定要设置过期时间

     Redis Repository :

      实体注解:

         @RedisHash // 定义对应的实体类 @Id // ID @Indexed // 二级索引 

      区分不同类型数据源的 Repository 

        根据实体的注解;根据继承的接口类型;根据扫描不同的包

 

posted @ 2021-03-08 16:02  xiao_lin  阅读(68)  评论(0编辑  收藏  举报