Redis 键值对数据库学习

目录

一、介绍

二、安装以及连接

三、设置连接密码

四、连接报错

五、redis 操作字符串以及过期时间

六、 redis 列表操作

七、redis 集合操作

八、hash 哈希操作

九、redis 发布和订阅操作

十、RDB和AOF的两种数据持久化机制

十一、 其他机器连接redis

十二、 python 操作redis

1. 安装python-redis  以及连接redis

2. 操作数据

3.  事务操作

4. 发布与订阅


一、介绍

redis 是一种 nosql 数据库,他的数据是保存在内存中,同时 redis 可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比 memcached 支持更多的数据结构( string,list表[队列和栈],set[集合],sorted set[有序集合],hash(hash表)。

redis 使用场景:

  1. 登录会话存储,存储在 redis 中,与 memcached 相比,数据不会丢失。
  2. 排行版/计数器:比如一些秀场类的项目,经常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博的点赞数等。
  3. 作为消息队列:比如 celery 就是使用 redis 作为中间人。
  4. 当前在线人数:还是之前的秀场例子,会显示当前系统有多少在线人数。
  5. 一些常用的数据缓存:比如我们的 BBS 论坛,板块不会经常变化的,但是每次访问首页都要从"ys591 中获取,可以在 redis 中缓存起来,不用每次请求数据库。
  6. 把前200篇文童缓存或者评论缓存:一般用户浏览网站,只会浏览前面一部分文章或者评论,那么可以把前面200篇文童和对应的评论缓存起来。用户访问超过的,就访问数据库,并且以后文章超过200篇,则把之前的文章删除。
  7. 好友关系: 微博的好友关系使用 redis 实现。
  8. 发布和订阅功能:可以用来做聊天软件。        

二、安装以及连接

参考文章链接:【Redis】在Mac上安装使用redis的教程_mac安装redis-CSDN博客

  1. 安装:brew install redis
  2. 开启服务:brew services start redis
  3. 关闭服务: brew services stop redis
  4. 指定端口号:redis-cli -h 127.0.0.1 -p 6379

-h ip地址; -p 端口号 ; -a 密码 

三、设置连接密码

  1. 配置文件设置连接密码:

第一步:cd /opt/homebrew/etc 

第二步:open redis.conf

报错了!!No application knows how to open URL file:///opt/homebrew/etc/redis.conf

解决: 换成  open -e redis.conf  命令

第三步:在redis.conf 中修改requirepass 密码,如图所示:

 第四步:运行 redis-server /opt/homebrew/etc/redis.conf 

第五步:运行 redis-cli -h 127.0.0.1 -p 6379 -a 123456

四、连接报错

报错:Could not connect to Redis at 127.0.0.1:6379: Connection refused

方式一: 查看服务是否启动

方式二: 如果服务已经启动还是报错,通过以下方式解决:

  1. 检查redis 服务的状态:redis-cli ping,确认redis 服务正在运行,如果返回PONG,则表示Redis服务器正在运行。
  2. 如果没有返回或者返回其他错误消息,我们需要通过以下命令启动Redis服务器: redis-server
  3. 参考链接: 解决Could not connect to Redis at 127.0.0.1:6379: Connection refused的具体操作步骤_mob649e816a3664的技术博客_51CTO博客

五、redis 操作字符串以及过期时间

  1. 添加字符串         set key value

  2. 查看字符串.        get key

  3.  设置过期时间 

  • set key value EX 过期时间()   比如:set username axuan EX 10

  • expire key 过期时间()           比如:expire age 204. 查看过期时间  ttl key 

  1. 查看所有字符串     keys *

  2. 删除字符串          del key

其他命令: 

  • 删除所有的key  flushall
  • 六、 redis 列表操作

  • 在列表左边添加元素

         lpush key value             比如:lpush userlist xuan

  • 在列表右边添加元素

         rpush key value       

  • 查看列表中的元素

         lrange key start stop      比如:lrange userlist 0 -1 返回所有的元素

  • 移除并返回列表key的头元素

        lpop key

  • 移除并返回列表key的尾元素

        rpop key

  • 移除并返回返回列表key的中间元素,count个值为value的元素

        lrem key count value        比如:lrem userlist 1 haha

  • 指定返回第几个元素(元素序号是从0开始)

          lindex key index

  • 获取列表中的元素个数

          llen key

  • 删除指定的元素

        lrem key count value

         count > 0:从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。

         count < 0:从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。

        count = 0: 移除表中所有与 value 相等的值。

七、redis 集合操作

  • 添加元素

        sadd set value1 value2 比如:sadd school1 qinghua beida

  • 查看元素

        smembers  set 比如:smembers school1

  • 移除元素

        srem set memeber  比如:srem school1 beida

  • 查看集合中的元素个数

        scard set 比如:scard school1

  • 获取多个集合的交集

        sinter set1 set2 比如sinter school1 school2

  • 获取多个集合的并集

        sunion set1 set2 比如:sunion school1 school2

  • 获取多个集合的差集

        sdiff set1 set2 比如:sdiff school1 school2

八、hash 哈希操作

  • 添加一个新值

        hset key field value 比如:hset person name xuan

  • 添加多个新值

        hmset key field value field value... 比如:hmset person address jueeweee height 155

  • 获取哈希中的field对应的值

        hset key field 比如:hget person name

  • 删除field 中的某个field

        hdel key field 比如:hdel person height

  • 获取某个哈希中所有的field 和 value

        hgetall key 比如:hgetall person

  • 获取某个哈希中所有的field

        hkeys key 比如:hkeys person

  • 获取某个哈希中所有的值

        hvals key 比如:hvals person

  • 判断哈希是否存在某个filed

          hexists key field 比如:hexists person age

  • 获取哈希中总共的键值对

        hlen key 比如:hlen person key

  1. redis 事务操作
  1. 事务特点

        Redis 事务可以一次执行多个命令,事务具有以下特征:

  • 隔离操作:事务中的所有命令都会序列化、按顺序地执行,不会被其他命令打扰。
  • 原子操作: 事务中的命令要么全部被执行,要么全部都不执行。

     2. 操作事务

  • 开启一个事务

        multi

  • 执行事务,会将在multi 和exec 中的操作一并提交

        exec

如下图所示:

127.0.0.1:6379> multi

OK

127.0.0.1:6379(TX)> set username axuanya

QUEUED

127.0.0.1:6379(TX)> get username

QUEUED

127.0.0.1:6379(TX)> exec

1) OK

