关系型数据库
常见的关系型数据库有:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL。
其优点有:
容易理解
使用方便
易于维护
支持 SQL,可用于复杂的查询。
其缺点有:
为了维护一致性所付出的巨大代价就是其读写性能比较差。
固定的表结构。
高并发读写需求。
海量数据的高效率读写。
非关系型数据库
常见的非关系型数据库有:NoSql、Cloudant、MongoDB、redis、HBase。
其优点有:
格式灵活
速度快
高扩展性。
成本低
其缺点有:
数据和数据之间没有关系,所以不能一目了然。
没有关系,没有强大的事务保证数据的完整和安全。 非关系型数据库的分类
Redis 简介 Redis 是一个基于内存的单线程高性能 key-value 型数据库。整个数据库统统加载在内存 当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操 作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value 数据库。 Redis 可以存储键和 5 种不同类型的值之间的映射。键的类型只能为字符串,值支持 5 种数据类型:string(字符串)、list(列表)、set(集合)、hash(哈希类型)、Sorted Set 有序集合。
Redis 的安装 在 Redis 官方是没有支持 Windows 系统的,但是微软自己做了一个支持 win64 位系统 的,所以我们可以在网络上下载 Windows 版本,下载地址: https://github.com/MicrosoftArchive/redis/releases。 进步网址后,不要选择 Pre-release(測试版)。选择 Latest Release(稳定版)下载 Redis 安装 包
将下载的压缩包解压到一个文件夹中,双击【redis-server.exe】,Redis服务就运行起来了
Redis 的多数据库
Redis 默认支持 16 个数据库,这些数据库的默认命名都是从 0 开始递增的数字。 当我们连接 Redis 服务时,默认操作的是 0 号数据库,可以通过 SELECT 命令更换数据 库
可以通过配置文件中的databases来修改默认数据库个数
对字符串(string)的操作 在 Redis 数据库中对字符串的增删改查操作 set name beixi //添加 get name //查看values keys //查看所有key set name beixi ex 10 //设置过期时间 get name set name jzj //更新name的值为jzj get name del name //删除 keys*
对 List 集合的操作 在 Redis 数据库中对 List 集合的增删改查操作 //头部插入key为 my_list,value 为'C++’'java' 'web'的list集合 127.0.0.1:6379> 1push my list 'C++''java' 'web' (integer) 3 127.0.0.1:6379> lrange my_list 0 -1 //查询集合 1)"web" 2)"java" 3)"C++" 127.0.0.1:6379> rpush my list "python " //尾部添加 (integer)4 127.0.0.1:6379>lpush my_list "ceshi' //头部添加 (integer) 5 127.o.o.1 :6379>lrange my list 0 -1 //查询集合 1) "ceshi" 2)"web" 3) "java" 4)"C++” 5)"python" 127.0.0.1:6379> lset my list 0'u主' //更新index 为0的值 OK 127.0.0.1:6379> lrange my list 0-1 1)"ui" 2) "web" 3)"java" 4)"C++" 5)"python" 127.0.0.1 :6379> lrem my list 0 'ui' //删除index为0的值 (integer) 1 127.0.o.1:6379> lrange my list 0 -1 1)"web" 2)"java" 3)"C++" 4)"python" 127.0.0.1:6379>
对 set 集合的操作 set 是无序的集合,其中的元素没有先后顺序。set 集合的操作如下所示: 127.0.0.1:6379> sadd my_set java c++ python //添加元素,会自动去重 (integer) 3 127.0.0.1:6379> smembers my_set //查询元素 1) "python" 2) "c++" 3) "java" 127.0.0.1:6379> srem my_set c++ //移除元素 (integer) 1 127.0.0.1 : 6379> scard my_set //查询集合中的元素个数 (integer) 2 127.0.0.1:6379> smembers my_set 1) "python" 2)"java" 127.0.0.1:6379> sadd my_set2c++ python (integer)2 127.0.0.1:6379> sunion my_set my_set2 //获取多个集合的并集 1)"python" 2) "c十+" 3)"java" 127.0.0.1:6379> sinter my_set my_set2 //获取多个集合的交集 1)"python" 127.0.0 .1:6379>
对 Hash 集合的操作 在 Redis 数据库中对 Hash 集合的增删改查操作,如下所示: //添加key 为 my hset,字段为name ,值为jzj 127.o.o.i:6379> hset my_hset name jzj (integer) 1 //在key为my hset 的哈希集中添加字段2 127.0.0.1:6379> hset my_hset name2 jzj2 (integer) 1 //查询my hset字段长度 127.0.0.1 :6379> hlen my_hset (integer) 2 //查询所有字段 127.0.0.1:6379> hkeys my_hset 1) "name" 2)"name2" //查询所有值 127.0.0.1:6379> hvals my hset 1)"jzi” 2)"jzj2"
//查询宇段name 的值 127.0.0.1:6379> hget my hset name "jzj" //获取key为my hset的哈希集的所有字段和值 127.0.0.1:6379> hgetall my hset 1)"name" 2)"jzj” 3) "name2 " 4)"jzj2" //更新字段name 的值为new jzj 127.0.o.1:6379> hset my hset name new jzi (integer) o //获取key为my hset的哈希集的所有字段和值 127.0.0.1:6379> hgetall my_hset 1) "name" 2)"new izj" 3) "name2" 4)"jzj2” //删除字段name 的值 127.0.0.1:6379> hdel my_hset name (integer) 1 127.0.0.1:6379> hgetall my hset 1)"name2" 2)"jzj2" 127.0.0.1:6379>
对 zset 的操作 zset 是一种有序集合(sorted set),其中每个元素都关联一个序号 score。对 zset 的操作 //添加baidu .com元素,分数为1 127.0.o .1 :6379> zadd my_zset 1 'baidu . com ' (integer) 1 //添加taobao.com元素,分数为2 127.0.0.1:6379> zadd my_zset 2 'taobao .com ' (integer) 1 //添加qq.com元素,分数为3 127.0.0.1:6379> zadd my_zset 3 'qq.com' (integer) 1 //按照分数由小到大查询my_zset集合的元素127.0.0.1:6379> zrange my_zset 0 -1 1)"baidu . com" 2)"taobao.com" 3)"qq.com" //按照分数由大到小查询my_zset集合的元素 127.0.0 . 1 :6379> zrevrange my_zset 0 -1 1) "qq. com" 2)"taobao.com" 3)"baidu.com" //查询元素'baidu.com'的分数值 127.0.0.1:6379>zscore my_zset 'baidu .com ' "1" //查询元素'qq.com'的分数值 127.0.0.1:6379> zscore my_zset 'qq.com' " 3 "
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.redis</groupId> <artifactId>redis</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <!-- 声明项目配置依赖编码格式为 utf-8 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <fastjson.version>1.2.24</fastjson.version> </properties> <dependencies> <!--Redis相关依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--Lettuce pool缓冲连接池 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.pool.min-idle=0
package com.tszr.redis.City; import java.io.Serializable; public class City implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; private String country; public City(int id, String name, String country) { this.id = id; this.name = name; this.country = country; } @Override public String toString() { return "City{" + "id=" + id + ", name='" + name + '\'' + ", country='" + country + '\'' + '}'; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
package com.tszr.redis.controller; import com.tszr.redis.City.City; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class CityController { @Resource private RedisTemplate<String, City> redisTemplate; @Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("/") public void testRedis() { ValueOperations<String, String> ops = stringRedisTemplate.opsForValue(); // 添加字符串 ops.set("name", "beixi"); String name = ops.get("name"); System.out.println(name); ValueOperations<String, City> opsForValue = redisTemplate.opsForValue(); City city = new City(1, "北京", "中国"); // 添加实体类 opsForValue.set("city", city); Boolean exists = redisTemplate.hasKey("city"); System.out.println("redis是否存在相应的key:" + exists); // 删除 redisTemplate.delete("city"); // 更新 redisTemplate.opsForValue().set("city", new City(2, "山西", "中国")); // 查询 City c2 = (City) redisTemplate.opsForValue().get("city"); System.out.println("从redis数据库中获取city:" + c2.toString()); } }
package com.tszr.redis; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }