掌握Redis,看完这篇文章就够了!

目录

1.Redis介绍

2.Redis服务器与客户端

3.Redis配置文件

4.Redis数据类型操作

4.1使用python连接数据库

4.2 字符串

4.3 哈希

4.4 键对应操作

4.5 列表

4.6 集合

4.7 有序集合


1.Redis介绍

Redis 是一个开源的内存数据库,它提供了一个高性能的 key-value 存储系统,并支持多种数据结构(如字符串、哈希表、列表、集合等)。Redis 除了支持持久化外,还提供了复制、高可用和集群功能,使其成为一款非常流行的 NoSQL 数据库。

在实际应用中,Redis 被广泛用于缓存、会话存储、消息队列等场景,以提升系统性能和扩展性。由于其快速的读写速度和丰富的数据类型支持,Redis 在 Web 开发和大数据领域有着广泛的应用。

MySQL,MongoDB都是以文件的形式存储在磁盘上的;Redis数据在内存中,操作内存的速度远远高于磁盘,并且Redis数据最终也可以存储在磁盘上。Redis通过键值存储数据库,类似字典。

2.Redis服务器与客户端

1.启动服务器:

在黑窗口输入以下代码启动服务器,前提是电脑任务管理器中Redis服务是关闭的。

redis-server "D:\Program Files\Redis\redis.windows.conf"

2.客户端连接服务器

连接服务器,输入以下代码,-h后加主机IP,-a后加密码。默认无密码。

redis-cli -a 123456

3.Redis配置文件

1.获取配置信息

config get *

2.配置某个信息

这里我将用户密码设置为123456,因此上方客户端连接时需要输入密码

config get requirepass

config set requirepass 123456

3.常见配置项

  1. dbfilename, 数据文件
  2. requirepass ,用户密码
  3. masterauth,主机密码
  4. logfile, 日志文件
  5. port,端口号6379
  6. database,数据库,默认16个
  7. loglevel,日志等级
  8. bind,绑定IP
  9. 保存时间
    1. save  time changecount
    2. save 900 1 ,修改一个15分钟以后保存
    3. save 60 10000,修改达到一万个 1分钟保存

4.Redis数据类型操作

Redis有以下五种数据类型

(1)字符串

(2)哈希

(3)列表

(4)集合

(5)有序集合

4.1使用python连接数据库

1.导入Redis模块

在终端输入以下语句

pip install redis

2.连接

import redis
client = redis.StrictRedis()


client.close()

4.2 字符串

在 Redis 中,字符串是最简单的数据结构之一,它可以存储最基本的数据类型,即一个键对应一个值。在 Redis 中,字符串不仅可以存储文本数据,还可以存储数字、二进制数据等。

常用操作如下:

(1)设置单个键值

r = client.set("s1", "hello world")
print(r)

(2)获取单个值

r = client.get("s1")
print(r)

(3)设置多个键值

r = client.mset({"s1": "v1", "s2": "v2"})
print(r)

(4)获取多个键值

r = client.mget("s1", "k1", "k2")
print(r)

(5)加增量1

r = client.set("s2", 100)
print(r)

r = client.incr("s2")
print(r)

(6)指定增量

r = client.incrby("s2", 10)
print(r)

(7)减1,减指定增量

r = client.decr("s2")
print(r)

r = client.decrby("s2", 5)
print(r)

(8)设置某个键值带有有效期。查看某个键的有效期

长期有效,有效期为-1

r = client.expire("s2", 50)
print(r)

r = client.ttl("s2")
print(r)
r = client.ttl("s1")
print(r)

(9)拼接,在原始数据后拼接

r = client.append("s1", "abcd")
print(r)

r = client.mget("s1")
print(r)

4.3 哈希

哈希存储键值对。

常用操作:

(1)hget(name, key)获取键对应的值

r = client.hget("h1", "k1")
print(r)

(2)hset(name, key, value)添加键值对

r = client.hset("h1", "k1", "v1")
print(r)

(3)hmset(name, {})添加多个键值对

r = client.hmset("h1", {"k2":"v2", "k3":"v3", "k4":"v4"})
print(r)

