赞
踩
Redis是典型的NoSQL数据库,是一个基于内存的key-value结构数据库
优势:
官网:https://redis.io
中文网:https://www.redis.net.cn/
NoSQL( NoSQL = Not Only SQL ),意即不仅仅是 SQL,泛指⾮关系型的数据库 解释:** ** 非关系型数据库(NoSQL)是⼀类⽤于存储和管理⾮结构化数据的数据库系统。与传统的关系型数据库不同,非关系型数据库通常使⽤不同的数据模型和查询语⾔来存储和管理数据,如键值存储、⽂档存储、列族存储、图形存储等。
NoSQL不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增强了数据库的扩展能力。
特点:
常见的NoSQL数据库:
Redis安装包分为Windows版和Linux版:
Redis的Windows版属于绿色软件,直接解压即可使用。解压后目录结构如下:
服务启动命令:redis-server.exe redis.windows.conf
Redis服务默认端口号为6379,通过快捷键 Ctrl+C 即可停止Redis服务
客户端连接命令:redis-cli.exe
通过redis-cli.exe命令默认连接的是本地的Redis服务,并且使用默认6379端口。也可以通过使用如下参数连接:
**-h ip地址 -p 端口号 ** -a 密码
设置Redis服务密码,修改redis.windows.conf
requirepass 123456
注:设置完密码需要重启redis服务才能生效
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常见的数据类型
特点:最常用最简单,但是修改数据需要进行完整覆盖
数据结构: 内部结构实现上类似于** Java 的 ArrayList**,采⽤预分配冗余空间的⽅式来减少内存的频繁分配
Redis hash是一个string 类型的field 和value的映射表,hash特别适合用于存储对象
特点:修改数据非常灵活,可以做到只修改一个里面键值对的值
类似于Java中的HashMap
Redis 列表是简单的字符串列表,按照插入顺序排序
类似java中的linkedList,链表结构,有序可重复,插入的顺序就是排序的顺序
应用场景:队列(先进先出)、栈(先进后出),过去时间的排行榜
Redis set 是string类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据
类似于Java中的HashSet,无序,不可重复
应用场景:去重,合并,取交集
Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数(权重)。
类似于Java中的LinkedHashSet,有序,不可重复
应用场景:实时排行榜,因为分数变了,排序就会变
Redis的通用命令是不分数据类型的,都可以使用的命令
介绍:通过编写java代码操作redis服务器
原生客户端:Jedis、Redisson、Lettuce
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
public class JedisDemo {
public static void main(String[] args) {
Jedis jedis = new Jedis("10.211.55.3", 6379);
String pong = jedis.ping();
System.out.println("连接成功:" + pong);
jedis.close();
}
}
key 和操作redis数据库的命令基本一致
jedis.set("k1", "v1");
jedis.set("k2", "v2");
jedis.set("k3", "v3");
Set<String> keys = jedis.keys("*");
System.out.println(keys.size());
for (String key : keys) {
System.out.println(key);
}
System.out.println(jedis.exists("k1"));
System.out.println(jedis.ttl("k1"));
System.out.println(jedis.get("k1"))
对原生客户端进行封装提供简化开发操作redis服务器,默认底层封装lettuce
spring框架利用模板设计模式,提供RedisTemplate模板类默认封装lettuce操作redis
模板设计模式,提供了公共的方法操作目标数据,底层可以更换原生客户端技术
spring编程式事务提供了TransactionTemplate,操作关系型数据库JDBCTemplate
看使用方式
注:第三步创建RedisTemplate对象加入Spring容器的方法名必须为redisTemplate
原因:springDataRedis提供自动配置类,里面已经将一个RedisTemplate加入了spring容器,它的默认名也是redisTemplate,并且使用了@ConditionalOnMissingBean由于我们自己的项目也创建了这个对象,优先级高,所以我们先创建加入spring容器,这样后面容器自动配置就会检测到不会再创建RedisTemplate对象
RedisTemplate针对大量api进行了归类封装,将同一数据类型的操作封装为对应的Operation接口,具体分类如下:
管理端
@RestController @Slf4j @Api(tags = "管理端店铺相关类接口") @RequestMapping("/admin/shop") public class ShopController { @Resource private RedisTemplate redisTemplate; /** * 设置营业状态接口 * @param status * @return */ @ApiOperation("设置营业状态接口") @PutMapping("/{status}") public Result setStatus(@PathVariable Integer status){ log.info("设置营业状态接口:{}",status); redisTemplate.opsForValue().set("SHOP_STATUS",status); return Result.success(); } /** * 管理端查询营业状态接口 * @return */ @ApiOperation("管理端查询营业状态接口") @GetMapping("/status") public Result<Integer> getStatus(){ log.info("管理端查询营业状态接口"); Integer status = (Integer) redisTemplate.opsForValue().get("SHOP_STATUS"); if (status == null){ status = 0; } return Result.success(status); } }
用户端
@RestController("userShopController") @RequestMapping("/user/shop") @Slf4j @Api(tags = "用户端店铺相关类接口") public class ShopController { @Resource private RedisTemplate redisTemplate; /** * 用户端查询营业状态接口 * @return */ @ApiOperation("用户端查询营业状态接口") @GetMapping("/status") public Result<Integer> getStatus(){ log.info("用户端查询营业状态接口"); Integer status = (Integer) redisTemplate.opsForValue().get("SHOP_STATUS"); if (status == null){ status = 0; } return Result.success(status); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。