2) "axuanya"

  • 取消事务

        discard

  • 监视一个或者多个key,如果在事务执行之前这个(或这些)key 被其他命令所改动,那么事务将被打断

 127.0.0.1:6379> watch username

OK

127.0.0.1:6379> multi

OK

127.0.0.1:6379(TX)> set username hahahaha

QUEUED

127.0.0.1:6379(TX)> exec

1) OK

127.0.0.1:6379> get username

"hahahaha"

127.0.0.1:6379>

  • 取消所有key的监视

        unwatch

九、redis 发布和订阅操作

  1. 给某个频道发布消息

        publish channel message

      2. 订阅某个频道发布消息

        subscribe channel

十、RDB和AOF的两种数据持久化机制

RDB

AOF

开启关闭

开启: 默认开启。关闭: 把配置文件中所有的save都注释,就是关闭了。

开启:在配置文件中appendonly ,yes 即开启了 aof ,为 no 关闭。

同步机制

可以指定某个时间内发生多少个命令进行同步。比如1分钟内发生了2次命令,就做一次同步。

*save 900 1:如果在900s以内发生了1次数据更新操作,那么就会做一次同步操作。

*save 300 10: 如果在300s以内发生了10数据更新操作,那么就会做一次同步操作。

*save 60 10000:如果在60s以内发生了10000数据更新操作,那么就会做一次同步操作。

每秒同步或者每次发生命令后同步。

*appendfsync always:每次有数据更新操作,都会同步到文件中。

* appendfsync everysec:每秒进行一次更新。

* appendfsync no:使用操作系统的方式进行更新。普遍是30s更新一次。

存储内容

存储的是redis里面的具体的值

存储的是执行的更新数据的操作命令

存储路径

根据redis.conf下的dir以及rdbfilename来指定的。默认是/var/lib/redis/dump.rdb

根据redis.conf下的dir以及appendfilename来指定的。默认是/var/lib/redis/dump.rdb

优点

  1.  存储数据到文件中会进行压缩,文件体积比aof小。(2) 因为存储的是redis具体的值,并且会经过压缩,因此在恢复的时候速度比AOF快。

(3)非常适用于备份。

(1) AOF的策略是每秒钟或者每次发生写操作的时候都会同步,因此即使服务器故障,最多只会丢失1秒的数据。(2) AOF存储的是Redis命令,并且是直接追加到aof文件后面,因此每次备份的时候只要添加新的数据进去就可以了。(3) 如果AOF文件比较大了,那么Redis会进行重写,只保留最小的命令集合。

缺点

  1. RDB在多少时间内发生了多少写操作的时候就会出发同步机制,因为采用压缩机制,RDB在同步的时候都重新保存整个Redis中的数据,因此你一般会设置在最少5分钟才保存一次数据。在这种情况下,一旦服务器故障,会造成5分钟的数据丢失。(2)在数据保存进RDB的时候,Redis会fork出一个子进程用来同步,在数据量比较大的时候,可能会非常耗时。
  1. AOF文件因为没有压缩,因此体积比RDB大。 (2) AOF是在每秒或者每次写操作都进行备份,因此如果并发量比较大,效率可能有点慢。(3)AOF文件因为存储的是命令,因此在灾难恢复的时候Redis会重新运行AOF中的命令,速度不及RDB。