(4)hmget(name, [key])获取列表中字段对应的值

r = client.hmget("h1", ["k1", "k2", "k3"])
print(r)

(5)hincrby(name,  key, value)字段的值 增加增量

r = client.hincrby("h1", "k5", 10)
print(r)


(6)hgetall(name) 所有字段与值

r = client.hgetall("h1")
print(r)

(7)hkeys(name) 所有的字段    hvals(name) 所有字段的值

r = client.hkeys("h1")
print(r)
r = client.hvals("h1")
print(r)

(8)hexists(name, key)判断字段是否存在

r = client.hexists("h1", "k1")
print(r)
r = client.hexists("h1", "k99")
print(r)

(9)hdel(name, key) 删除字段

r = client.hdel("h1", "k5")
print(r)

(10)hlen(neme, key) 返回字段长度

r = client.hlen("h1")
print(r)

4.4 键对应操作

(1)keys()返回所有键

(2)exists(k)查看键是否存在, 0为不存在  1为存在

r = client.exists("s1")
print(r)

(3)type(k)查看键对应值的类型

r = client.type("s1")
print(r)

(4)expire(k, time)设置有效期

r = client.expire("s3", 50)
print(r)

(5)ttl(k)查看剩余时间,  -1为永久, -2为不存在的键

r = client.ttl("s8")
print(r)

(6)delete(k)删除键

r = client.delete("s8")
print(r)

4.5 列表

(1)lpush(k, v)开头插入

r = client.lpush("l1", 100)
print(r)

(2)rpush(k, v)末尾插入

r = client.rpush("l1", 50)
print(r)

(3)lpop(v) 开头删除

r = client.lpop("l1", 100)
print(r)

(4)rpop(v)末尾删除

r = client.rpop("l1", 50)
print(r)

(5)lset(k, index, v)修改指定位置额指定元素

r = client.lset("l1", 1, "50")
print(r)

(6)linsert(key, after\before, pivot, value)在指定位置插入指定元素

r = client.linsert("l1", "after", "120", "150")
print(r)
r = client.linsert("l1", "before", "50", "500")
print(r)

(7)lrem(key, count, value) 删除指定个数的指定元素

r = client.lrem("l1", 0, 1)
print(r)

(8)ltrim(key, start, stop)把原始位置切片

r = client.ltrim("l1", 0, 1)
print(r)

(9)lrange(key, start, end)返回对应位置范围所有元素

r = client.lrange("l1", 0, 1)
print(r)

(10)lindex(key, index) 返回对应位置的元素

r = client.lindex("l1", 0)
print(r)

4.6 集合

(1)sadd(key, *values)将多个数据插入集合

r = client.sadd("set2", 100, 500, 200, 300, 400, 100, 200)
print(r)

(2)srem(key, value)移除指定value

r = client.srem("set2", 100)
print(r)

(3)spop(key)随机移除

r = client.spop("set2")
print(r)

(4)srandmenber(key,count)随机取count个,不删除

r = client.srandmember("set2", 2)
print(r)

(5)scard(key)集合中元素个数

r = client.scard("set2")
print(r)

(6)smembers(key)返回所有元素

r = client.smembers("set2")
print(r)

(7)sismember(key, value)value是否在集合中

r = client.sismember("set2", "600")
print(r)

(8)sinter([key1,key2])返回交集

r = client.sinter(["set2", "set3"])
print(r)

(9)sinterstore(key3, [key1, key2])将返回的交集存储到集合

r = client.sinterstore("set4", ["set2", "set3"])
print(r)

(10)sunion([key1, key2])    返回并集

r = client.sunion(["set2", "set3"])
print(r)

(11)sunionstore(key3, [key1, key2])将返回的并集存储到集合

r = client.sunionstore("set5", ["set2", "set3"])
print(r)

(12)sdiff([key1, key2])返回差集

r = client.sdiff(["set2", "set3"])
print(r)

(13)sdiffstore(key3, [key1, key2])  将返回的差集存储到集合

r = client.sdiffstore("set6", ["set2", "set3"])
print(r)

4.7 有序集合

(1)zadd(name, {v, score}),添加带有权重的元素

