1、nosql的引言
nosql = not only sql,意思:不仅仅是sql;
泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的社交网络服务类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
2、为什么是nosql
1、易扩展
nosql 数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。
2、大数据量高性能
nosql数据库都具有非常高的读写性能,尤其是在大数据量下,同样表现优秀。这得益于它的非关系性,数据库的结构简单。
3、多样灵活的数据模型
nosql无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是噩梦。
3、nosql应用场景
随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如商城网站中对商品数据频繁查询、对热搜商品的排行统计,订单超时问题、以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观。
nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是sql。
4、什么是redis
redis 是一个开源(bsd许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings),散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
redis 内置了复制(replication),lua脚本(lua scripting),lru驱动事件(lru eviction),事务(transactions)和不同级别的 磁盘持久化(persistence), 并通过redis哨兵(sentinel) 和自动分区(cluster)提供高可用性(high availability)
5、redis特点与优势
特点
-
内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
-
redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等多种数据结构的存储。
-
redis支持数据的备份(master-slave)与集群(分片存储),以及拥有哨兵监控机制。
-
支持事务。
优势
- 性能极高 – redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – redis支持 strings、lists、 hashes、sets 、sorted sets 等数据类型操作。
- 原子操作 – redis的所有操作都是原子性的,同时redis还支持对几个操作合并后的原子性执行。(事务)
- 丰富的特性 – redis还支持 publish/subscribe, 通知, key 过期等特性。
6、linux下redis的安装
6.1、解压安装
1、打开linux服务器,安装wget。
yum install -y wget
2、执行安装命令
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
3、解压redis安装包
tar -zxvf redis-6.2.6.tar.gz
4、由于redis
是使用c语言编写的,因此我们还需要安装c语言依赖
yum install -y gcc-c
5、升级gcc
这里需要说明一下:在编译redis 6之前需要升级gcc的版本,默认情况yum安装的gcc版本是4.8.5,由于版本过低,在编译时会报如下错误。所以我们需要执行以下操作升级gcc。
执行下述命令:
# 安装 scl 源
yum install -y centos-release-scl scl-utils-build
# 安装9版本的 gcc、gcc-c 、gdb 工具链(toolchian)
yum install -y devtoolset-9-toolchain
# 临时覆盖系统原有的 gcc 引用
scl enable devtoolset-9 bash
# 查看 gcc 当前版本
gcc -v
再次查看当前gcc版本
成功升级到9.3.1
!
6.2、编译安装
1、先进行编译,检查redis的安装是否出错。
# 编译的命令是make
make
2、创建新的目录
mkdir -p /usr/local/redis
3、将redis
安装到我们新创建的目录中。
make prefix=/usr/local/redis/ install
6.3、启动redis
1、启动
# 进入bin目录中,执行下述命令
./redis-server
启动成功!如何退出呢?ctrl c
退出。
2、切换到守护进程
[“守护进程”](daemon)就是一直在后台运行的进程(daemon),执行下述操作,开启redis
的守护进程。
# 我们先进入redis-6.2.6中
cd /usr/local/src/redis-6.2.6
# 拷贝redis.conf
cp redis.conf /usr/local/redis/bin/
# 进入redis.conf当前目录
cd /usr/local/redis/bin/
# 修改 redis.conf
vim redis.conf
# 将daemonize设置的值设置为yes
daemonize yes
然后我们通过加载配置文件的方式启动redis
./redis-server ./redis.conf
没有任何反馈,但是redis已经启动成功了!
如何去结束?
# kill -9 3029 说明:强制终止3029号进程的运行,其中参数-9代表强制的意思
kill -9 21221
3、配置开机启动
(1) 在系统服务目录里创建redis.service文件
vim /etc/systemd/system/redis.service
(2) 写入一下内容
[unit]
description=redis-server
after=network.target
[service]
type=forking
execstart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
privatetmp=true
[install]
wantedby=multi-user.target
重载系统服务:systemctl daemon-reload
(3) 测试并加入开机自启
- 关闭redis-server:
systemctl start redis.service
- 开启redis-server:
systemctl enable redis.service
- 查看redis-server状态:
systemctl status redis.service
(4) 将服务加入开机自启
systemctl enable redis.service
7、redis的配置
7.1、redis的配置文件
redis支持很多的参数,但都有默认值。
- daemonize默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为yes。
了 - bind指定redis只接收来自于该ip地址的请求。
- port监听端口,默认为6379。
- databases设置数据库的个数,默认使用的数据库是0。
- save设置redis进行数据库镜像的频率。
- dbfilename镜像备份文件的文件名。
- dir数据库镜像备份的文件放置的路径。
- requirepass设置客户端连接后进行任何其他指定前需要使用的密码。
- maxclients限制同时连接的客户数量。
- maxmemory设置redis能够使用的最大内存。
7.2、通过windows客户端访问
安装redis客户端,推荐redis-desktop-manager
- 安装完后,去建立连接,会提示失败,原因是redis默认只能本地访问。
- 修改配置文件redis.conf
- 注释掉 bind 127.0.0.1可以使所有的ip访问redis,若是想指定多个ip访问,但并不是全部的ip访问,可以bind设置
- 修改后kill -9 xxxx杀死redis进程,重启redis
- 再次建立连接->成功
执行下述命令
# 编辑redis.conf
vim redis.conf
# 将bind 127.0.0.1修改为虚拟机地址bind 192.168.165.3
bind 162.168.65.3
# 设置密码为123456
requirepass 123456
7.3、redis自带的客户端的基本命令操作
# 进入当前目录
/usr/local/redis/bin
# 连接redis客户端 -h 主机地址 -p 端口 -a 密码
./redis-cli -h 192.168.65.3 -p 6379 -a root
# 本机未修改端口简化写法
./redis-cli -a root
8、redis数据库相关指令
8.1、数据库操作指令
# 1.redis中库说明
- 使用redis的默认配置器动redis服务后,默认会存在16个库,编号从0-15
- 可以使用select 库的编号 来选择一个redis的库
- select 编号
# 2.redis中操作库的指令
- 清空当前的库 flushdb
- 清空全部的库 flushall
# 3.redis客户端显示中文
- ./redis-cli -p 7000 --raw
8.2、操作key相关指令
# 1.del指令
- 语法 : del key [key ...]
- 作用 : 删除给定的一个或多个key 。不存在的key 会被忽略。
- 可用版本: >= 1.0.0
- 返回值: 被删除key 的数量。
# 2.exists指令
- 语法: exists key
- 作用: 检查给定key 是否存在。
- 可用版本: >= 1.0.0
- 返回值: 若key 存在,返回1 ,否则返回0。
# 3.expire(有效期,单位)
- 语法: expire key seconds
- 作用: 为给定key 设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。
- 可用版本: >= 1.0.0
- 时间复杂度: o(1)
- 返回值:设置成功返回1 。
# 4.keys
- 语法 : keys pattern
- 作用 : 查找所有符合给定模式pattern 的key 。
- 语法:
keys * 匹配数据库中所有key 。
keys h?llo 匹配hello ,hallo 和hxllo 等。 ?只可以匹配一个任意字符
keys h*llo 匹配hllo 和heeeeello 等。 *可以匹配0到任意多个字符
keys h[ae]llo 匹配hello 和hallo ,但不匹配hillo 。特殊符号用 "\" 隔开 [ae]匹配的字符只能是a或者是e
keys h[ae][ae]llo 长度是6位,中间是a或者是e
- 可用版本: >= 1.0.0
- 返回值: 符合给定模式的key 列表。
# 5.move
- 语法 : move key db
- 作用 : 将当前数据库的key 移动到给定的数据库db 当中。
- 可用版本: >= 1.0.0
- 返回值: 移动成功返回1 ,失败则返回0 。
# 6.pexpire (单位是毫秒)
- 语法 : pexpire key milliseconds
- 作用 : 这个命令和expire 命令的作用类似,但是它以毫秒为单位设置key 的生存时间,而不像expire 命令那样,以秒为单位。
- 可用版本: >= 2.6.0
- 时间复杂度: o(1)
- 返回值:设置成功,返回1 key 不存在或设置失败,返回0
# 7.pexpireat
- 语法 : pexpireat key milliseconds-timestamp
- 作用 : 这个命令和expireat 命令类似,但它以毫秒为单位设置key 的过期unix 时间戳,而不是像expireat那样,以秒为单位。
- 可用版本: >= 2.6.0
- 返回值:如果生存时间设置成功,返回1 。当key 不存在或没办法设置生存时间时,返回0 。(查看expire 命令获取更多信息)
# 8.ttl
- 语法 : ttl key
- 作用 : 以秒为单位,返回给定key 的剩余生存时间(ttl, time to live)。
- 可用版本: >= 1.0.0
- 返回值:
当key 不存在时,返回-2 。
当key 存在但没有设置剩余生存时间时,返回-1 。
否则,以秒为单位,返回key 的剩余生存时间。
- note : 在redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。
# 9.pttl
- 语法 : pttl key
- 作用 : 这个命令类似于ttl 命令,但它以毫秒为单位返回key 的剩余生存时间,而不是像ttl 命令那样,以秒为单位。
- 可用版本: >= 2.6.0
- 返回值: 当key 不存在时,返回-2 。当key 存在但没有设置剩余生存时间时,返回-1 。
- 否则,以毫秒为单位,返回key 的剩余生存时间。
- 注意 : 在redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。
# 10.randomkey
- 语法 : randomkey
- 作用 : 从当前数据库中随机返回(不删除) 一个key 。
- 可用版本: >= 1.0.0
- 返回值:当数据库不为空时,返回一个key 。当数据库为空时,返回nil 。
# 11.rename
- 语法 : rename key newkey
- 作用 : 将key 改名为newkey 。当key 和newkey 相同,或者key 不存在时,返回一个错误。当newkey 已经存在时,rename 命令将覆盖旧值。
- 可用版本: >= 1.0.0
- 返回值: 改名成功时提示ok ,失败时候返回一个错误。
# 12.type
- 语法 : type key
- 作用 : 返回key 所储存的值的类型。
- 可用版本: >= 1.0.0
- 返回值:
none (key 不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)