【编程不良人】Redis后端实战学习笔记01---NoSQL简介、分类、应用场景;Redis特点、安装、相关指令、数据库操作命令、桌面可视化工具等

视频链接:【编程不良人】适合后端编程人员的Redis实战教程、redis应用场景、分布式缓存、Session管理、面试相关等已完结!_哔哩哔哩_bilibili

1. NoSQL的引言

NoSQL(Not Only SQL ),意即不仅仅是SQL, 泛指非关系型的数据库。Nosql这个技术门类早期就有人提出,发展至2009年趋势越发高涨。

关系型数据库(RDBMS):通过SQL语句操作 存储数据 如:MySQL、Oracle等

非关系型数据库:不一定通过SQL语句操作 存储数据

2. 为什么是NoSQL?

       随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如商城网站中对商品数据频繁查询(缓存)、对热搜商品的排行统计(统计)、订单超时问题(过期自动超时)、以及微信朋友圈(音频,视频)存储((存储)等相关使用传统的关系型数据库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观。nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是sql,提出了对问题的新的解决方案。

3. NoSQL的四大分类

3.1 键值对(Key-Value)存储数据库

 # 1.说明: 
 - 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。
 - 类似Java中的Map<key,value>
 ​
 # 2.特点
 - Key/value模型对于IT系统来说的优势在于简单、易部署。  
 - 但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。
 - key value:如10000中查询/更新2个,需要遍历,找到才能操作,效率低
 ​
 # 3.相关产品
 - Tokyo Cabinet/Tyrant,
 - `Redis`  key value   基于内存   速度快(运行软件---内存---操作)   使用广泛  
 - `SSDB`   key value   基于硬盘(运行软件---磁盘---内存---操作)
 - Voldemort 
 - Oracle BDB

3.2 列存储数据库

 # 1.说明
 - 这部分数据库通常是用来应对分布式存储的海量数据。
 ​
 # 2.特点
 - 键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。
 - 一键指向多列
 - key rouingkey
 ​
 # 3.相关产品
 - Cassandra、`HBase`、Riak.

3.3 文档型(Document)数据库

 # 1.说明
 - 文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似,该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,而且文档型数据库比键值数据库的查询效率更高。
 ​
 # 2.特点
 - 以文档形式存储
 - {"id":"1","name":"zhangsan","age":"20","tags":["学生","帅哥","学霸"]}   
 - {"id":"1","name":"zhangsan","age":"20"}
 - 类似json格式  查询快,使用灵活,没有严格的库表结构,支持复杂的数据存储
 ​
 # 3.相关产品
 - `MongoDB`、CouchDB、 MongoDb(4.x). 国内也有文档型数据库SequoiaDB,已经开源。
 -     ↑
 -  BSON格式,事务支持不好

3.4 图形(Graph)数据库

 # 1.说明
 - 图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。
 - 二进制存储
 ​
 # 2.特点
 - NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。
 ​
 # 3.相关产品
 - Neo4J、`InfoGrid`、 Infinite Graph、

4. NoSQL应用场景

  • 数据模型比较简单

  • 需要灵活性更强的IT系统(系统设计灵活、性能要求比较高)

  • 对数据库性能要求较高

  • 不需要高度的数据一致性(NoSQL产品对事务支持不是特别良好)

5. 什么是Redis?

官网:Redis

中文网站:CRUG网站 ,软件更新速度较慢

旧版:

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

新版: 

Redis:开源    遵循BSD    基于内存(RAM,读写快、断电立即消失)   数据存储    被用于作为数据库、缓存、消息中间件

持久化机制:定期将内存中数据写入到磁盘(ROM,数据持久化)中,保证数据不丢失

数据库:硬盘存储---内存---操作

总结:redis是一个内存型的数据库

6. Redis特点

  • Redis是一个高性能key/value内存型数据库

  • Redis支持丰富的数据类型(String、List、Set、Zset、Hash),相比于Memcache(字符串,对象) 丰富

  • Redis支持持久化,可将内存中数据持久化到磁盘中

  • Redis单线程、单进程,借鉴了Memcache(多线程、线程锁),效率高,不支持并发,不存在线程安全问题:Redis实现分布式锁

7. Redis安装

视频链接:2.Redis的下载和安装_哔哩哔哩_bilibili

 # 0.准备环境
 - vmware15.x+
 - centos7.x+
 ​
 # 1.下载redis源码包
 - https://redis.io/

 # 2.下载完整源码包
 - redis-4.0.10.tar.gz

 # 3.将下载redis资料包上传到Linux中(拖进去)

 # 4.解压缩文件
 [root@localhost ~]# tar -zxvf redis-4.0.10.tar.gz
 [root@localhost ~]# ll

 # 5.安装gcc  
 - yum install -y gcc
 ​
 # 6.进入解压缩目录执行如下命令
 - make MALLOC=libc
 ​
 # 7.编译完成后执行如下命令
 - make install PREFIX=/usr/redis
 ​
 # 8.进入/usr/redis目录启动redis服务 
 - ./redis-server

 # 9.Redis服务端口默认是 6379
 ​
 # 10.进入bin目录执行客户端连接操作
 - ./redis-cli –p 6379

 # 11.连接成功出现上面界面连接成功

关于Redis安装在Linux(默认安装包就是安装在Linux系统上的)还是Windows系统上的区别:

8. Redis数据库相关指令

视频链接:3.Redis细节以及key的操作指令_哔哩哔哩_bilibili

8.1 数据库操作指令

 # 1.Redis中库说明
 - 使用redis的默认配置器动redis服务后,默认会存在16个库,编号从0-15
 - 可以使用select 库的编号 来选择一个redis的库
 ​
 # 2.Redis中操作库的指令
 - 清空当前的库  FLUSHDB(Tab键提示且自动变大写)
 - 清空全部的库  FLUSHALL
 ​
 # 3.redis客户端显示中文
 -   ./redis-cli  -p 7000 --raw

8.2 操作key相关指令

 # 1.DEL指令
 - 语法 :  DEL key [key ...] 
 - 作用 :  删除给定的一个或多个key 。不存在的key 会被忽略。
 - 可用版本: >= 1.0.0
 - 返回值: 被删除key 的数量。 
 - 举例:del name
 ​
 # 2.EXISTS指令
 - 语法:  EXISTS key
 - 作用:  检查给定key 是否存在。
 - 可用版本: >= 1.0.0
 - 返回值: 若key 存在,返回1 ,否则返回0。
 - 举例:exists name,存在返回1,不存在返回0
 -       exists name age bir,存在几个返回几,都不存在返回0(key可指定多个)
 ​
 # 3.EXPIRE指令(解决超时问题)
 - 语法:  EXPIRE key seconds
 - 作用:  为给定key 设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。
 - 可用版本: >= 1.0.0
 - 时间复杂度: O(1)
 - 返回值:设置成功返回1 。
 - 举例:expire name 10,设置name的有效期为10秒
 ​
 # 4.KEYS
 - 语法 :  KEYS pattern
 - 作用 :  查找所有符合给定模式pattern的key 。
 - 语法:
     KEYS *:匹配数据库中所有key 。
     KEYS h?llo:?表示匹配一个字符,匹配hello ,hallo 和hxllo等。
     KEYS h*llo:*表示匹配0到任意多个字符,匹配hllo 和heeeeello 等。
     KEYS h[ae]llo :[]表示匹配一个,匹配a或者e,匹配hello 和hallo ,但不匹配hillo 。特殊符号用 "\" 隔开
     KEYS h[a][e]llo
 - 可用版本: >= 1.0.0
 - 返回值: 符合给定模式的key 列表。
 ​
 # 5.MOVE
 - 语法 :  MOVE key db
 - 作用 :  将当前数据库的key 移动到给定的数据库db当中。
 - 可用版本: >= 1.0.0
 - 返回值: 移动成功返回1 ,失败则返回0。
 - 举例:move name 1,将key对应name的键值对移到1号库
 ​
 # 6.PEXPIRE
 - 语法 :  PEXPIRE key milliseconds
 - 作用 :  这个命令和EXPIRE命令的作用类似,但是它以毫秒为单位设置key的生存时间,而不像EXPIRE命令那样,以秒为单位。
 - 可用版本: >= 2.6.0
 - 时间复杂度: O(1)
 - 返回值:设置成功,返回1;key不存在或设置失败,返回0
 - 举例:pexpire name 10
 ​
 # 7.PEXPIREAT
 - 语法 :  PEXPIREAT key milliseconds-timestamp
 - 作用 :  这个命令和EXPIREAT命令类似,但它以毫秒为单位设置key的过期unix时间戳,而不是像EXPIREAT那样,以秒为单位。
 - 可用版本: >= 2.6.0
 - 返回值:如果生存时间设置成功,返回1。当key不存在或没办法设置生存时间时,返回0。(查看EXPIRE命令获取更多信息)
 - 举例:pexpireat name 5000,设置name的有效期为5000毫秒,即5秒
 ​
 # 8.TTL
 - 语法 :   TTL key
 - 作用 :   以秒为单位,返回给定key的剩余生存时间(TTL, time to live)。
 - 可用版本: >= 1.0.0
 - 返回值:
     当key不存在时,返回-2 。
     当key存在但没有设置剩余生存时间时(永久存储),返回-1。
     否则,返回>=0的数,以秒为单位,返回key的剩余生存时间。
 - Note : 在Redis 2.8以前,当key不存在,或者key没有设置剩余生存时间时,命令都返回-1。
 - 举例:ttl name
 ​
 # 9.PTTL
 - 语法 :  PTTL key
 - 作用 :  这个命令类似于TTL命令,但它以毫秒为单位返回key的剩余生存时间,而不是像TTL命令那样,以秒为单位。
 - 可用版本: >= 2.6.0
 - 返回值: 当key 不存在时,返回-2 。当key存在但没有设置剩余生存时间时,返回-1。
 - 否则,以毫秒为单位,返回key 的剩余生存时间。
 - 注意 : 在Redis 2.8以前,当key不存在,或者key没有设置剩余生存时间时,命令都返回-1。
 - 举例:ttl name
 ​
 # 10.RANDOMKEY
 - 语法 :  RANDOMKEY
 - 作用 :  从当前数据库中随机返回(不删除) 一个key 。
 - 可用版本: >= 1.0.0
 - 返回值:当数据库不为空时,返回一个key 。当数据库为空时,返回nil。
 - 举例:randomkey name,随机返回一个key
 ​
 # 视频链接:https://www.bilibili.com/video/BV1jD4y1Q7tU?p=4
 # 11.RENAME
 - 语法 :  RENAME key newkey
 - 作用 :  将key改名为newkey。当key和newkey相同,或者key不存在时,返回一个错误。当newkey已经存在时,RENAME命令将覆盖旧值。
 - 可用版本: >= 1.0.0
 - 返回值: 改名成功时提示OK,失败时候返回一个错误。
 - 举例:rename name username
 ​
 # 12.TYPE
 - 语法 :  TYPE key
 - 作用 :  返回key所储存的值的类型。
 - 可用版本: >= 1.0.0
 - 返回值:
     none (key 不存在)
     string (字符串)
     list (列表)
     set (集合)
     zset (有序集)
     hash (哈希表)
 - 举例:type name

8.3 String类型

8.3.1 内存存储模型

8.3.2 常用操作命令

命令说明
set 键名 值设置一个key/value
get 键名根据key获得对应的value
mset(more set) 键名1 值1 键名2 值2 键名3 值3一次设置多个key value
mget(more get) 键名1 键名2 键名3一次获得多个key的value
getset 键名 新值获得原始key的值,同时设置新值
strlen 键名获得对应key存储value的长度
append 键名 值追加内容为对应key的value追加内容
getrange(索引从0开始,最后索引可用-1代替) 键名 起点 终点截取指定范围value的内容
setex 键名 存活时间(秒) 值;ttl 键名(查看存活时间)设置一个key存活的有效期(秒)
psetex键名 存活时间(毫秒) 值;pttl 键名(查看存活时间)设置一个key存活的有效期(毫秒)
setnx(set not exists)键名 值存在,不做任何操作;不存在,执行添加操作
msetnx(原子操作:只要有一个存在不做任何操作,要都不存在才执行) 键名1 值1 键名2 值2 键名3 值3可以同时设置多个key,只要有一个存在就不做任何处理
decr 键名进行数值类型的-1操作
decrby 键名 步长根据提供的数据进行减法操作
incr 键名进行数值类型的+1操作
incrby 键名 步长根据提供的数据进行加法操作
Incrbyfloat 键名 小数步长(精度保留17位)根据提供的数据加入浮点数

8.4 List类型

视频链接:5.List类型操作_哔哩哔哩_bilibili

list:列表,相当于java中list 集合

特点:元素有序且可以重复

8.4.1 内存存储模型

一键对应多值

8.4.2 常用操作指令

命令说明
lpush 列表名 值1 值2 值3(从左侧放)将某个值加入到一个key列表头部
lpushx(lpush exists) 列表名 值1 值2 值3(从左侧放)同lpush,但是必须要保证这个key存在(不能创建列表,列表已经被创建时才能使用)
rpush 列表名 值1 值2 值3(从右侧放)将某个值加入到一个key列表末尾
rpushx(rpush exists) 列表名 值1 值2 值3(从右侧放)同rpush,但是必须要保证这个key存在(不能创建列表,列表已经被创建时才能使用)
lpop 列表名返回和移除列表左边的第一个元素
rpop 列表名返回和移除列表右边的第一个元素
lrange 列表名 起点(从0开始) 终点(-1表示末尾) 【遍历时:0 -1】获取某一个下标区间内的元素
llen 列表名获取列表元素个数
lset 列表名 索引 值设置某一个指定索引的值(索引必须存在)
lindex 列表名 索引获取某一个指定索引位置的元素
lrem 列表名 重复元素个数 值(从左侧开始匹配,重复时删除)删除重复元素
ltrim 列表名 索引起点 索引终点(索引从0开始)保留列表中特定区间内的元素
linsert 列表名 before/after 值 新值在某一个元素之前/之后插入新元素

8.5 Set类型

视频链接:6.Set类型和Zset类型_哔哩哔哩_bilibili

特点:Set类型 Set集合 元素无序 不可以重复

8.5.1 内存存储模型

一键(String)对多值

8.5.2 常用命令

命令说明
sadd 键名 值1 值2 值没有集合时会先创建集合,然后为集合添加元素
smembers 键名显示集合中所有元素,无序
scard 键名返回集合中元素的个数
spop 键名随机返回一个元素,并将元素在集合中删除
smove 键名1 键名2 值从一个集合中向另一个集合移动元素,必须是同一种类型
srem 键名 值从集合中删除一个元素
sismember 键名 值判断一个集合中是否含有这个元素,有就返回1,没有返回0
srandmember 键名 元素个数随机返回元素,不删除
sdiff 键名1 键名2 键名3 ...去掉第一个集合中其它集合含有的相同元素
sinter 键名1 键名2 键名3 ...求交集(去重)
sunion 键名1 键名2 键名3 ...求和集

8.6 ZSet类型

特点: 可排序的set集合 排序 不可重复

ZSET 官方 可排序SET sortSet

8.6.1 内存模型

8.6.2 常用命令

命令说明
zadd 键名 分数1 值1 分数2 值2 分数3 值3没有集合时创建集合,然后添加集合元素,元素有序且不重复
zcard 键名返回集合的元素个数
zrange(升序)/zrevrange(降序 ) 键名 下标起点 下标终点 (withscores 带此参数时显示分数)返回一个范围内的元素
zrangebyscore 键名 分数起点 分数终点 withscores limit 页码 显示条数按照分数查找一个范围内的元素
zrank 键名 值返回排名(正序)
zrevrank 键名 值倒序排名
zscore 键名 值显示某一个元素的分数
zrem 键名 值1 值2 值3........移除某一个或多个元素
zincrby 键名 加分值 值给某个特定元素加分

8.7 hash类型

视频链接:7.Hash类型及可视化工具使用_哔哩哔哩_bilibili

redis :key(string)、value(map)

特点: value是一个map结构,存在key、value,且key是无序的

一key一map

即:[ 外key, [ 内key , 内value ] ]

8.7.1 内存模型

8.7.2 常用命令

命令说明
hset 外key 内key 内value设置一个key/value对
hget 外key 内key获得一个key对应的value
hgetall 外key获得所有的key/value对
hdel 外key 内key删除某一个key/value对
hexists 外key 内key判断一个key是否存在
hkeys 外key获得所有的key
hvals 外key获得所有的value
hmset 外key 内key1 内value1 内key2 内value2......设置多个key/value
hmget 外key 内key1 内key2 ......获得多个key的value
hsetnx 外key 新内key 新内value设置一个不存在的key的值,内key不存在时添加,存在时不添加
hincrby 外key 内key 增量为value进行加法运算,value必须为数值类型才可以
hincrbyfloat 外key 内key 增量为value加入浮点值,value必须为数值类型才可以

9. redis桌面可视化工具

RedisDesktopManager(自行安装,下一步): 

ok即可,进行连接redis服务器 

双击进行查看,按照文字进行操作: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值