r = client.zadd("zset2", {"v1": 10, "v2": 20, "v3": 30, "v4": 40, "v5": 50})
print(r)

(2)zrem(name, v, v),从有序集合中移除

r = client.zrem("zset2", "v1")
print(r)

(3)zcard(name),个数

r = client.zcard("zset2")
print(r)

(4)zcount(name, min, max),权重在min到max之间元素个数

r = client.zcount("zset2", 10, 30)
print(r)

(5)zrange(name, start, stop),获取指定索引范围元素

r = client.zrange("zset2", 0, 3, withscores=True)
print(r)

(6)zrevrange(name, start, stop),逆序获取指定索引范围元素,withscores=True显示分数

r = client.zrevrange("zset2", 0, 2, withscores=True)
print(r)

(7)zrangebyscore(name, min, max),获取制定分值对应元素

r = client.zrangebyscore("zset2", 10, 100, withscores=True)
print(r)

(8)zrevrangescore(name, max, min),逆序获取制定分值对应元素

r = client.zrevrangescore("zset2", "v5")
print(r)

(9)zscore(name, value),获取value对应的权重

r = client.zscore("zset2", "v5")
print(r)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于PyTorch深度学习实战入门系列-Numpy基础全

Numpy的使用 导入Numpy模块 import numpy as np创建数组(一维数组、小数数组、二维数组) # 创建一个一维数组 n1 np.array([1, 2, 3]) # 创建一个含有小数的一维数组 n2 np.array([0.1, 0.2, 0.3]) # 创建一个简单的二维数组 n3 np.array([[1, 2], [3…

基于Java+SpringBoot+vue+element实现前后端分离牙科诊所管理系统详细设计

基于JavaSpringBootvueelement实现前后端分离牙科诊所管理系统详细设计 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 ** 作者主页 央顺技术团队** 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

【阿里云系列】-基于云效构建部署NodeJS项目到ACK

准备工作 01、编写Dockerfile文件可以根据不同的环境,新建不同的Dockerfile文件,比如Dockerfile-PROD # Deliver the dist folder with NginxFROM nginx:stable-alpine ENV LANGC.UTF-8 ENV TZAsia/ShanghaiCOPY dist/ /usr/share/nginx/html COPY ngi…

字节跳动也启动春季校园招聘了(含二面算法原题)

字节跳动 - 春招启动 随着各个大厂陆续打响春招的响头炮,字节跳动也官宣了春季校园招聘的正式开始。 还是那句话:连互联网大厂启动校招计划尚且争先恐后,你还有什么理由不马上行动?! 先来扫一眼「春招流程」和「面向群…

怎么恢复删除的文件?三个实用数据恢复方法分享

在日常工作和生活中,我们经常会遇到误删文件的情况,这可能会带来不小的麻烦。幸运的是,随着科技的发展,现在有很多方法可以帮助我们恢复被删除的文件。下面让我来分享三种常用的文件恢复方法,一起来看看吧!…

【Springboot】--如何将springboot+vue项目部署到云服务器?

目录 一、准备工作 1、购买云服务器 2、获取面板地址 二、jdk和数据库 1、安装环境 2、配置jdk环境变量 3、java版本的问题 4、添加数据库 三、前端部署 1、vue 2、创建站点 ​编辑 四、后端部署 1、application.yml 2、idea打包 3、运行jar包 4、开放端口 五、…

大模型时代下的 BI——智能问数

「智能问数」是 Sugar BI 基于文心大语言模型推出的对话式数据问答产品,让用户能够通过自然语言的方式进行对答形式的数据查询,系统自动使用可视化图表的方式呈现数据结果,并支持对数据做summary总结。 智能问数功能邀测中,欢迎CS…

Dgraph 入门教程四《开发环境的搭建》

在深入 了解Dgraph 之前,我们先了解下开发环境,毕竟让开发人员真正动起手来才是第一步。 Dgraph 支持很多种语言的开发,包括GO,Python,JS,C#和Java等等。出于项目需要,只了解下JS和Java。 1、…

基础小白快速入门web前端开发技术------->hbuilder的下载安装以及简易的网页最开始制作

