摘要:Redis 学习笔记
Redis 快速入门
Redis属于非关系型数据库
SQL应用场景
- 数据结构固定
- 相关业务对数据安全性一致性要求高
NoSQL应用场景
- 数据结构不固定
- 对一致性,安全性要求不高
- 性能要求高
🎯需要使用Xftp 传输压缩包到虚拟机上
安装好Redis后,
执行命令redis-server选择一个特定的执行目录,日志、持久化文件等都会保存在这个目录里面
将redis在后台运行
修改redis配置文件 redis.conf
(在正常模式输入 /想要查找的配置)
监听地址:bind 0.0.0.0
守护进程:daemonize yes
密码:设置后访问Redis必须输入密码
requirepass:123321
其他的配置
数据库数量默认有16个库,编号是0-15
database:1 代表只使用一个库设置Redis能够使用的最大内存
maxmemory 512mb日志文件,默认为空,不记录日志,可以指定日志文件名
logfile “redis.log”
在安装目录下,执行
redis-server redis.conf
查看是否启动成功
ps -ef | gref redis
杀死进程
kill -9 进程号
为了开启redis方便
开机自启
创建一个新文件
vi /etc/systemd/system/redis.service
添加内容:
内容如下:
[unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-7.2.4/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重载系统服务:
systemctl daemon-reload
此时redis正在被我们的系统管理
启动redis:
systemctl start redis
查看状态:
systemctl status redis
停止redis:
systemctl stop redis
重启redis:
systemctl restart redis
启动开机自启:
systemctl enable redis
redis客户端
位置 /usr/local/bin
redis命令行客户端
在我们安装redis 的时候已经安装了 redis-cli
启动:
redis-cli [option] [commonds]
常见的option
- -h redis连接的IP地址 127.0.0.1 不输入默认是本机地址
- -p 6379 :指定端口,不输入默认是6379
- -a 123321 : 指定密码
进入客户端不输入密码
使用命令输入密码
AUTH 123321
连接成功
输入ping 响应PONG 表示连接成功
默认使用的库是db0
可以简单的设置
set name john
set age 21
get name
get age
切换库 :select 库序号(0-15)
redis常见命令
基本类型:
String
Hash
List
Set
SortedSet
特殊类型:后面讲
GEO
BitMap
Hyperlog
官方文档: https://redis.io/
命令行方式查看通用命令文档
进入redis命令行客户端
help @generic
通用命令
常见命令 当个命令的使用范围是在一个库里面
KEYS 查看符合模板的所有key;不能在生产环境下使用,底层使用模糊查询,会导致redis阻塞
DEL 删除一个指定的key,可以一起删除多个key,删除成功返回对应删除的个数
EXISTS 判断key是否存在,可以批量查看;存在返回值大于0,不存在返回0
EXPIRE 给对应key添加过期时间,单位是秒
TTL 查看对应的key剩余的存在时间,返回值为-2表示已经不存在,返回值为大于0,表示仍然存在大于0秒的时间
当我们没有给键 设置过期时间,这个键就是永久的,使用ttl查看返回-1,表示的就是永久
数据结构
由于我的虚拟机不是使用超级管理员root登录的,而是自己创建的账号redis
进入超级管理员的命令是 su - 并且输入密码即可
全部可以通过帮助文档找到 help @string
String类型
string 类型的数据结构底层都是 字节数组
字符串类型的最大空间不能超过512m
string类型中,为了存储空间的容量,格式还分为string,integer,float
string是正常的字符串类型
integer和float是数值类型,数值类型有自增自减的功能
string类型的常用的命令:
- set:如果key存在,则是修改的功能
- get:获取
- mset:批量添加或者修改 k1 v1 k2 v2
- mget:批量获取
- incr:数值类型比如int,让一个整型key 自增1
- incrby:数值类型让一个整型的key 指定自增的值;实现自减,指定的值为负数即可
- incrbyfloat:浮点类型的数据进行 自增的操作,每次定义自增的步长
- setnx:相比于set不存在相同的数据,真正表示新增,如果key存在,不生效
- setex:新增并且添加有效期 参数:key seconds value
redis 操作的都是对key 进行操作,进而影响到value
key的层级格式
⭐问题:redis没有mysql表的概念,所有当我们进行不能数据的存储的时候,可能会出现冲突,比如id冲突
解决的方法
在redis中,key可以进行层级的命名 []:[]:[]
比如 公司:组名:键;或者是 【项目名】:【业务名】:【类型】:【id】
就可以实现分层次,不会产生冲突
key
user:name:1
value
{
“name”:”ylx”,
“age”:”21”
}
value 对于Java对象来说,可以将对象json化之后,就可以存储到redis中
hash类型
优点:对比string 如果values要进行修改,可以单独对value中其中一个field进行修改,而string没有办法进行对value中的值进行当个修改,更加灵活。
常见命令
hset 和 hmset 用法一致
总结:
- hset 命令和hmset 命令一样,可以为单个Key 批量添加多个 field和value
- hget 命令和 hmget命令则不是一样的,hget只能获取到一个字段,hmget可以批量获得
- hgetall 获取field和value;hkeys 获取field; hvals 获取value
- hsetnx 添加一个key 的 field字段,前提是这个field字段不存在,否则添加不成功