一篇搞定学会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高可用✔集群✔搭建详细教程

计算机组成原理❤万字长文❤一篇搞定计组(持续更新中...)

微信小程序开发学习文档(万字总结,一篇搞定前端开发)

硬核整理四万字,学会数据库只要一篇就够了,盘它!MySQL基本操作以及常用的内置函数汇总整理

计算机操作系统❤万字长文❤一篇搞定计操(持续更新中...)

⭐万字长篇超详细的图解Tomcat中间件方方面面储备知识⭐ #yyds干货盘点#