赞
踩
Redis为键值型数据库,数据以键值形式存储。没有表,没有约束。
mysql就是典型的关系型数据库(SQL)。
目的都是数据的增删改查,但数据存储方式不一样。
关系型和非关系型在结构上有差异
关系型的结构一般定好后就很少修改,非关系型的就更加自由
关系型数据库的关系体现如下,不同表可以通过外键进行联系
非关系型数据库因为没有表,所以像下面记录一个用户下的订单需要通过json嵌套的形式
查询方面差异
关系型数据库都可以使用同一套SQL语句进行查询,NoSQl的查询语法不统一,不同的NoSQl数据库有不同的语法
事物上的差异
关系型数据库的事物有ACID特性: 原子性,一致性,隔离性,持久性
NoSQl数据库要么无事务,要么就是只能做基本的一致性,ACID无法全部满足,只有BASE性:系统能够基本运行,一直提供服务
速度差异:磁盘读写速度远慢于CPU速度,因此存在内存中的NoSQl速度很快。
因为redis官方没有提供windows版本(但听说github上有),只有liunx,所以这里有两种选择,一是在本地安装虚拟机跑redis,而是在云服务器跑redis
这里我选择在云服务器装redis, 官方也有提供redis的docker镜像
这里首先在云服务器上使用如下命令拉取redis镜像
docker pull redis
拉取速度慢的话可以换源,可以看下面这个博主的文章,建议换阿里的源,快的不是一点半点
docker 换镜像源以解决拉取镜像速度慢的问题_dock拉取镜像很慢_farkuai的博客-CSDN博客
然后用镜像创建一个容器
docker run -d -p 6379:6379 --name myredis redis
用docker ps -a 看容器的id
docker ps -a
然后用以下命令打开redis服务
docker exec -it 容器的id redis-cli
然后就可以直接使用一个软件进行连接了,不需要管配置文件那些什么的,更不需要文件夹映射什么的
这里拉取容器下来的redis默认是没有密码的,所以可以直接用服务器+端口后进行连接
为了安全起见,还是要先修改密码。
- //使用如下命令查询信息
- config get requirepass
-
- //使用如下命令修改密码
- config set requirepass password
-
- //使用如下命令确认密码,否则报错
- auth password
-
- //再次查看密码
- config get requirepass
设置完密码之后的每次登陆都要带上密码,否则能进去但不能使用命令
docker exec -it b66f2d4fb5b3 redis-cli -a 234799
连接成功时界面是这样的
这里默认有16个仓库,可以通过以下语句选择哪一个仓库
- # 选择 0号库
- select 0
- #查看相关命令的信息
- help commad
-
-
- #查询所有的key
- keys *
- #查询所有以n开头的key
- keys n*
- #查询所有带有n的key
- keys *n*
-
- //类似sql的模糊查询
-
-
- #删除指定的key
- del key
- #删除多个key
- del k1 k2 k3 k4 #实际删除多少个就会返回多少个
-
- //只能指定key后删除
-
-
- #判断key是否存在
- exists k1 k2 #返回值是存在的key的数量
-
-
- #给一个key设置有效期,到期就会删除,因为redis在内存存储,不删的话会爆内存
- expire key 20 #20s有效期
-
-
- #查看一个key的有效期
- ttl key #返回剩余秒数
- 返回-1则是永久有效
甚至可以把图片变成字节流存在redis里面
- #设置三个键值对 k1:v1 ....
- mset k1 v1 k2 v2 k3 v3
-
- #获取多个key的值
- mget k1 k2 k3
-
- #返回值是自增后的结果
- incr age
-
- #让age每次自增-2
- incrby age -2
-
- #浮点数自增0.5
- incrbyfloat age 0.5
-
- #如果不存在才增加,可以有效防止覆盖
- setnx age 2
- set age 2 nx #效果相同
-
- #添加一个key=5并设置有效期为10
- setex age 10 5
- set age 5 ex 10
- //可以覆盖已有的key,相当于set和expire组合
使用如下的四条语句设置4条数据
- set itheima:user:1 '{"id":1, "name":"Jack", "age": 21}'
-
- set itheima:user:2 '{"id":2, "name":"Rose", "age": 18}'
-
- set itheima:user:3 '{"id":1, "name":"小米11", "price": 4999}'
-
- set itheima:user:4 '{"id":2, "name":"荣耀6", "price": 2999}'
然后在图形界面客户端可以看见有如下层级
类比就是map<String,map>,套娃
hmset已经弃用,使用hset可以达到hmset效果
hdel :删除一个key下面指定的field和values
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。