Redis数据库的安装和命令使用以及python的调用

news2025/1/15 19:44:14

Redis 简介

Redis是完全开源免费的,是一个高性能的key-value数据库。

Redis与其他 key- value 缓存产品有以下三个特点:

  1. Redis支持数据的持久化,可将内存中的数据保存在磁盘中,重启时再次加载使用。
  2. Redis不仅支持简单的key-value类型的数据,还提供list,set,zset,hash等数据结构的存储。
  3. Redis 半持久化,存储于内存和硬盘

Redis和MongoDB的区别:

  1. Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据,持久化是使用RDB方式或者aof方式。
  2. mongodb是文档型的非关系型数据库,类似MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询JSON数据,能存储海量数据,但是不支持事务。

Redis下载及配置

下载地址1
下载地址2
下载解压之后,进入文件redis.windows.conf
在这里插入图片描述
在387行设置数据库密码
在这里插入图片描述
修改设置最大的数据堆的大小(单位 byte)
在469行处修改
在这里插入图片描述
注意:在配置文件 maxXXXX< bytes>下面一行添加,不同版本位置不同

启动Redis数据库

开启redis数据库服务器

在命令提示符窗口中进入到文件路径,输入如下命令:

redis-server.exe redis.windows.conf  # 执行 redis-server.exe 并加载Windows的配置文件

在这里插入图片描述
如图,表示服务器开始成功,需要保存窗口,关闭则自动关闭服务器。

客户端连接redis数据库

在文件目录下另起命令提示符,输入命令:

redis-cli.exe

在这里插入图片描述
输入密码格式为(引号必须加,因为是字符串类型):

auth '你的密码'  

Redis值的类型

  1. 字符串 String
  2. 哈希 hash
  3. 列表 list
  4. 集合 set
  5. 有序集合 zset

Redis操作命令

数据操作的全部命令:http://redis.cn/commands.html

查看所有数据库

config get databases

在这里插入图片描述
查看所有的数据库 数据库以0开始 一共16个
选择数据库:

select  1  #进入到数据库1

默认在 数据库 0
select num 进行数据库的切换

一、String

String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等

一个key对应一个value

1、设置键值

A、设置键值

set key value

set name "zhangsan"
B、设置键值及过期时间,以秒为单位

setex key seconds value

setex name 10 'zhangsan'
C、查看有效时间,以秒为单位

ttl key

ttl name
D、取消过期时间

persist key

persist name
E、只有在 key 不存在时设置 key 的值

setnx key value

 setnx name 'a'
E、设置多个键值

mset key value [key value ……]

mset name 'zs' age 18 	

2、key的操作

A.根据键获取值,如果键不存在则返回None(null 0 nil)

get key

get name
B、根据多个键获取多个值

mget key [key ……]

mget name age
C、返回 key 中字符串值的子字符

getrange key start end

getrange name 0 4
D、将给定 key 的值设为 value ,并返回 key 的旧值(old value)

getset key value

getset name 'x'

3、运算

要求:值是字符串类型的数字
A、将key对应的值加1

incr key

incr age
B、将key对应的值减1

decr key

decr age
C、将key对应的值加整数

incrby key intnum

incrby age 10
D、将key对应的值减整数

decrby key intnum

decrby age 10
E、获取值长度

strlen key

strlen age

key 键的操作

A、查找所有的 key

keys *

B、判断键是否存在,如果存在返回1,不存在返回0

exists key

exists name

C、查看键对应的value类型

type key

type name

D、删除键及对应的值

del key [key ……]

E、设置过期时间,以秒为单位

expire key seconds

expire age 10

F、查看有效时间,以秒为单位

ttl key

H、以毫秒为单位返回 key 的剩余的过期时间

pttl key

I、移除 key 的过期时间,key 将持久保持

persist key

J、删除所有的key

flushdb 删除当前数据库中的所有

flushall 删除所有数据库中的key

K、修改 key 的名称(仅当 newkey 不存在时,将 key 改名为 newkey)

rename key newkey

L、将key移动到指定的数据库中

Move key db

move name 1	# 将name 移动到数据库1
M、随机返回一个key

randomkey

二、hash

hash用于存储对象
{
​ name:“tom”,
​ age:18
}
Redis hash 是一个键值(key=>value)对集合。

1、设置

a、设置单个值

hset key field value

redis> hset myhash name lucky
(integer) 1
redis> HGET myhash name
"Hello"
b、设置多个值

hmset key field value [field value ……]

hmset myhash a 1 b 2 c 3
C 为哈希表 key 中的指定字段的整数值加上增量 increment

hincrby key field incrment

hincrby hh age 10
D 只有在字段 field 不存在时,设置哈希表字段的值

hsetnx key field value

 hget hh name

2、获取

