一篇搞定学会redis基本使用(万字长篇)(代码片段)

HUTEROX HUTEROX     2022-12-15     396

关键词:

前言

和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高可用✔集群✔搭建详细教程(代码片段)

大家好,我是Lex喜欢欺负超人那个Lex擅长领域:python开发、网络安全渗透、Windows域控Exchange架构今日重点:今天总结一下Redis集群高可用的搭建流程【惊喜推荐+优质资源见文末,建议收藏!!!】建... 查看详情

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

 目录第一章:计算机系统概述:计算机的发展:计算机硬件的基本组成:早期冯诺依曼机结构:现代计算机的结构: 总结: 各个硬件的工作原理: 主存储器的基本组成: 运算器的基本组... 查看详情

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

🧡💛💚💙💜🤎💗🧡💛💚💙💜🤎💗感谢各位一直以来的支持和鼓励,制作不易🙏求点赞👍➕收藏⭐➕关注✅一键三连走起来!!!🧡 查看详情

一篇搞定git基本使用(代码片段)

文章目录GitHub与Git的基本关系GitHub仓库创建分支拉去请求ForkGit工具安装Git大致控制流程本地操作创建本地仓库添加文件到暂存区将暂存区的文件拉到本地工作目录版本切换在Github上的操作下载代码仓库到本地更新远程仓库注意... 查看详情

一篇搞定redis6(完整版)(代码片段)

作者:Mrwhite86| 来源:urlify.cn/qYZRZr一、Nosql与Redis概述1、Nosql的优势(1)使用nosql解决cpu与内存压力(2)使用nosql解决I/O压力2、Nosql数据库的概述(1)NoSql=NotOnlySQL(2 查看详情

万字长文|十大基本排序,一次搞定!(代码片段)

✨算法系列文章推荐:LeetCode通关:听说链表是门槛,这就抬脚跨门而入面试刷算法,这些api不可不知!LeetCode通关:数组十七连,真是不简单LeetCode通关:连刷三十九道二叉树,刷疯了!大... 查看详情

万字长文|十大基本排序,一次搞定!(代码片段)

✨算法系列文章推荐:LeetCode通关:听说链表是门槛,这就抬脚跨门而入面试刷算法,这些api不可不知!LeetCode通关:数组十七连,真是不简单LeetCode通关:连刷三十九道二叉树,刷疯了!大... 查看详情

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

目录第一章:操作系统概述:操作系统概述:​ 操作系统的四个特征:并发:第一章:操作系统概述:操作系统概述:        操作系统(operatingsystem,简称OS)是管理计算机硬件与... 查看详情

一篇帮你搞定jvm基本概念(超详细)(代码片段)

一、整体框架二、核心知识学习基本概念(1)定义JVM:Javavirtualmachine,即Java虚拟机;是可运行Java代码的假想计算机,包括一套指令集、一组寄存器、一个栈、一个垃圾回收、堆和一个存储方法域。JVM运行OS之... 查看详情

kotlin协程万字协程一篇完成kotlin协程进阶(代码片段)

kotlin协程进阶协程简介一、协程的基本使用1.1、runBlocking启动1.2、GlobalScope.launch启动1.3、GlobalScope.async启动1.4、三种启动方式的说明二、Coroutine源码解析2.1、CoroutineContext2.2、Job源码2.3、Job的常用函数2.4、SupervisorJob三、suspend关键... 查看详情

猿创征文|13万字学会spring+springmvc+mybatis框架(代码片段)

目录Spring介绍Spring是什么Spring发展历程Spring优势Spring的体系结构  Spring快速入门Spring程序开发步骤idea中快速入门 Spring配置文件Bean标签基本配置Bean标签范围配置 无参构造创建时机Bean生命周期配置 Bean实例化三种方式  Bean的... 查看详情

c语言实现入门级小游戏——三子棋(万字长篇)(代码片段)

     今天博主将为大家带来C语言入门级小游戏——三子棋(井字棋)的详细介绍,希望这篇文章对大家能有帮助 。    在编程的学习过程中,编写一些中这样的小游戏,是非常有乐趣的事情,完成之... 查看详情

springboot一篇搞定(cookiesession跳转内容协商converter解析器thymeleaf)(代码片段)

文章目录Cookie处理设置cookie获取cookie删除Cookie小结Session处理作用域Request参数设置页面跳转通过Response通过Request内容协商Json返回XML返回基本原理说明自定义类型转换器通过特定参数获取返回类型参数解析原理解析示例自定义解析... 查看详情

猿创征文|万字长文搞定企业中的mysql数据库部署及使用(代码片段)

文章目录Mysql二进制安装及mycat读写分离1.学习环境2.初始化环境2.1关闭selinux、防火墙2.2修改主机名2.3配置域名解析2.4时间同步3.mysql安装3.1二进制包上传服务器3.2解压到/home3.3清除系统环境3.4创建mysql用户3.5创建数据目录并赋予权... 查看详情

猿创征文|万字长文搞定企业中的mysql数据库部署及使用(代码片段)

文章目录Mysql二进制安装及mycat读写分离1.学习环境2.初始化环境2.1关闭selinux、防火墙2.2修改主机名2.3配置域名解析2.4时间同步3.mysql安装3.1二进制包上传服务器3.2解压到/home3.3清除系统环境3.4创建mysql用户3.5创建数据目录并赋予权... 查看详情

猿创征文|万字长文搞定企业中的mysql数据库部署及使用(代码片段)

文章目录Mysql二进制安装及mycat读写分离1.学习环境2.初始化环境2.1关闭selinux、防火墙2.2修改主机名2.3配置域名解析2.4时间同步3.mysql安装3.1二进制包上传服务器3.2解压到/home3.3清除系统环境3.4创建mysql用户3.5创建数据目录并赋予权... 查看详情

一篇搞定vue请求和跨域

  vue本身不支持发送AJAX请求,需要使用vue-resource、axios等插件实现  axios是一个基本Promise的HTTP请求客户端,用来发送请求,也是vue2.0官方推荐的,同时不再对vue-resource进行更新和维护 axios发送AJAX请求  安装axiosnpminstal... 查看详情

一篇帮你搞定jvm中的垃圾回收的基本知识(超级详细)(代码片段)

一、总体框架二、知识介绍如何确定垃圾?(1)引用计数法Java中,引用和对象是关联的,操作对象必须用引用进行。因此,对象如果没有任何与之相关联的引用,即他们的引用数为0,则该对象不... 查看详情