从头学习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
根据实体的注解;根据继承的接口类型;根据扫描不同的包