A、获取一个属性的值

hget key field

hget name field1

B、获取多个属性的值

hmget key filed [filed ……]

C、获取所有字段和值

hgetall key

D、获取所有字段

hkeys key

E、获取所有值

hvals key

F、返回包含数据的个数

hlen key

3、其它

A、判断属性是否存在,存在返回1,不存在返回0

hexists key field

hexists a x

B、删除字段及值

hdel key field [field ……]

hdel a x y z

C、返回值的字符串长度 起始版本 3.2

hstrlen key field

三、 列表 list

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

1、设置

A、在头部插入

lpush key value [vlaue ……]

lpush demo 2 3`
将一个值插入到已存在的列表头部,列表不存在时操作无效

Lpushx key val

lpushx list 'a'
B、在尾部插入

rpush key value [vlaue ……]

rpush demo 2 1
为已存在的列表添加值

rpushx key val

rpushx mm 'a'	

2、获取

A、移除并返回key对应的list的第一个元素

lpop key

lpop demo
B、移除并返回key对应的list的最后一个元素

rpop key

rpop demo
C、返回存储在key的列表中的指定范围的元素

lrange key start end

lrange demo 0 -1	#查看列表中的所有元素

注意:start end都是从0开始
注意:偏移量可以是负数

3、其它

A、裁剪列表,改为原集合的一个子集

ltrim key start end

ltrim demo 1 -1	#将索引为1 到 -1的元素裁剪出来

注意:start end都是从0开始
注意:偏移量可以是负数

B、返回存储在key里的list的长度

llen key

C、返回列表中索引对应的值

lindex key index

LINDEX mylist 0

四、 集合 set

无序集合,元素类型为String类型,元素具有唯一性,不重复
{ ‘a’,‘b’}

1、设置

A、添加元素

sadd key member [member ……]

sadd set 'a' 'b' 'c'

2、获取

A、返回key集合中所有元素

smembers key

smembers set
B、返回集合元素个数

scard key

scard set
C、移除并返回集合中的一个随机元素

spop key

spop set
D、返回集合中一个或多个随机数

srandmember key count

s set		#返回一个随机元素
srandmember set 2	#返回2个随机元素
E、移除集合中一个或多个成员

srem key member1 [memkber2]

srem set 'd' 'b'ss

3、集合的其它操作

A、求多个集合的交集

sinter key [key ……]

 sinter m l	#求集合l和集合m的交集
B、求多个集合的差集

sdiff key [key ……]

sdiff m l	#求差集 注意比较顺序
D、判断元素是否在集合中,存在返回1,不存在返回0

sismember key member

sissmember m 'a'   #集合m中是否存在元素'a'

五、 有序集合 zset

  • 有序集合,元素类型为String,元素具有唯一性,不能重复
  • 每个元素都会关联一个double类型的score(表示权重),通过权重的大小排序,元素的score可以相同

1、设置

A、添加

zadd key score member [score member ……]

zadd zset 1 a 5 b 3 c 2 d 4 e
B、有序集合中对指定成员的分数加上增量 increment

Zincrby key increment mcfaember

zincrby zset 10 'a'   #给a的权重上加10

2、获取

A、返回指定范围的元素

zrange key start end

zrange z1 0 -1
B、返回元素个数

zcard key

 zcard z1
C、返回有序集合key中,score在min和max之间的元素的个数

zcount key min max

D、返回有序集合key中,成员member的score值

zscore key member

zscore l 'c'	#s返回c的权重
E、当前集合所有的值和权重

ZRANGE key 0 -1 WITHSCORES

F、返回有序集合中指定分数区间内的成员,分数由低到高排序

ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]

区间及无限

min和max可以是-inf和+inf,这样一来,你就可以在不知道有序集的最低和最高score值的情况下,使用ZRANGEBYSCORE这类命令。

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANGEBYSCORE myzset -inf +inf
1) "one"
2) "two"
3) "three"
redis> ZRANGEBYSCORE myzset 1 2
1) "one"
2) "two"

3、删除

A 从排序的集合中删除一个或多个成员

当key存在,但是其不是有序集合类型,就返回一个错误。

ZREM key member [member …]

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZREM myzset "two"
(integer) 1
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "three"
4) "3"
redis> 

密码安全

查看是否设置了密码验证,默认情况下 requirepass 参数是空的,表示无需通过密码验证就可以连接到 redis 服务

CONFIG get requirepass

修改密码

CONFIG set requirepass "123"

设置密码后,客户端连接 redis 服务就需要密码验证,否则无法执行命令

Redis 数据备份与恢复

创建当前数据库的备份

SAVE 

该命令将在 redis 安装目录中创建dump.rdb文件。

恢复数据

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
获取 redis 目录可以使用 如下命令:

CONFIG GET dir

备份数据

使用命令

BGSAVE

Python操作redis

安装

pip install redis

实例

import redis

# 普通连接   推荐使用StrictRedis
# decode_responses=True  自动解码
# 默认数据库为0 
r = redis.Redis(host='127.0.0.1',port=6379,password='123c456',db=0,decode_responses=True)
r = redis.StrictRedis(host='10.10.2.14',port=6379,password='123456',decode_responses=True)

# 连接池
"""
 管理对一个redis server的所有连接,避免每次建立,释放连接的开销。
 每个redis实例都会维护一个自己的连接池,可以直接建立一个连接池,作为参数传给redis,这样可以实现多个redis实例共享一个连接池
"""
pool = redis.ConnectionPool(host='127.0.0.1',port=6379,db=0,password='123456',decode_responses=True)
r = redis.Redis(connection_pool=pool)

# string
# 设置
print(r.set("name", "sea"))
print(r.get('name'))

# 批量设置
print(r.mset({'name':'sea', 'age': 18}))
print(r.mget('name', 'age'))

# hash
# 设置
print(r.hset("hash", "name", "sea"))
print(r.hget("hash", "name"))

# 获取所有
print(r.hgetall('hash'))

# 批量设置
print(r.hmset("myhash",{"name":"sea", "age": 18}))

# 获取所有的hash的field
print(r.hkeys("myhash"))

# 获取hash所有的值
print(r.hvals('myhash'))

# list
# 设置
print(r.lpush('list', 1, 2, 3))
print(r.rpush('list', 4, 5, 6))

# 获取
print(r.lrange('list', 0, -1))

# 元素个数
print(r.llen('list'))

# set
# 添加值
print(r.sadd('set1', 'a', 'b', 'c'))
print(r.sadd('set2', 'a', 'b', 'd'))

# 获取值
print(r.smembers('set1'))

# 元素个数
print(r.scard('set1'))

# 有序set
# 添加值
print(r.zadd('zadd', {"a": 1, 'b': 2, 'c': 3}))
print(r.zcard('zadd'))
# 返回权重
print(r.zscore('zadd', 'a'))

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

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

相关文章

故障定级和定责

故障管理的第一步是对故障的理解&#xff0c;只有正确地面对故障&#xff0c;我们才能够找到更合理的处理方式。 这便需要做两个工作&#xff1a;一是跟踪线上故障处理和组织故障复盘&#xff0c;二是制定故障定级定责标准&#xff0c;同时有权对故障做出定级和定责。 所以&a…

网上选课系统——管理员子系统的设计与实现

本系统是C/S&#xff08;客户端/服务器&#xff09;两层结构。采用C#数据库编程语言。服务器部分是SQL Server2000 关系数据库。客户端分为学生选课子系统和管理员管理子系统&#xff0c;它们通过存于后台数据库的数据产生联系。 无论是学生子系统还是管理员子系统&#xff0c…

Follow My Heart Of Apirl. 2023

This article will tell all my story in my daily file to make some deep memories in my heart for Apirl.2023. The line template: The template will be used as the mark of the storys start. 2023.04.10 Commodity n. 货物、商品、日用品 1. Global commodity prices …

《OpenCV3和Qt5计算机视觉应用开发》学习笔记

Qt Creator中使用opencv 在.pro文件中添加 INCLUDEPATH D:\MajorSoftware\opencv\opencv\build\include LIBS D:\MajorSoftware\opencv\opencv\mingw_build\lib\libopencv_*.a一个插件就是一个简单的库&#xff0c;如.dll&#xff0c;可以在运行时加载和使用插件&#xff…

基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

7针0.96寸OLED的HAL库代码(硬件SPI/全代码/stm32f1/CubeMX配置/包含有正负浮点数/100%一次点亮)

系列文章链接 HC-SR04超声波模块的使用 编码电机以及双电机驱动 4针 0.96OLED的使用 更多有意思的文章点击“我的主页” --------&#x1f610; 更多有意思的视频 -----> B站 想要亿只独角兽 --------&#x1f610; 前言 之前发布了一篇硬件I2C的0.96 OLED驱动代码&#…

全国计算机等级考试——二级JAVA完整大题题库【五十三道】

全国计算机等级考试二级 JAVA 题目内容 编写于2023.04.10 分为40道选择题和3道大题&#xff08;大题是程序填空类型&#xff09; 其中选择题只能进去做一次&#xff0c;一旦退出来则不可再进&#xff08;注意&#xff01;&#xff09;。大题可以重复进入&#xff0c;重复做。…

JavaScript【七】JavaScript中的内置顶层函数

文章目录&#x1f31f;前言&#x1f31f;内置&#x1f31f;顶层&#x1f31f;内置顶层函数&#x1f31f; Number()&#x1f31f; parseInt()&#x1f31f;parseFloat()&#x1f31f;String()&#x1f31f;Boolean()&#x1f31f; isNaN()&#x1f31f;eval()&#x1f31f;Numbe…

(详细)《美国节日》:某月的第几个星期几

目录 一、题目描述&#xff1a; 二、思路&#xff1a; 1、给定 年月日&#xff0c;如何知道这天是星期几&#xff1f; 2、已知这个月的第一天是星期几&#xff0c;如何知道第三个星期一是几号&#xff1f; 3、最后一个星期一 三、思路总结 四、代码 一、题目描述&#xf…

机器学习---集成学习报告

1.原理以及举例 1.1原理 集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习策略&#xff0c;它通过结合多个基学习器&#xff08;base learners&#xff09;的预测来提高模型的性能。集成学习的目标是创建一个比单个基学习器更准确、更稳定的最终预测模型。这…

力扣---LeetCode面试题17.04.消失的数字

文章目录前言面试题17.04.消失的数字方法一&#xff1a;方法二&#xff1a;异或解析&#xff1a;方法三&#xff1a;总结前言 我有我要赶去的远方&#xff0c;风雨兼程披星戴月 本章的内容是力扣每日随机一题的部分方法的解析 提示&#xff1a;以下是本篇文章正文内容&#xf…

安全防御 --- 恶意代码、防病毒

一、恶意代码 1、按照传播方式分类 &#xff08;1&#xff09;病毒 概念&#xff1a;病毒是一种基于硬件和操作系统的程序&#xff0c;具有感染和破坏能力&#xff0c;这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖身地&#xff0c;它是病毒传播的目的地&#xff0…

2023.04.09 学习周报

文章目录摘要文献阅读1.题目2.摘要3.简介4.本文贡献5.传统方法6.IDLSTM-EC7.实验7.1 数据集7.2 基线7.3 评估指标7.4 实验结果8.结论9.展望MDS降维算法1.基本思想2.优化目标3.数学推导4.算法流程马尔可夫链1.随机过程2.简介3.数学定义4.转移概率矩阵5.状态转移矩阵的稳定性Navi…

Python 访问 PostgreSQL

文章目录一、前言1.1 概述1.2 什么是 Psycopg二、操作 PostgreSQL2.1 连接数据库2.2 异常处理2.3 创建表2.4 INSERT 操作2.5 SELECT 操作2.6 UPDATE 操作2.7 DELETE 操作2.8 事务管理2.9 调用存储函数2.10 批量操作一、前言 1.1 概述 Python 是一种高级、通用的解释型编程语言…

排序算法之希尔排序

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;数据结构与算法 &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;快给我点赞赞&#x1f497; 文章目录1. 希尔排序2. 算法思路3. 算法实现4. 算法性能分析&#x1f49e;总结&#x1f49e;1. 希尔排…

自己再造一个大规模预训练语言模型?可以的

1. 引言 自ChatGPT发布至今已近半年&#xff0c;一路走来&#xff0c;我们可以清楚地看到的一个趋势是&#xff0c;到了下半年&#xff0c;每位研究者都会拥有一个类似ChatGPT的模型。这种现象与当年BERT推出后&#xff0c;各种BERT变体层出不穷的情况颇为相似。实际上&#x…

Prophet学习(一) Python API实现

目录 Python API 详细介绍 完整代码&#xff1a; Python API 详细介绍 Prophet遵循sklearn模型API。我们创建Prophet类的实例&#xff0c;然后调用它的fit和predict方法。 Prophet的输入总是一个有两列的数据帧:ds和y。ds(日期戳)列应该是Pandas期望的格式&#xff0c;理想…

APIs --- DOM事件进阶

1. 事件流 事件流指的是事件完整执行过程中的流动路径 任意事件被触发时总会经历两个阶段&#xff1a;【捕获阶段】和【冒泡阶段】 事件捕获 概念&#xff1a;从DOM的根元素开始去执行对应的事件&#xff08;从外到里&#xff09; 捕获阶段是【从父到子】的传导过程 代码&…

基于SSM框架开发的小区物业管理系统JavaWeb项目源码

随着信息化时代的到来&#xff0c;小区的管理也日趋完善&#xff0c;开始逐步采用信息化系统对小区业主进行管理&#xff0c;对一些业务进行线上处理。小区物业管理系统正是为了满足这种需求而诞生的&#xff0c;也有不少同学会选择该课题作为毕业设计项目选题&#xff0c;下面…

【Unity入门】9.帧更新

【Unity入门】帧更新 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;获取挂载对象的属性信息 &#xff08;1&#xff09;获取名字信息 首先在C#代码中&#xff0c;this代表着脚本本身&#…