NoSQL = Not Only SQL(不仅仅是SQL),也解释为 non-relational(非关系型数据库)。在 NoSQL 数据库中数据之间是无联系的,无关系的。数据的结构是松散的,可变的。
关系型数据库的瓶颈:
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。关系型数据库(例如MySQL)使用查询缓存。这种查询缓存在更新数据后,缓存就是失效了。在频繁的数据读写交互应用中。缓存的性能不 高。NoSQL的缓存性能要高的多。
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。尤其在快速变化的市场环境中,用户的需求总是在不断变化的。
NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。
NoSQL能很好的解决关系型数据库扩展性差的问题。弥补了关系数据(比如MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。
MySQL 和 NoSQL 都有各自的特点和使用的应用场景,两者结合使用。让关系数据库关注在关系上,NoSQL关注在存储上。
这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的 License 成本。
Redis是当今非常流行的基于KV 结构的作为 Cache 使用的 NoSQL 数据库
Remote Dictionary Server(Redis)是一个开源的使用 ANSIC 语言编写、支持网络、可基于内存亦可持久化的 Key-Value 数据库。Key 字符类型,其值(value)可以是字符串(String),哈希(Map),列表(list),集合(sets)和有序集合(sorted sets)等类型,每种数据类型有自己的专属命令。所以它通常也被称为数据结构服务器。
Redis 的作者是 Salvatore Sanilippo,来自意大利的西西里岛。现在居住在卡塔尼亚。目前供职于Pivotal 公司(Pivotal 是 Spring 框架的开发团队),Salvatore Sanfilippo 被称为 Redis 之父。
官网:https://redis.io/
中文:http://www.redis.cn/
Windows 版本的 Redis 是 Microsoft 的开源部门提供的 Redis,这个版本的 Redis 适合开发人员学习使用,生产环境中使用 Linux 系统上的 Redis。
官网:https://redis.io//
windows版本:https://github.com/MSOpenTech/redis/releases
双击 redis-service.exe,启动 Redis 服务
启动后再双击 redis-cli.exe,打开 redis 客户端
https://download.redis.io/releases/
在解压后的 Redis 目录下执行(cd /usr/local/redis-3.2.9) make 命令。
注意事项:
make 命令执行过程中可能报错,根据控制台输出的错误信息进行解决
错误一:gcc命令找不到,是由于没有安装gcc导致
解决方式:安装 gcc 编译器后在执行 make 命令
错误二error:jemalloc/jemalloc.h:Nosuch file or directory
解决方式执行:make MALLOC=libc
错误三gcc版本过低:
make[1]: *** [server.o] Error 1
make[1]: Leaving directory `/usr/local/redis-6.0.5/src'
make: *** [all] Error 2
解决方案:
[root@localhost redis-6.0.5]# gcc -v # 查看gcc版本
[root@localhost redis-6.0.5]# yum -y install centos-release-scl # 升级到9.1版本
[root@localhost redis-6.0.5]# yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
[root@localhost redis-6.0.5]# scl enable devtoolset-9 bash
以上为临时启用,如果要长期使用gcc 9.1的话:
[root@localhost redis-6.0.5]# echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
之后再次执行make即可
关闭方式:
切换到redis-3.2.9/src/ 目录,执行 ./redis-cli shutdown。推荐使用这种方式,redis 先完成数据操作,然后再关闭。
这种不会考虑当前应用是否有数据正在执行操作,直接就关闭应用。
先使用ps -ef | grep redis查出进程号,在使用kill pid
redis-cli(Redis Command Line Interface)是Redis 自带的基于命令行的Redis 客户端,用于与服务端交互,我们可以使用该客户端来执行 redis 的各种命令。
两种常用的连接方式:
在redis安装目录\src,执行./redis-cli
此命令是连接本机127.0.0.1,端口6379的 redis
在 redis 安装目录\src,执行./redis-cli -h 127.0.0.1 ~p 6379
Redis Desktop Manager:C++编写,响应迅速,性能好。
连接 Linux 的 Reids 之前需要修改 Redis 服务器的配置信息。Redis 服务器有安全保护措施,默认只有本机(安装Redis的那台机器)能够访问。配置信息存放在 Redis 安装目录下的 redis.conf 文件。修改此文件的两个设置。
远程连接 redis 需要修改 redis 主目录下的 redis.conf 配置文件:
注意:每次启动 redis,都需要指定 redis.conf 的文件位置,因为 redis 启动不加载 redis.conf 这个文件,而我们修改了这个文件,要让此文件修改的内容生效,必须每次都要指定 redis.conf 的文件位置,否则修改的内容就不起作用了。
redis 的 Java编程客户端,Redis 官方首选推荐使用 Jedis,jedis 是一个很小但很健全的 redis 的 java客户端。通过 Jedis 可以像使用Redis 命令行一样使用Redis。
C、C++、C#、Erlang、 Lua、Objective-C、Perl、PHP、Python、Ruby、Scala、Go等40多种语言都有连接 redis 的编程客户端。
redis 默认为16个库(在 redis.conf 文件可配置,该文件很重要,后续很多操作都是这个配置文件),redis 默认自动使用0号库。
redis > ping 返回 PONG
解释:输入 ping,redis 给我们返回 PONG,表示 redis 服务运行正常
语法:dbsize
作用:返回当前数据库的key的数量
返回值:数字,key 的数量
Redis 默认使用16个库,从0到15。对数据库个数的修改,在 redis. conf 文件中
使用其他数据库,命令是 select index
语法:keys pattern
作用:查找所有符合模式 pattern 的 key。pattern 可以使用通配符。
通配符:
语法:exists key [key…]
作用:判断 key 是否存在
返回值:整数,存在 key 返回 1,其他返回 0。使用多个 key,返回存在的 key 的数量。
语法:expire key seconds
作用:设置 key 的生存时间,超过时间,key 自动删除。单位是秒。
返回值:设置成功返回数字 1,其他情况是 0
语法:ttl key
作用:以秒为单位,返回 key 的剩余生存时间(ttl: time to live)
返回值:
例1:设置 word 的过期时间是30,查看剩余时间
例2:查看 word 是否存在
语法:type key
作用:查看 key 所存储值的数据类型
返回值:字符串表示的数据类型
例1:查看存储字符串的 key:wood
例2:查看不存在的 key
语法:del key [key…]
作用:删除存在的 key,不存在的 key 忽略
返回值:数字,删除的 key 的数量
字符串类型是 Redis 中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON化的对象甚至是一张图片。最大512M。
key | value |
---|---|
username | 张三 |
Redis hash是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
key | loginuser |
---|---|
field | value |
uname | 李四 |
times | 5 |
region | 武汉 |
//上面表格相当于以下程序
Map<String, String> data = new HashMap();
data.put("uname","李四");
data.put("times","5");
data . put ("region","武汉");
Map<String,Map<String,string> map = new ...
map.put("loginuser",data); //redis hash类型
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
key | value |
---|---|
region | 北京 上海 广州 |
Redis 的 Set 是 string 类型的无序集合,集合成员是唯一的, 即集合中不能出现重复的数据。
key | value |
---|---|
spring | |
framework | mybatis |
springmvc |
Redis 有序集合 zset 和集合 set 一样也是 string 类型元素的集合,且不允许重复的成员。不同的是 zset 的每个元素都会关联一个分数(分数可以重复),redis 通过分数来为集合中的成员进行从小到大的排序。