一篇搞定学会Redis基本使用(万字长篇)
Posted HUTEROX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇搞定学会Redis基本使用(万字长篇)相关的知识,希望对你有一定的参考价值。
前言
和slq语句比起来,这个redis数据库的操作有手就行,当然你要跟我扯实际的项目运用所带来的复杂度,那完全就是在抬杠。
当前演示环境为Windows的phpstudy所搭建的环境,具体的操作与Linux一致,可能启动有所差异,但是都会说明。
redis 是一个NoSQL数据库,其操作不想SQL数据库,但是使用起来是更简单的,适合做高速缓存服务。采用单线程+异步I/O来实现高速的读取(在python里面其实就是协程(微线程)的意思,python里面没有流这种概念,但是有类似概念)
服务启动
Windows环境下
在phpstudy里面直接电器启动就OK了,但这个是默认启动
具体的其实也可以查看配置文件
你要是没有相关环境的话,或者是为了方便操作的话,可以先直接使用这个工具,mysql的也有,好处就是不用你自己在Windows里面安装,你只需要配置个环境变量即可,而且也不太建议在生活系统(win里面安装数据库服务)
linux环境下
在前面的话我们看见了,在那里有配置文件,其实我们在Linux里面或者在windows的命令模式下启动也可以手动指定配置文件启动。
接下来介绍一下启动方式
默认启动
redis-server > redis.log & 放后台定向输入到日志
systemctl start redis-server 直接后台,而且方便管理
带入参数,指定端口,数据库数量等等
redis-server --port 1024 端口指定
systemctl start redis-server --port 1024
systemctl start redis-server --databases 32 指定数据库数量
systemctl start redis-server --port 1024 --databases 32多个指定
读取配置文件启动
这个按照你自己的需要写一个配置文件
redis-server xxx.config
systemctl start redis-server xxx.config
例如:
systemctl start redis-server /home/huterox/redis/mystart_redis.config
设置口令启动
为了保护安全的话,在启动的时候还可以设置密码
systemctl start redis-server --requirepass yourpasswd
我这个是模拟一下,你要是真的在windows里面的phpstudy 环境下的话直接这样
服务器关闭
这个方法就多了,那么演示一下怎么在redis里面关闭吧
quit 这个指令关闭redis-cli
shutdown 关闭 redis-server
shutdown
quit
这就关了
服务连接
连接的话我们需要使用到一个玩意就是
redis-cli这个东西进行连接到我们的数据库,然后进行操作。
systemctl start redis-cli
或者直接
redis-cli
这个都是默认的连接本机的啊
redis-cli -h 主机地址 -p 对方端口
当你连接进去后,如果开启时设置了密码
那么输入:
auth yourpasswd
之后你就可以正常操作了。
查看服务性能
这个就是一个简单的服务检测
使用redis-benchmark就好了 crtl+c停止
1.75秒10w这个性能还是可以的(鄙人设备,戴尔G5还是可以的,千万别买单背光的,我脑子当时秀逗了,外星人灯控白搭了),买的云服务器就不知道喽。
数据库指令
数据库相关指令
由于我们这个是键值对数据库,所以基本上没有比较复杂的语句,更多的是指令,通过指令来操作数据库。
选择数据库
select 数据库编号(0开始)
查看数据库的存储了几个数据
dbsize
keys *
这里先简单存入几个数据
set name jack
set age 20
随机返回一个key,这玩意是内置的一个方法指令,有点意思
清空数据(分两种,一个全清空,一个清除当前数据库的)
flushdb 清空当前数据库
flushall 全部
下面举个例子:
(1)切换数据库(插入一些数据)
(删除当前)
(全部删除)
删除建
del key
保存到本地
如果要数据保存到本地永久化的话,在默认情况下,要么在60s内有1W加的数据存储到内存中,要么这条数据在900s内还在内存中,否则不会自动保存,如果要保存的话,那么使用save或者bgsave
save保存
这个直接保存
bgsave后台保存
如果卡住了的话那么使用这个。
存取指令
这里补充一下,type key 可以查看数据类型
对String的操作
set/get
set keyname values
get keyname
获取与读取数据
切片操作
getrange key 1 3
[1,3]
追加操作
append key xxx
setnx/setex
setnx 这玩意是指,当键值对存在时,不加入(也就是不改变原来的数据)
不存在就加入。
没有加入返回0
setex是值设置存在时间,例如验证码,超过60秒后就消失了
这个指令还能这样写
set key hello ex 60
60s后就没了
mset/mget一次输入/获取多个值
mset stu1 jack stu2 jerry
hash类型的操作
这个hash类型是个什么玩意呢,最简单的样子就是类似于我们python里面的字典,前面加个h就是了,操作和那个字符串的类似
hset/hget
这个呢,都是只能存入和获取其中一个key
现在举个例子(这是一个python字典)现在我把它存进去
jack={'name':jack,'age':10,'heigh':185}
这个呢只能一个一个来,那么前面hmget/set就可以多个
多个属性赋值
hmset jack name jack age 10 heigh 185
获取属性值
hmget jack name age heigh
获取key的所有值
hkeys jack
获取key对应的属性的值
hvals jack
获取所有
hgetall jack
删除某个属性
现在我加入一个新的元素在Jack里面
hset jack s s
现在我要删除
修改属性其实也很简单,直接在原来的属性修改就行了,例如改名字为Jerry
hset jack name jerry
列表类型
这个就更简单了。
但是这里的话分为左右,也就是顺序和逆序。
lpush /lrange
一个是往左放入,一个是往左开始读取。看效果
所以除此之外还有
rpush 这个就是你可以认为的顺序
删除
lrem list 1 30
1是指删除1个从左到右,-1反之 30删去30,有时候会出现多个元素。
lpop list 删除——删的同时,把值返回从左开始
linsert插入
linsert list before/after 50 7
索引查值
lindex list 0(从0开始 -1结尾最后一个)
llen list ——返回列表的长度
集合类型(无序)
添加/取值(sadd/smembers)
(查看个数
)
集合运算
交集
sinter a b
并集
sunion a b
差集
sdiff a b (a差b)
集合成员指令
查看元素是否在集合当中
sismember set1 80
判断80在不在 ? 1 0
删除集合元素
这个集合是无序,直接来个pop删除
spop set1 2
随机删除2个
srem set1 30
删除指定的,可以删除多个
集合类型(有序)
这里的话就简单说一下吧,这玩意可以做一个在线的排行榜。
添加与取值
zadd phb 100 A 50 B 40 C
zrange phb 0 -1
按照前面的值排序默认从小到大
zrevrange phb 0 -1 反之
值的增加
把C加70然后看结果
zincrby phb 70 C
再加一个D
删除元素
删除指令
其他类型
在redis 当中还有很多类型,例如与地理位置的相关的操作等等
更多文档类型建议去redisdoc.com 查询
基本使用是类似的。
Python对Redis的操作
这个我比较满意的就是,在redis的第三方库当中的所有方法其实就是Redis的操作指令,举个简单的例子。
import redis
red = redis.Redis(host='localhost', port=6379, decode_responses=True)
# host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379
red.set('name', 'junxi') # 等价 set name jack
print(red['name'])
print(red.get('name')) # get name
print(type(r.get('name')))
这里说明一下在redis里面存储的数据是bytes所以有中文的情况下是需要编码的,decode_reponses=True
通过这个例子一目了然,如何使用python进行操作。只是有时候需要对返回值进行适当的调整。
Redis 主从复制分离
这玩意说句人话就是,一个主机负责读写,其他的设备协助主机只具备读的功能,也就是相当于实时同步了主机的数据,这样一来就可以通过访问这些设备来拿到主机当中也有的数据(只有主机master才能够写入数据其他的设备salve是只能读取的)
主机查看命令
info replication 查看有几个奴隶机器
奴隶(salve)机器指令
开启奴隶,为master主机服务
salveof host port
masterauth 主机口令
如果失败的话可以关闭然后重启
redis-server --salveod host port --masterauth 口令
查看情况也可以用info
info replication
关闭
salve of no one
Redis 失败启动的常见解决方案
rdb文件修复
在你的安装目录下会有这么个文件。在Linux也一样
这个文件主要是用来记录数据的,也就是从内存把数据存到本地,如果这个文件损坏那么自然无法启动。下面两个方案
一。删了这个文件,重来。
二。执行修复指令
redis-check-rdb dump.rdb
aop 修复
在存储数据到本地有两种方式,一个是把数据存到本地,还有一个那就是直接把你的指令存到本地,启动的时候重新执行你的指令恢复数据。
redis-server --appendonly(文件名随意) yes
修复
redis-check-aop --fix appendonly.aop
这个其实在你的目录下是找得到的。在Linux也一样
对了,在这里那个
redis-check-rdb 在win这不一样,上面是redis-check-dump但是用法应该是一样的。
总结
在redis的基本使用,排错大概是这个样子的,关于数据类型那个比较多,建议去查官方文档,这里罗列出了较为常见的使用和方法。当然后面也会不断更新。
以上是关于一篇搞定学会Redis基本使用(万字长篇)的主要内容,如果未能解决你的问题,请参考以下文章
❤️万字长文总结❤️一篇学会Redis高可用✔集群✔搭建详细教程