十一、 其他机器连接redis

如果想要让其他机器连接本机的redis 服务器, 那么应该在redis.conf配置文件中,指定“bind 本机的ip地址”,

这样别的机器就能连接成功。不像是网上说的,要指定对方的ip地址.

十二、 python 操作redis

1. 安装python-redis  以及连接redis

import redis
from flask import Flask
cache = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
app = Flask(__name__)
if __name__ == '__main__':app.run(debug=True)

2. 操作数据

# 1. 操作字符串
cache.set('username', 'axuan')
print(cache.get('username'))
# 2. 操作列表
cache.lpush('languages', 'java')
cache.lpush('languages', 'python')
print(cache.lrange('languages', 0, -1))
# 3. 集合的操作
cache.sadd('team', 'yuyu')
cache.sadd('team', 'xuan')
print(cache.smembers('team'))
# 4. 哈希的操作
cache.hset('person','name','xuanya')
cache.hset('person','age','25')
print(cache.hgetall('person'))

3.  事务操作

pip=cache.pipeline()
pip.set('username','lalala')
pip.set('password','1u3u33')
# 执行事务
pip.execute()

4. 发布与订阅

# 订阅
ps = cache.pubsub()
ps.subscribe('email')
while True:for item in ps.listen():if item['type'] == 'message':print(item['data'])
# 发布
import redis
from faker import Faker
cache = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
fake = Faker(language='zh-CN')
for x in range(3):cache.publish('email', fake.email())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434644.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS8.5.2111(3)实验之DHCP服务器架设

一、实验目标 1&#xff0e;掌握DHCP服务器的主配置文件各项申明参数及操作及其含义 2. 具备DHCP 服务器、中继服务器的配置能力 3. 具备测试客户端正常获取服务器分配地址的能力 4. 具备DHCP服务器故障排除能力 二、实训原理/流程 &#xff08;一&#xff09;项目背景 …

Golang | Leetcode Golang题解之第443题压缩字符串

题目&#xff1a; 题解&#xff1a; func compress(chars []byte) int {write, left : 0, 0for read, ch : range chars {if read len(chars)-1 || ch ! chars[read1] {chars[write] chwritenum : read - left 1if num > 1 {anchor : writefor ; num > 0; num / 10 {…

Unity3D入门(四) : Android和Unity3D交互 - Unity调用Android

1. 前言 上篇文章&#xff0c;我们讲了如何通过Android调用Unity3D。这篇文章&#xff0c;我们来讲一下Unity3D怎么调用Android。 1.1 unity和Android的三种通信方式 Unity官方提供的接口 : 有一个弊端&#xff0c;它有一个传输内容量的一个限制&#xff0c;传输内容过大或过…

安装管理K8S的开源项目KubeClipper介绍

安装管理K8S的开源项目KubeClipper介绍 1. 概述 KubeClipper是九州云开源的一个图形化界面 Kubernetes 多集群管理工具&#xff0c;旨在提供易使用、易运维、极轻量、生产级的 Kubernetes 多集群全生命周期管理服务。让运维工程师从繁复的配置和晦涩的命令行中解放出来&#…

02-ZYNQ linux开发环境安装,基于Petalinux2022.2和Vitis2022.2

petalinux安装 Petalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件&#xff0c;包括了 u-boot、Linux Kernel、device-tree、rootfs 等源码和库&#xff0c;以及 Yocto recipes&#xff0c;可以让客户很方便的生成、配置、编译及自定义 Linux 系统。Petalinux 支持 Ver…

Linux集群部署RabbitMQ

目录 一、准备三台虚拟机&#xff0c;配置相同 1、所有主机都需要hosts文件解析 2、所有主机安装erLang和rabbitmq 3、修改配置文件 4、导入rabbitmq 的管理界面 5、查看节点状态 6、设置erlang运行节点 7、rabitmq2和rabbitmq3重启服务 8、查看各个节点状态 二、添加…

解锁初中学习新境界 —— 初中通关宝典速记手册

在初中这个学习生涯的关键阶段&#xff0c;掌握扎实的基础知识是取得优异成绩的关键。为此&#xff0c;我们特别推荐《初中通关宝典》——一本专为初中生打造的各科基础知识速记手册&#xff0c;它将成为你学习路上的得力助手。 文章目录 1. 全科覆盖&#xff0c;精准速记2.科学…

socket.io-client实现实前后端时通信功能

