redis 非关系型数据库

redis 非关系型数据库,缓存型数据库。

关系型数据库和非关系型数据库的区别

关系型数据库是一个机构化的数据库,行和列。

列:声明对象

行:记录对象属性。

表与表之间是有关联,使用sql语句,来对指定的表,库,进行增删改查。

在创建表时,我们是设计好了表的结构。按照表结构来存储数据。数据与表结构不匹配,存储数据,会失败。

非关系型数据库:nosql not only sql

不需要定义库,也不需要定义表的结构,直接记录即可,而且每条记录都可以由不同的数据类型,字段(字段个数)

redis key:value 建值对形式存储。每个键之间没有之间关联。库与库之间相互独立。

区别:

1,数据的存储方式不同。

2,扩展方式,性能上的提升。关系型数据库靠的是提升本机的性能。非关系型数据库,可以横向扩展,加入节点服务器的方式提高性能。

3,对事务的支持性,mysql支持事务。(原子性,隔离性,一致性,持久性)

非关系型数据库也支持事务,但是稳定性和处理能力都不如关系型数据库。

非关系型数据库的主要场景:

1,操作的扩展性

2,海量数据处理

web2.0:交互。

纯动态网站的三高问题:

1,对数据库高并发读写的需求。

2,对海量数据高效存储与访问的需求。

3,对数据库的高可扩展性与高可用性的需求。

数据库缓存:

web页面缓存

cpu和硬盘之间缓存

常见的缓存需求场景

关系型数据库:

库----表---行,列----->存储数据

非关系型数据库:

库----集合----->保存键值对

他不需要是手动的创建库和集合。

redis:开源的,使用c语言编写的NQL数据库。

redis:基于内存运行,支持持久化(数据恢复)。采用的就是key-value(键值对)的存储形式。目前在分布式架构中,非常重要的一环。

redis服务器程序,是一个单进程模式,即只有一个主进程工作。也就是说在一台服务器上可以启动多个redis(端口号不能冲突)

redis的实际处理速度是完全依靠主进程的执行效率。

服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降

如果部署了多个redis进程,虽然能提高redis的并发处理能力,但是会给服务器的cpu带来很大的压力。

一台服务器,一般部署3个redis进程。(根据情况来看,高并发,要部署多个。一般情况,单进程足够了)

redis的特点:

1,具有极高的读写速度,数据读取每秒110000次,写入数据每秒可执行81000的写入。

2,支持丰富的数据类型。

3,支持持久化。平常的数据都是保存在内存中,持久化可以写入到磁盘中,即可以保存到本地,也可以实现备份。

4,原子性,所有的操作都是原子性

5,支持主从模式---master-slave模式。

redis为什么这么快?应届 面试题

1,redis是纯内存结构,避免了磁盘I/O的耗时

2,核心模块是一个单进程,减少了线程切换和回收线程的时间。

3,I/O的多路复用机制。每一个执行线路,都可以同时读和写。高并发的效率大大提升。

特殊说明:redis的读写,仍然是单进程处理。

redis的服务控制命令:

/etc/init.d/redis_6379 status 状态

/etc/init.d/redis_6379 restart 重启

redis的命令工具:

redis-server:直接启动redis,只能启动

redis-benchmark:检测redis在本机的运行效率

redis-cil:命令行工具

redis-check-aof:检测AOF文件是否正常

redis-check-rdb:检测rdb文件是否正常

redis-benchmark:

-h:指定服务器的主机名 IP地址

-p:指定服务器的端口号

-c:指定并发连接数

-n:指定请求数。

redis-benchmark -h 192.168.176.80 -p 6379 -c 100 -n 10000 连接请求测试

redis-benchmark -h 192.168.176.80 -p 6379 -q -d 100 存取数据包的能力

redis-benchmark -t set,lpush -n 100000 -q 测试性能

一,如何进入redis

1,redis-cli -h 192.168.176.80 -p 6379 登录指定

-h 指定IP地址

-p 指定端口号

-a 指定登录密码

2,redis-cli 仅限于本地,远程登录还是要指定IP地址

二,redis的数据类型:

五大数据类型:

1,string(字符串):也是redis的最基本的类型,最大能存储512MB的数据,可以存储任何数据,数字,图片,文字,等等。

keys * :查看所有键值

*:表示所有

?:表示后面任意一位

创建键值: set test chen

读取键值:get test

修改键值 set test 10

判断键值对是否存在

exists test

1:存在 0:不存在

删除:del test

如何查看对应键值对的类型

type test

拼接字符串

没有,直接输入,显示当前长度

有,拼接字符串返回所有长度

append test1 hello

直接查看长度:strlen test1

incr test 递增1

decr test 递减1

只能改数字

incrby test 10 增加10

decrby test 10 减10

设置键值对生命周期:

setex test2 15 lo

ttl test2 查看键值对的生命周期

(integer)-2:结束

-1:表示永不过期

修改生命周期

expire test 30

创建多个:

mset key1 hello key2 world

打印多个:MGET key1 key2

2,list 数据类型

列表

创建列表

倒叙插入

lpush chen a b c 1 2 3

正序插入:

rpush cg 1 2 3 4

以下标查看:

lrange chen 0 -1

lindex chen 0 查看第0个

添加:

在前面添加:

lpushx cg 10

在后面添加

rpushx cg 5

删除:

lpop cg 删除第一个

rpop cg 删除最后一个

修改下标为3的元素

lset cg 3 shuai

在指定元素前后进行插入

linsert chenc before 3 10

linsert chenc after 3 11

三,hash类型:

hash类型用于存储对象,采用hash格式来进行操作。占用的磁盘空间少,而且一个hash可以存储4294967295个键值对。

创建:

hset cc tall yes

查看:

hget cc tal

添加新字段:

hset cc handsan yes

打印多个

hmget cc tall handsan

删除:

hdel cc tall

一次性设置多个字段

hmset chc tall yes age 21 ah 阿斯顿

中文会显示乱码

打印:

hmget chc tall age ah

直接查看全部键字段名,值

hgetall chc

分开查看

键字段名:hkeys chc

键值:hvals chc

删除:del cg

四,set 数据类型(无序集合)

元素类型也是string,元素是唯一的,不允许重复。多个集合类型可以进行并集。交集和差集运算。

set当中的元素类型是唯一的,可以跟踪一些唯一性数据。访问微博的用户名。只要把对应名称写入redis,set集合可以自动保存唯一性,保证下次访问

flushall 删除redis所有库

创建 (重复的不算)

sadd myset a a c

查看:

smembers myset

查看集合有没有指定元素

sismember myset c

1,存在 0,不存在

添加元素:

sadd myset b d e f

移除

随机移除:

srandmember myset

spop myset

指定移除:

srem myset a c

五,有序集合:元素类型也是string,元素唯一不能重复。

每个元素都会关联一个double(小数点)的分数(score,表示权重)可以通过权重的大小。进行排序。元素的权重可以重复

zset

在线积分的排行榜,可以实时更新用户的分数。zrange命令获取积分top10的用户。zrank命令通过username来获取用户的排行信息。

创建:

zadd myzset 1 one

添加:

zadd myzset 2 two 3 three

查看

加withscores 才显示权重

zrange myzset 0 -1 withscores

查看元素的排名:

zrank myzset one

查看集合有多少元素

zcard myzset

统计权重范围之内元素的个数:

zcount myzset 1 3

删除成员

zrem myzset three

查看元素权重:

zscore myzset two

set和hset 创建普通类型和hash类型,怎么选择?

一般情况下,如五特殊需求,普通的创建方式即可

对一个键进行多字段存储,节省内存,使用hash方式。

如何对key进行重命名

rename test chen

查看当前库中的键值对数:

dbsize

redis的库 库都是创建好的,16个库

数字排名:0-15

切换库

select 1

把当前库移到其他库中

move test 1

如何给库创建密码:

config set requirepass 123456

再次进入不加密码看不了数据

在内进入

auth 123456

在外进入加 -a 123456

redis-cli -h 192.168.176.71 -p 6379 -a 123456

如何情况库数据

flushdb:情空当前库(不要用,慎用)

flushall:清空全部库(不要用,慎用)

总结:

redis的特点:读写速度快。

数据类型:

1,string

2,list

3,hash 对一个键进行多字段存在要用hash节省空间

4,无序集合 set 元素不能重复,可以用来定义唯一值

5,有序集合 zset,元素不能重复,但是权重可以相同,用来排名

相关推荐
大熊猫侯佩17 分钟前
使用令牌(Token)进一步优化 SwiftData 2.0 中历史记录追踪(History Trace)的使用
数据库·swift·apple
网安小张33 分钟前
解锁FastAPI与MongoDB聚合管道的性能奥秘
数据库·python·django
老兵发新帖1 小时前
Flyway
数据库
薛晓刚1 小时前
一次Oracle的非正常关闭
数据库
文牧之1 小时前
Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数
运维·数据库·oracle
平行绳1 小时前
零基础玩转 Coze 数据库,看这篇就够了!
数据库·人工智能·coze
NineData2 小时前
NineData云原生智能数据管理平台新功能发布|2025年5月版
数据库·云原生·oracle·devops·ninedata
不会编程的猫星人2 小时前
Oracle杀进程注意事项
数据库·microsoft·oracle
GUIQU.2 小时前
【Oracle】安装单实例
数据库·oracle
老胖闲聊2 小时前
Python Django完整教程与代码示例
数据库·python·django