redis是什么
redis是非关系数据库的一种,也称为缓存型数据库。
非关系型数据库和关系型数据库
(1)数据的存储方式不同
关系型数据库和非关系型数据库的主要区别就在于数据的存储方式
(2) 扩展方式
(3) 对事务的支持性能不同
关系型数据库:特别适合高事务性要求和需要控制执行计划的任务,事务处理更加精细。
非关系型数据库:事务控制会稍显弱势,其价值点在于高扩展性和大数据量处理方面。
1.操作的扩展性
2.大数据量处理
关系型数据库:
非关系型数据库
非关系型数据库工作示意图:

redis的相关知识
开源的,使用c语言编写的NQL数据库。
redis:基于内存运行,支持持久化(数据恢复)。采用的就算key-value(键值对)的存储形式。目前在分布式架构中是非常重要的一环


1.redis是一个纯内存结构,避免磁盘I/O的耗时
2.核心模块是一个单进程,减少了线程切换和回收线程的时间。
3.I/O的多路复用机制,每一个执行线路,都可以同时执行读和写。并发效率大大提高。
*特殊说明:redis的读写任然是单进程处理
redis的部署和安装
- 关闭防火墙
- systemctl stop firewalld
- setenforce 0
-
- 安装编译环境
- yum install -y gcc gcc-c++ make
-
- 将安装包拖入/opt,然后解压
- tar zxvf redis-5.0.7.tar.gz -C /opt/
-
-
- cd /opt/redis-5.0.7/
- make
-
- make PREFIX=/usr/local/redis install
-
- #执行软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件
- cd /opt/redis-5.0.7/utils
- ./install_server.sh
-
- ...... #一直回车
- Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server
- #需要手动修改为 /usr/local/redis/bin/redis-server ,注意要一次性正确输入
-
-
- #把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
- ln -s /usr/local/redis/bin/* /usr/local/bin/
- #当 install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认监听端口为 6379
- netstat -natp | grep redis
#Redis 服务控制
/etc/init.d/redis_6379 stop #停止
/etc/init.d/redis_6379 start #启动
/etc/init.d/redis_6379 restart #重启
/etc/init.d/redis_6379 status #状态
- vim /etc/redis/6379.conf
- bind 127.0.0.1 192.168.233.10 #70行,添加 监听
- wq
-
- 重启服务
- /etc/init.d/redis_6379 restart
Redis 命令工具
redis-server:用于启动 Redis 的工具
redis-benchmark:用于检测 Redis 在本机的运行效率
redis-check-aof:修复 AOF 持久化文件
redis-check-rdb:修复 RDB 持久化文件
redis-cli:Redis 命令行工具
语法:redis-cli -h host -p port -a password
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库
redis-cli -h 192.168.233.21 -p 6379 -a 123456
redis五大字符串详解
概述:String是 redis 最基本的类型,最大能存储 512MB 的数据,
String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
- set:存放数据,命令格式为 set key value
- get:获取数据,命令格式为 get key
- keys * 查看有多少键
-
- 20.0.0.170:6379> set stu zzr
- OK
- 20.0.0.170:6379> get stu
- "zzr"
- 20.0.0.170:6379>

set可以创建键,也可以直接覆盖键值

- 20.0.0.170:6379> set stu zzr
- OK
- 20.0.0.170:6379> get stu
- "zzr"
- 20.0.0.170:6379> set stu 100
- OK
- 20.0.0.170:6379> get stu
- "100"

- 20.0.0.170:6379> KEYS *
- 1) "test1"
- 2) "test"
- 3) "stu"
- 20.0.0.170:6379> del test1 test
- (integer) 2
- 20.0.0.170:6379> KEYS *
- 1) "stu"

- 20.0.0.170:6379> type stu
- string
![]()
- 20.0.0.170:6379> KEYS *
- 1) "stu"
- 20.0.0.170:6379> type stu
- string
- 20.0.0.170:6379> append test hello
- (integer) 5
- 20.0.0.170:6379> KEYS *
- 1) "test"
- 2) "stu"
- 20.0.0.170:6379> get test
- "hello"
- 20.0.0.170:6379> append test world
- (integer) 10
- 20.0.0.170:6379> get test
- "helloworld"


(如果键不存在,则从0开始递减)

- setex key seconds value:设置指定key的过期时间为seconds
- 20.0.0.170:6379> setex test 15 hello
- OK
- 20.0.0.170:6379> ttl test1
- (integer) -2
- 20.0.0.170:6379> ttl test
- (integer) 5
- 20.0.0.170:6379> ttl test
- (integer) 4
- 20.0.0.170:6379> ttl test
- (integer) 3
- 20.0.0.170:6379> ttl test
- (integer) 3
- 20.0.0.170:6379> ttl test
- (integer) 2
- 20.0.0.170:6379> ttl test
- (integer) 2
- 20.0.0.170:6379> ttl test
- (integer) 1
- 20.0.0.170:6379> ttl test
- (integer) 0
- 20.0.0.170:6379> ttl test
- (integer) -2
- 20.0.0.170:6379> ttl test
- (integer) -2
- 20.0.0.170:6379> ttl test
- (integer) -2
-2表示当前键值对已过期
-1表示永不过期


- 20.0.0.170:6379> del stu #删除该键,以便于下面的测试验证。
- (integer) 1
- 20.0.0.170:6379> setnx stu "hello" #该键并不存在,因此setnx命令执行成功。
- (integer) 1
- 20.0.0.170:6379> get stu
- "hello"
- 20.0.0.170:6379> setnx stu "123" #该键已经存在,因此本次设置没有产生任何效果。
- (integer) 0
- 20.0.0.170:6379> get stu #从结果可以看出,返回的值仍为第一次设置的值。
- "hello"

MSET key value [key value …]:批量设置键-值对
MGET key [key …]:批量获取键值对
- 20.0.0.170:6379> mset test 123 test2 234
- OK
- 20.0.0.170:6379> KEYS *
- 1) "test"
- 2) "test2"
- 3) "stu"
- 20.0.0.170:6379> mget test test2
- 1) "123"
- 2) "234"

列表当中的元素还是string类型。
LPUSH key value [value …]在头部(左侧)依次插入列表元素
LPUSHX key value:键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量
LRANGE key start stop:取从位置索引start到位置索引stop的所有元素(所以以0开始)
- 20.0.0.170:6379> LPUSH zzr a b c d 1 2 3
- (integer) 7
- 20.0.0.170:6379> LRANGE zzr 0 -1
- 1) "3"
- 2) "2"
- 3) "1"
- 4) "d"
- 5) "c"
- 6) "b"
- 7) "a"
- 20.0.0.170:6379> LRANGE zzr 1 3
- 1) "2"
- 2) "1"
- 3) "d"

0代表第一个,-1代表最后一个(这里序号排列和数组下标一致)

但lpush创建的元素与所查看的顺序相反,如果想要顺序一致,可以使用rpush命令
- 20.0.0.170:6379> rpush zzr1 1 2 3 a b c d
- (integer) 7
- 20.0.0.170:6379> LRANGE zzr1 0 -1
- 1) "1"
- 2) "2"
- 3) "3"
- 4) "a"
- 5) "b"
- 6) "c"
- 7) "d"

l---从左(上)往右添加
r---从右(下)往左添加
- 20.0.0.170:6379> lpush zzr1 10
- (integer) 8
- 20.0.0.170:6379> LRANGE zzr1
- (error) ERR wrong number of arguments for 'lrange' command
- 20.0.0.170:6379> LRANGE zzr1 0 -1
- 1) "10"
- 2) "1"
- 3) "2"
- 4) "3"
- 5) "a"
- 6) "b"
- 7) "c"
- 8) "d"
- 20.0.0.170:6379> rpush zzr1 100
- (integer) 9
- 20.0.0.170:6379> LRANGE zzr1 0 -1
- 1) "10"
- 2) "1"
- 3) "2"
- 4) "3"
- 5) "a"
- 6) "b"
- 7) "c"
- 8) "d"
- 9) "100"


- 20.0.0.170:6379> LPOP zzr1
- "10"
- 20.0.0.170:6379> LRANGE zzr1 0 -1
- 1) "1"
- 2) "2"
- 3) "3"
- 4) "a"
- 5) "b"
- 6) "c"
- 7) "d"
- 8) "100"
- 20.0.0.170:6379> RPOP zzr1
- "100"
- 20.0.0.170:6379> LRANGE zzr1 0 -1
- 1) "1"
- 2) "2"
- 3) "3"
- 4) "a"
- 5) "b"
- 6) "c"
- 7) "d"

- 20.0.0.170:6379> lset zzr1 3 www
- OK
- 20.0.0.170:6379> LRANGE zzr1 0 -1
- 1) "1"
- 2) "2"
- 3) "3"
- 4) "www"
- 5) "b"
- 6) "c"
- 7) "d"

- 20.0.0.170:6379> LINSERT zzr1 before 3 aaa
- (integer) 8
- 20.0.0.170:6379> LRANGE zzr1 0 -1
- 1) "1"
- 2) "2"
- 3) "aaa"
- 4) "3"
- 5) "www"
- 6) "b"
- 7) "c"
- 8) "d"

hash类型用于存储对象,采用hash格式来进行操作。占用的磁盘空间少,而且一个hash可以存储4294967295个键值对
- 20.0.0.170:6379> hset zzr2 tall 190
- (integer) 1
- 20.0.0.170:6379> hget zzr2 tall
- "190"
- 20.0.0.170:6379> hset zzr2 face smart
- (integer) 1
- 20.0.0.170:6379> hmget zzr2 tall face
- 1) "190"
- 2) "smart"

- 20.0.0.170:6379> hset zzr2 age 21
- (integer) 1
- 20.0.0.170:6379> hdel zzr2 tall face
- (integer) 2
- 20.0.0.170:6379> hmget zzr2 tall face age
- 1) (nil)
- 2) (nil)
- 3) "21"

- 20.0.0.170:6379> hmset zzr3 tall 180 stu 123 score 90
- OK
- 20.0.0.170:6379> hgetall zzr3
- 1) "tall"
- 2) "180"
- 3) "stu"
- 4) "123"
- 5) "score"
- 6) "90"

- 20.0.0.170:6379> hgetall zzr3
- 1) "tall"
- 2) "180"
- 3) "stu"
- 4) "123"
- 5) "score"
- 6) "90"
- 20.0.0.170:6379> HKEYS zzr3
- 1) "tall"
- 2) "stu"
- 3) "score"

所有值
- 20.0.0.170:6379> hvals zzr3
- 1) "180"
- 2) "123"
- 3) "90"

删除方式还是del
set数据类型(无须集合)元素类型也是string。元素是唯一的,不允许重复。多个集合类型可以进行并集,交集,差集进行运算。
set当中的元素类型是唯一的,可以根据一些唯一性的数据。比如访问微博的用户名,只要把对应名称写入redis,set集合会自动保存唯一性,方便下一次访问。
- 20.0.0.170:6379> sadd myset a a c
- (integer) 2
- 20.0.0.170:6379> SMEMBERS myset
- 1) "a"
- 2) "c"

不能重复,所以只保存2个
- 20.0.0.170:6379> SMEMBERS myset
- 1) "a"
- 2) "c"
- 20.0.0.170:6379> SISMEMBER myset c
- (integer) 1
- 20.0.0.170:6379> SISMEMBER myset f
- (integer) 0

- 20.0.0.170:6379> spop myset
- "c"
- 20.0.0.170:6379> spop myset
- "a"

- 20.0.0.170:6379> sadd myset a b c d e f g
- (integer) 7
- 20.0.0.170:6379> SRANDMEMBER myset
- "e"
- 20.0.0.170:6379> SRANDMEMBER myset
- "g"
- 20.0.0.170:6379> SRANDMEMBER myset
- "b"

- 20.0.0.170:6379> SMEMBERS myset
- 1) "a"
- 2) "d"
- 3) "e"
- 4) "b"
- 5) "c"
- 6) "f"
- 7) "g"
- 20.0.0.170:6379> srem myset a b c
- (integer) 3
- 20.0.0.170:6379> SMEMBERS myset
- 1) "d"
- 2) "e"
- 3) "f"
- 4) "g"

有序集合,元素类型也是string,元素唯一,不能重复。
每个元素都会关联一个double(小数点)的分数(score,表示权重),可以通过权重的大小进行排序。元素的权重可以相同
zset:可以运用在一些 在线积分的排行榜,可以实时更新用户的分数和排名。
zrange命令获取比如积分top10的用户
zrank命令通过用户的名称来获取玩家的信息。按照权重来排列
权重是1,元素是one
- 20.0.0.170:6379> zadd myzset 1 one
- (integer) 1
- 20.0.0.170:6379> ZRANGE myzset 0 -1 withscores
- 1) "one"
- 2) "1"
- 20.0.0.170:6379> ZRANGE myzset 0 -1
- 1) "one"
加withscores显示权重,不加只显示元素

无序集合一样,0为第一位
- 20.0.0.170:6379> zrank myzset one
- (integer) 0
- 20.0.0.170:6379> zrank myzset two
- (integer) 1
- 20.0.0.170:6379> zrank myzset three
- (integer) 2

- 20.0.0.170:6379> zcount myzset 1 2
- (integer) 2
- 20.0.0.170:6379> zcard myzset
- (integer) 3

- 20.0.0.170:6379> zscore myzset two
- "2"

set和hset 创建普通类型和hash类型,一般情况下,如无特殊需求,普通的创建方式即可
对一个键进行多字段存储,节省内存,使用hash方式。
如何对已有keys重命名
重命名之后,内部值不变

当前库 键的数量

redis的库 都是创建好的,16个库
数字排名 0-15 每个数据库之间互相独立,互补干扰
select用来切换库

move移动数据,移动之后,原先的库数据就没了,转移到新库

设置密码
auth 123456 在内声明

在外声明-------端口后 -a 密码

删除库--使用注意,缝纫机警告⚠!!!!!
删除当前库

flushall-----删除所有库
缝纫机警告⚠