这里我使用的后端 基于node.js的koa框架 前端使用的是vite {"name": "hou","version": "1.0.0","description": "","main": "app.js","scripts": {"test": "echo …

老古董Lisp实用主义入门教程(12):白日梦先生的白日梦

白日梦先生的白日梦 白日梦先生已经跟着大家一起学Lisp长达两个月零五天&#xff01; 001 粗鲁先生Lisp再出发002 懒惰先生的Lisp开发流程003 颠倒先生的数学表达式004 完美先生的完美Lisp005 好奇先生用Lisp来探索Lisp006 好奇先生在Lisp的花园里挖呀挖呀挖007 挑剔先生给出…

手游和应用出海资讯:三七新游首月收入突破700万元;领英尝试推出游戏功能以增加用户使用时长

NetMarvel帮助游戏和应用广告主洞察全球市场、获取行业信息&#xff0c;以下为9月第四周资讯&#xff1a; ● 《AFK Journey》收入突破 1.5 亿美元 ● 《黑神话&#xff1a;悟空》IGN年度游戏投票第一掉至第三 ● 三七发布新游首月收入突破700万元 ● 开罗游戏《哆啦A梦的铜锣烧…

Java SPI 原理、样例

在 Java 中&#xff0c;SPI&#xff08;Service Provider Interface&#xff09;全称为服务提供者接口&#xff0c;它是一种用于实现框架扩展和插件化的机制。 一、SPI 作用 允许在运行时动态地为接口查找服务实现&#xff0c;而不需要在代码中显式地指定具体的实现类。 这使得…

关系模型与关系代数——数据库原理 总结2

2.1 关系模型 关系数据结构 关系模型的数据结构是二维表&#xff0c;亦称为关系。关系数据库是表的集合&#xff0c;即关系的集合。表是一个实体集&#xff0c;一行就是一个实体&#xff0c;它由有关联的若干属性的值所构成。 关系模型的相关概念 列就是数据项 或 字段 或 属…

基于SpringCloud的微服务架构下安全开发运维准则

为什么要进行安全设计 微服务架构进行安全设计的原因主要包括以下几点&#xff1a; 提高数据保护&#xff1a;微服务架构中&#xff0c;服务间通信频繁&#xff0c;涉及到大量敏感数据的交换。安全设计可以确保数据在传输和存储过程中的安全性&#xff0c;防止数据泄露和篡改。…

Study--Oracle-09--部署Openfiler存储服务器

免费的存储服务器软件有FreeNAS 和 Openfiler。 其中Freenas的网站上只有i386及amd64的版本,也就是说Freenas不能支持64位版本的Intel CPU,而Openfiler则提供更全面的版本支持,在其网站上可以看到支持多网卡、多CPU,以及硬件Raid的支持,还有10Gb网卡的支持。 Openfiler能把…

【RocketMQ】RocketMQ发送不同类型消息

&#x1f3af; 导读&#xff1a;本文介绍了RocketMQ消息队列系统中的几种消息发送模式及其应用场景&#xff0c;包括同步消息、异步消息以及事务消息。同步消息确保了消息的安全性&#xff0c;但牺牲了一定的性能&#xff1b;异步消息提高了响应速度&#xff0c;适用于对响应时…

演示:基于WPF的DrawingVisual开发的频谱图和律动图

一、目的&#xff1a;基于WPF的DrawingVisual开发的频谱图和律动图 二、效果演示 波形图 极坐标 律动图极坐标图 律动图柱状图 Dock布局组合效果 三、环境 VS2022,Net7,Win10&#xff0c;NVIDIA RTX A2000 四、主要功能 支持设置起始频率&#xff0c;终止频率&#xff0c;中心…

【HTTP 和 HTTPS详解】3

HTTP 状态代码 HTTP 状态代码是服务器发送给客户端的三位数字&#xff0c;用于指示客户端请求的结果。它们分为五类&#xff1a;信息性&#xff08;100-199&#xff09;、成功&#xff08;200-299&#xff09;、重定向&#xff08;300-399&#xff09;、客户端错误&#xff08…

【移植】Combo解决方案之W800芯片移植案例

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 本方案基于 OpenHarmony LiteOS-M 内核&#xff0c;使用联盛德 W80…

[论文精读]Membership Inference Attacks Against Machine Learning Models

中文译名&#xff1a;针对机器学习模型的成员推理攻击 会议名称&#xff1a;2017 IEEE Symposium on Security and Privacy (SP) 发布链接&#xff1a;Membership Inference Attacks Against Machine Learning Models | IEEE Conference Publication | IEEE Xplore CODE:Git…

【计算机网络】Tcp报文的组成,Tcp是如何实现可靠传输的?

Tcp的报文组成 TCP&#xff08;传输控制协议&#xff09;是计算机网络中一种重要的传输协议&#xff0c;其报文组成包括多个字段&#xff0c;每个字段具有特定的含义。以下是TCP报文头的主要组成部分&#xff1a; 源端口号&#xff08;Source Port&#xff09;&#xff1a;占用…