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

news2024/11/27 6:20:51

目录

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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【java数据结构】HashMap和HashSet

目录 一.认识哈希表: 1.1什么是哈希表? 1.2哈希表的表示: 1.3常见哈希函数: 二.认识HashMap和HashSet: 2.1关于Map.Entry的说明:,> 2.2Map常用方法说明: 2.3HashMap的使用案例: 2.4Set常见方法…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Slider)

滑动条组件,通常用于快速调节设置值,如音量调节、亮度调节等应用场景。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Slider(options?: SliderOption…

【算法面试题】-06

智能成绩表 题目描述 小明来到学校当老师&#xff0c;需要将学生按考试总分或单科分数进行排名&#xff0c;你能帮帮他吗&#xff1f; 输入描述 第 1 行输入两个整数&#xff0c;学生人数 n 和科目数量 m。 0 < n < 100 0 < m < 10 第 2 行输入 m 个科目名称&…

14双体系Java学习之数组

数组 ★小贴士 数组中保存固定数量的值&#xff0c;声明数组时需要制定数组中元素的类型&#xff0c;数组的长度在创建数组时设定。 保存数据的数据结构有很多&#xff0c;Java的标准函数库中就包含了许多复杂的数据结构&#xff0c;比如map、tree和set&#xff0c;以后会讲解的…

数据结构·复杂度

目录 1 时间复杂度 2 大O渐进表示法 举例子&#xff08;计算时间复杂度为多少&#xff09; 3 空间复杂度 前言&#xff1a;复杂度分为时间复杂度和空间复杂度&#xff0c;两者是不同维度的&#xff0c;所以比较不会放在一起比较&#xff0c;但是时间复杂度和空间复杂度是用…

Ubuntu 安装腾讯会议

1.官网下载 进入腾讯会议下载官网下载腾讯会议Linux客户端 选择x86_64格式安装包下载 若不知道自己的系统架构,输入 uname -a 在命令行结果中查看系统架构信息 2.终端命令安装 cd {你的下载路径} sudo dpkg -i TencentMeeting_0300000000_3.19.0.401_x86_64_default.publi…

数据结构·二叉树(一)

1. 树概念及结构 1.1 树的概念 树是一种非线性的数据结构&#xff0c;它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;树叶朝下的。 有一个特殊的节点&#xff0c;称为根节点&#…

嵌入式系统工程师错题总结

笔者来介绍一下嵌入式系统工程师考试的一些易错题目 题目介绍  流水线指令计算公式&#xff1a;一条指令总时间max&#xff08;单个指令执行时间&#xff09;*&#xff08;指令数-1&#xff09;  平均故障间隔时间  ICMP协议&#xff1a;传送通信问题相关的消息。 …

sqlserver中将csv非空间数据(带点坐标)转为空间数据

1、导入csv数据 2、修改字段shape为空间字段 ALTER TABLE FJPOIHB66 ALTER COLUMN shape geometry;3、空间字段转字符串 UPDATE FJPOIHB66 SET shape geometry::STGeomFromText(CONVERT(nvarchar(254),shape), 4326);4、设置主键字段 5、即可

141 Linux 系统编程18,线程,ps –Lf 进程 查看LWP,线程间共享数据,优缺点,编译加-lpthread,

一 线程概念 什么是线程 LWP&#xff1a;light weight process 轻量级的进程&#xff0c;本质仍是进程(在Linux环境下) 进程&#xff1a;独立地址空间&#xff0c;拥有PCB 线程&#xff1a;有独立的PCB&#xff0c;但没有独立的地址空间(共享) 区别&#xff1a;在于是否共…

C++vector的模拟实现

文章目录 模拟实现1. 迭代器2. 容量操作&#xff08;1&#xff09;size和capacity&#xff08;2&#xff09;reserve&#xff08;3&#xff09; resize 3. 元素访问&#xff08;1&#xff09;下标 [ ] 4. 修改操作&#xff08;1&#xff09;push_back&#xff08;2&#xff09…

【死磕Elasticsearch】从实战中来,到实战中去

文章目录 写在前面&#xff1a;1、索引阻塞的种类2、什么时候使用阻塞&#xff1f;场景1&#xff1a;进行系统维护场景。场景2&#xff1a;保护数据不被随意更改场景。场景3&#xff1a;优化资源使用的场景。场景4&#xff1a;遵守安全规则场景。 3、添加索引阻塞API4、解除设置…

使用jquery的autocomplete属性实现联想补全操作

平时使用百度&#xff0c;淘宝等软件搜索时&#xff0c;常见一个搜索框联想提示&#xff0c;感觉确实好用但没有研究过原理&#xff0c;最近恰巧工作中遇到一个同样的场景&#xff0c;不同于大厂使用高端的Python&#xff0c;这次需要使用jQuery的autocomplete属性来自动联想补…

git撤回代码提交commit或者修改commit提交注释

执行commit后&#xff0c;还没执行push时&#xff0c;想要撤销之前的提交commit 撤销提交 使用命令&#xff1a; git reset --soft HEAD^命令详解&#xff1a; HEAD^ 表示上一个版本&#xff0c;即上一次的commit&#xff0c;也可以写成HEAD~1 如果进行两次的commit&#xf…

Singularity(二)| 安装singularity工具

Singularity&#xff08;二&#xff09;| 安装singularity工具 以默认安装 Ubuntu 22.04 (jammy) 发行版的 WSL 2 (Windows Subsystem for Linux 2) 为例&#xff1a; 参考&#xff1a;官方快速安装向导 安装系统依赖项 首先在主机上安装开发工具和库&#xff0c;在基于 debian…

【黑马程序员】python函数

文章目录 函数什么是函数为什么学习函数函数定义函数的传入参数函数的返回值返回值基础None返回值 函数说明文档函数的嵌套调用定义代码示例 全局变量和局部变量全局变量global变量局部变量 函数综合案例 函数 什么是函数 组织好的&#xff0c;可重复使用的、用来实现特定功能…

5.Java并发编程—JUC线程池架构

JUC线程池架构 在Java开发中&#xff0c;线程的创建和销毁对系统性能有一定的开销&#xff0c;需要JVM和操作系统的配合完成大量的工作。 JVM对线程的创建和销毁&#xff1a; 线程的创建需要JVM分配内存、初始化线程栈和线程上下文等资源&#xff0c;这些操作会带来一定的时间和…

【C语言步行梯】自定义函数、函数递归详谈

&#x1f3af;每日努力一点点&#xff0c;技术进步看得见 &#x1f3e0;专栏介绍&#xff1a;【C语言步行梯】专栏用于介绍C语言相关内容&#xff0c;每篇文章将通过图片代码片段网络相关题目的方式编写&#xff0c;欢迎订阅~~ 文章目录 什么是函数库函数自定义函数函数执行示例…

数据结构 第2章:线性表

文章目录 2.1 线性表的定义和操作2.1.1 线性表的基本概念2.1.2 线性表的基本操作 2.2. 顺序表2.2.1. 顺序表的基本概念2.2.2. 顺序表的实现2.2.3. 顺序表的基本操作 2.3 链表2.3.1 单链表的基本概念2.3.2 单链表的实现2.3.3 单链表的插入2.3.4. 单链表的删除2.3.5. 单链表的查找…

VB 数据质量诊断软件(分析数据的完整性,合理性,准确性)-139-(代码+程序说明)

转载地址http://www.3q2008.com/soft/search.asp?keyword139 前言: 为何口出狂言,作任何VB和ASP的系统, 这个就是很好的一个证明 :) 又有些狂了... 数据库操作谁都会,接触的多了也没什么难的,VB编程难在哪?算法上,这个是一个算法题的毕业设计 哈哈忙活了足足有一○小时, …