目录
一、Redis简介
1.1 什么是NoSQL
NoSQL(NoSQL = Not Only SQL),是一项全新的数据库理念,泛指非关系型的数据库。传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型、web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
1.2 NoSQL和关系型数据库比较
优点:
1. 成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购 买使用,相比关系型数据库价格便宜。
2. 查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询 速度远不及nosql数据库。
3. 存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储 基础类型以及对象或者是集合等各种格式,而关系型数据库则只支持基础类型。
4. 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
缺点:
1. 维护的工具和资料有限,因为nosql属于新的技术,不能和关系型数据库10几年的技术同日而 语。
2. 不提供对sql的支持,如果不支持sql这样的工业标准(不遵循SQL标准),将产生一定用户的学习和使用成本。
3. 不提供关系型数据库对事务的处理。
1.3 主流的NoSQL产品
键值对存储数据库 | 列存储数据库 | 文档型数据库 | 图形数据库 | |
相关产品 | Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB | Cassandra, HBase, Riak | CouchDB、MongoDB | Neo4J、InfoGrid、Infinite Graph |
典型应用 | 内容缓存,主要用于处理大量数据的高访问负载 | 分布式的文件系统 | Web应用(与Key-Value类似,Value是结构化的) | 社交网络 |
数据模型 | 一系列键值对 | 以列簇式存储,将同一列数据存在一起 | 一系列键值对 | 图结构 |
优势 | 快速查询 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 数据结构要求不严格 | 利用图结构相关算法。 |
劣势 | 存储的数据缺少结构化 | 功能相对局限 | 查询性能不高,而且缺乏统一的查询语法 | 需要对整个图做计算才能得出结果,不容易做分布式的集群方案。 |
1.4 什么是Redis
Redis是用C语言开发的一个开源的高性能键值对数据库。
特征:
1. 数据间没有必然的关联关系
2. 内部采用单线程机制进行工作
3. 高性能,官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是 81000次/s。
4. 多数据类型支持
字符串类型 | string |
列表类型 | list |
散列类型 | hash |
集合类型 | set |
有序集合类型 | sorted_set |
5. 持久化支持。可以进行数据灾难恢复
二、Redis下载安装
Linux 版 (适用于企业级开发)
- Redis 高级开始使用
- 以4.0 版本作为主版本
Windows 版本 (适合零基础学习)
- Redis 入门使用
- 以 3.2 版本作为主版本
- 下载地址:https://github.com/MSOpenTech/redis/tags
Redis核心文件
- redis-server.exe 服务器启动命令
- redis-cli.exe 命令行客户端
- redis.windows.conf redis核心配置文件
- redis-benchmark.exe 性能测试工具
- redis-check-aof.exe AOF文件修复工具
- redis-check-dump.exe RDB文件检查工具(快照持久化文件)
启动Redis
方式1:双击redis-server.exe
方式2:指令redis-server.exe redis.windows.conf
redis端口号是6379
三、Redis基本操作
信息添加 | 信息查询 | 清除屏幕信息 | 退出客户端命令行模式 | 帮助 | |
功能 | 设置 key,value 数据 | 根据 key 查询对应的 value,如果不存在,返回空(nil) | 清除屏幕中的信息 | 退出客户端 | 获取命令帮助文档,获取组中所有命令信息名称 |
命令 | set key value | get key | clear | quit exit 按钮 | help 命令名称 help @组名 |
四、Redis数据类型
redis 数据存储格式
- redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储。
- 数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串
key的语法:
- 在一个项目中,key最好使用统一的命名模式
- key区分大小写
- key不要太长,尽量不要超过1024字节。不仅消耗内存,也会降低查找的效率
- key不要太短,太短可读性会降低
4.1 5种基础数据类型(常用)
结构类型 | 结构存储的值 | 结构的读写能力 | 应用场景 |
String字符串 | 可以是字符串、整数或浮点数 | 对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作 | 缓存对象、常规计数、分布式锁、共享 session 信息等 |
List列表 | 一个链表,链表上的每个节点都包含一个字符串 | 对链表的两端进行push和pop操作,读取单个或多个元素;根据值查找或删除元素 | 消息队列(但是有两个问题:1.生产者需要自行实现全局唯一ID; 2.不能以消费组形式消费数据)等 |
Set集合 | 包含字符串的无序集合 | 字符串的集合,包含基础的方法有看是否存在添加、获取、删除;还包含计算交集、并集、差集等 | 聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等 |
Hash散列 | 包含键值对的无序散列表 | 包含方法有添加、获取、删除单个元素 | :缓存对象、购物车等 |
Zset有序集合 | 和散列一样,用于存储键值对 | 字符串成员与浮点数分数之间的有序映射,元素的排列顺序由分数的大小决定;包含方法有添加、获取、删除单个元素以及根据分值范围或成员来获取元素 | 排序场景,比如排行榜、电话和姓名排序等 |
4.2 4种特殊数据类型
1、geospatial地理位置(3.2 版新增)
- GEO底层的实现原理其实就是zset。
- 应用场景:存储地理位置信息的场景,比如滴滴叫车。
2、BitMap (2.2 版新增)
- 应用场景:二值状态统计的场景,比如签到、判断用户登陆状态、连续签到用户总数等。
3、HyperLogLog (2.8 版新增)
- 应用场景:海量数据基数统计的场景,比如百万级网页 UV 计数等
4、Stream (5.0 版新增)
- 应用场景:消息队列,相比于基于 List 类型实现的消息队列,有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据
五、Jedis
我们要使用Java来操作Redis。
Jedis是Redis官方推荐的java连接开发工具。使用ava操作Redis中间件。如果你要使用 java操作redis,那么一定要对jedis十分熟悉。
1.导入对应依赖
<!--导入jedis包-->
<dependencies>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
2、编码测试:
import redis.clients.jedis.Jedis;
public class TestPing {
public static void main(String[] args) {
//new Jedis 对象即可
Jedis jedis = new Jedis("127.0.0.1",6379);
System.out.println(jedis.ping());
}
}