工欲善其事,必先利其器, 在我们学习开发网页设计,我们首先需要一个良好的开发工具 这里我比较推荐hbuilder这个 只需要进入官网傻瓜下载,傻瓜安装 https://dcloud.io/ 点击hbuilder选择版本进行下载安装即可 hbuilder的新建文件…

深度强化学习(四)SARSA

深度强化学习(四)SARSA算法 一.SARSA 假设状态空间 S \mathcal{S} S 和动作空间 A \mathcal{A} A 都是有限集, 即集合中元素数量有限。比如, S \mathcal{S} S 中一共有 3 种状态, A \mathcal{A} A 中一共有 4 种动作。那么动作价值函数 Q π ( s …

ida pro 查看简易 Android .so 文件伪代码

参考: IDA Pro 反汇编器使用详解,适合逆向新人和老人的权威指南(一)-CSDN博客 注意,这篇只是我的简单记录,要学习详细使用,请参考其他大佬的。 让我们打开神器 IDA 直接把需要的文件拖到 IDA …

3.1_2 覆盖与交换

3.1_2 覆盖与交换 (一)覆盖技术 早期的计算机内存很小,比如IBM 推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况。 后来人们引入了覆盖技术,用来解决“程序大小超过物理内存总和”的问题。 覆盖技术的…

工业智能网关的网关模式和交换机模式有哪些区别

工业智能网关主要用以实现工业物联网络中不同设备和系统之间的通信,工业智能网关常见的两种工作模式是网关模式和交换机模式,在功能和应用场景上存在显著差异,本篇就为大家简单介绍一下两者之间的主要区别: 1、网关模式 工业智能…

String 底层为什么使用 final 修饰?

1、典型回答 对于这个问题,Java之父詹姆斯 高斯林(James Gosling) 是这样回答的: I would use an immutable whenever I can 翻译为中文:只要允许,我就会使用不可变对象 而作为普通人的我们来说&#xff0…

有一说一,CSPM真的是垃圾证书吗?

CSPM是什么? CSPM——项目管理专业人员能力评价,是中国人自己的一套项目管理专业人士的评价指南,符合中国国情且符合中国未来发展的一套项目刊专业人员能力评价的标准。 PMP项目管理专业人士资格认证,由美国项目管理协会——PMI…

根到叶路径问题:遍历框架 + 前中后序位置 + 路径记录 + 叶子节点处理

根到叶路径问题 257. 二叉树的所有路径129. 求根节点到叶节点数字之和112. 路径总和113. 路径总和 II437. 路径总和 III988. 从叶结点开始的最小字符串124. 二叉树中的最大路径和 257. 二叉树的所有路径 问题描述:找出所有从根节点到叶子节点的路径,并以…

ATFX汇市:美国2月CPI数据来袭,高通胀问题或进一步缓解

ATFX汇市:今日20:30,美国劳工部将公布2月未季调核心CPI年率数据,前值为3.9%,预期值3.7%,预期将下降0.2个百分点。历史数据看,美国核心CPI年率处于快速下降状态,去年3月份数据仍高达5.6%&#xf…

社交创新的先锋:探秘Facebook背后的故事与智慧

起源与初创阶段 Facebook的故事始于2004年,由马克扎克伯格(Mark Zuckerberg)、埃迪华索伦(Eduardo Saverin)、安德鲁麦克卡拉姆(Andrew McCollum)、克里斯休斯(Chris Hughes&#x…

prometheus 原理(架构,promql表达式,描点原理)

大家好,我是蓝胖子,提到监控指标,不得不说prometheus,今天这篇文章我会对prometheus 的架构设计,promql表达式原理和监控图表的绘图原理进行详细的解释。来让大家对prometheus的理解更加深刻。 架构设计 先来看看&am…

Vue3全家桶 - Vue3 - 【4】侦听器

侦听器 一、 组合式API: 1.1 watch()函数 创建侦听器: 语法:// 先导入 watch 函数 import { watch } from vue watch(source, callback, options)source: 需要侦听的数据源,可以是 ref(包括计算属性)、一个响应式对…