linux安装单机版redis详细步骤,及python连接redis案例
文章目录
- linux相关工具
- yum方式安装redis
- 使用编译安装redis
- 配置redis为systemctl启动
- 其它: 安装redis6.0
- python连接redis案例
linux相关工具
./redis-benchmark #用于进行redis性能测试的工具
./redis-check-dump #用于修复出问题的dump.rdb文件
./redis-cli #redis的客户端
./redis-server #redis的服务端
./redis-check-aof #用于修复出问题的AOF文件
./redis-sentinel #用于集群管理
yum方式安装redis
yum安装版本固定,不能达到我们的需求
yum -y install redis
使用编译安装redis
mkdir -p /data/application //创建工作目录cd /data/application
wget http://download.redis.io/releases/redis-5.0.10.tar.gz //下载redistar xf redis-5.0.10.tar.gz //解压mv redis-5.0.10/ rediscd redis/yum install -y gcc make //安装编译工具make //编译安装cp redis.conf redis.conf.bak //备份编译后的配置文件vim redis.conf //配置文件
bind 0.0.0.0 #所有ip可以访问
daemonize yes #开启后台模式将on改为yes
timeout 300 #连接超时时间
port 6379 #端口号
dir /data/application/redis/data #本地数据库存放持久化数据的目录该目录-----需要存在
pidfile /var/run/redis_6379.pid #定义pid文件存放位置
logfile /var/log/redis.log #定义log文件存放位置创建存放数据的目录
mkdir -p /data/application/redis/data
配置redis为systemctl启动
cd /lib/systemd/system
vim redis.service[Unit]
Description=Redis
After=network.target[Service]
ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf --daemonize no
ExecStop=/data/application/redis/src/redis-cli shutdown [Install]
WantedBy=multi-user.target
===================================
参数详解:
[Unit] 表示这是基础信息
Description 是描述
After 是在那个服务后面启动,一般是网络服务启动后启动[Service] 表示这里是服务信息
ExecStart 是启动服务的命令
ExecStop 是停止服务的指令[Install] 表示这是是安装相关信息
WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
=====================================
启动服务:
systemctl daemon-reload
systemctl start redis.service配置环境变量启动
vim /etc/profile
export PATH=$PATH:/redis文件目录/srcsource /etc/profile 刷新环境变量文件启动
redis/src/redis-server redis/redis.conf --daemonize yes //本机停止
redis/src/redis-cli shutdown //本机
redis/src/redis-cli -h ip -p 端口 shutdown
其它: 安装redis6.0
# 下载压缩包
wget https://download.redis.io/releases/redis-6.2.1.tar.gz# 解压
tar xzf redis-6.2.1.tar.gz# 进入压缩包
cd redis-6.2.1# 编译安装
make# 终端启动
src/redis-server# 进入redis终端界面
src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"# 启动,进入redis安装目录: /home/xxx/redis-6.2.1 ,执行:
nohup src/redis-server &# 关闭保护模式和设置密码,如下设置密码为:redisxxx,然后退出
src/redis-cli
redis>config get protected-mode
redis>config set protected-mode no
redis>config get requirepass
redis>config set requirepass "redisxxx"
redis>quit# 再访问终端时需要加上密码
src/redis-cli -a redisxxx
python连接redis案例
# -*- encoding: utf-8 -*-
import time
import redis# 连接方式一: 直接连接Redis数据库
client = redis.Redis(host='123.56.xx.xx', port=6379, password='redisredis', db=2, decode_responses=True)
# print(client)
# 连接方式二: 创建Redis连接池,用于管理所有连接,避免每次建立、释放连接的开销
# pool = redis.ConnectionPool(host='123.56.67.212', port=6379, decode_responses=True)
# client = redis.Redis(connection_pool=pool)# 连接数据库
# client = redis.StrictRedis(host='123.56.67.212', port=6379, password='redisredis', db=1)def write_str():"""# 写入字符串类型的数据"""client.set('name11', 'Django11')# 获取name的数据print('获取数据方法一:', client['name11'])# print('获取数据方法二:', client.get('name'), client.get('name').decode())client.set(name='string', value='Python')# 获取字符串的数据print('获取字符串的数据:', client['string'])print('获取字符串的数据:', client.get('string'))def write_hset():# 写入散列类型的数据# client.hset(name='hash', key='name', value='Tom')# client.hset(name='hash', key='age', value=10)# client.hset(name='hash', key='address', value='UK')# # 获取散列的数据# print('获取散列的数据:', client.hget(name='hash', key='name'))with client.pipeline(transaction=False) as pipe:start = time.time()for i in range(1, 10000):pipe.lpush('num_data', f'num{i}')# pipe.hset()if i % 100 == 0:try:res = pipe.execute()print(res)except Exception as e:print(e)print("程序耗时:", time.time() - start)# # 创建管道对象# pipe = client.pipeline()# client.hset(name='my_hmset', key='zhangsan', value=0)# client.hset(name='lisi', key='zhangsan', value=0)# client.hset(name='wangwu', key='zhangsan', value=0)# client.hset(name='zhaoliu', key='zhangsan', value=0)# ret = pipe.execute()## client.hset(name='data_type', key='size', value='Tom')# client.hset(name='data_type', key='num', value=10)# # 获取散列的数据# print('获取散列的数据:', client.hget(name='hash', key='name'))def write_list():# 写入列表类型的数据: 将元素写入列表的左边client.lpush('list', 'Mr Li', 'Miss Lu')# 将元素写入列表的右边client.rpush('list', 'Miss Wang', 'Mir Zhang')# 获取列表的数据# lpop()从最左边获取元素,数据获取后在数据库中移除print('获取列表的数据:', client.lpop('list'))# rpop()从最右边获取元素,数据获取后在数据库中移除print('获取列表的数据:', client.rpop('list'))def write_set():# 写入集合类型的数据client.sadd('set', 'UK', 'CN', 'US', 'JP')# 获取集合的数据print('获取集合的数据:', client.smembers('set'))# # 写入有序集合类型的数据,每个数据设有权重,权重以整数表示# client.zadd(name='sord_set', mapping={'GZ': 1, 'BJ': 2, 'SZ': 3, 'SH': 4})# # 获取有序集合的数据# print('获取有序集合的数据:', client.zrange('sord_set', 0, -1))def write_bytes():# 写入位图类型的数据# 将bytes的数据设为字符串数据client.set(name='bytes', value='Python')print('二进制数据的第二位数为:', client.getbit(name='bytes', offset=1))# setbit()将字符串数据转为二进制数据,然后将第二位数改为0client.setbit(name='bytes', offset=1, value=0)def write_stream():# 写入流类型的数据stream_id = client.xadd(name='stream', fields={'name': 'Tom'})# 获取流数据的idprint('获取流数据的id:', stream_id)stream_id = client.xadd(name='stream', fields={'msg': 'Hello Python'})# 获取流数据的idprint('获取流数据的id:', stream_id)if __name__ == '__main__':# write_str()# write_hset()# write_list()write_set()# write_bytes()# write_stream()相关文章:
linux安装单机版redis详细步骤,及python连接redis案例
文章目录 linux相关工具yum方式安装redis使用编译安装redis配置redis为systemctl启动其它: 安装redis6.0python连接redis案例 linux相关工具 ./redis-benchmark #用于进行redis性能测试的工具 ./redis-check-dump #用于修复出问题的dump.rdb文件 ./redis-cli …...
ts总结大全
ts类型 TS类型除了原始js类型之外,还增加类型,例如:枚举、接口、泛型、字面量、自定义、类型断言、any、类型声明文件 数组类型两种写法:类型 [] 或 Array <类型> let arr:number[][1,2,3,4] let arr:string[][a] let arr…...
前端登录随机数字字母组合验证
背景:系统登录页面只有用户名密码一种校验方式,没有验证码,可能导致暴力破解。 实现逻辑: <el-form-item prop="code"><el-inputv-model="loginForm.captchaCode"auto-complete="off"placeholder="验证码"style="wi…...
基于Java+SpringBoot+vue+elementui 实现即时通讯管理系统
目录 系统简介效果图源码结构试用地址源码下载地址技术交流 博主介绍: 计算机科班人,全栈工程师,掌握C、C#、Java、Python、Android等主流编程语言,同时也熟练掌握mysql、oracle、sqlserver等主流数据库,能够为大家提供…...
代码随想录算法训练营第50天(动态规划07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数
动态规划part07 70. 爬楼梯 (进阶)解题思路总结 322. 零钱兑换解题思路总结 279.完全平方数解题思路 70. 爬楼梯 (进阶) 这道题目 爬楼梯之前我们做过,这次再用完全背包的思路来分析一遍 文章讲解: 70. 爬…...
【软考问题】-- 13 - 知识精讲 - 项目绩效域管理
一、基本问题 问题1:干系人绩效域的预期目标主要包含什么? ①与干系人建立高效的工作关系;②干系人认同项目目标;③支持项目的干系人提高了满意度,并从中收益;④反对项目的干系人没有对项目产生负面影响。问…...
VSCode无法连接远程服务器的两种解决方法
文章目录 VSCode Terminal 报错解决方式1解决方式2you are connected to an OS version that is unsupported by Visual Studio Code解决方法 VSCode Terminal 报错 直接在terminal或cmd中使用ssh命令可以连接服务器,但是在vscode中存在报错,最后一行为…...
【Kuiperinfer】笔记01 项目预览与环境配置
学习目标 实现一个深度学习推理框架设计、编写一个计算图实现常见的算子,例如卷积、池化、全连接学会如何进行算子的优化加速使用自己的推理框架推理常见模型,检查结果是否能够和torch对齐 什么是推理框架? 推理框架用于对已经训练完成的模…...
都2024了,你还在使用websocket实现实时消息推送吗?
前言 在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能等等。 本文主要介绍SSE的使用场景和如何使用SSE。 服务端向客户端推送数据的实现…...
javaScript实现客户端直连华为云OBS实现文件上传、断点续传、断网重传
写在前面:在做这个调研时我遇到的需求是前端直接对接华为云平台实现文件上传功能。上传视频文件通常十几个G、客户工作环境网络较差KB/s,且保证上传是稳定的,支持网络异常断点重试、文件断开支持二次拖入自动重传等。综合考虑使用的华为云的分…...
微信小程序:实现微信小程序应用首页开发 (本地生活首页)
文章目录 小程序应用页面开发1、创建项目并配置项目目录结构配置导航栏效果三、配置 tabBar 效果四、轮播图实现4.1 创建轮播图数据容器4.2 定义一个请求轮播图数据的接口4.3 页面加载调用 数据请求接口 五、九宫格实现5.1 获取九宫格数据5.2 结构和样式的完善六、图片布局实现…...
【JavaScript】原型链和继承
文章目录 1. 原型链的概念原型原型链 2. 构建原型链构造函数与原型实例与原型链 3. 继承的实现原型链继承原型链的问题 4. 继承的最佳实践构造函数继承(经典继承)组合继承 5. ES6中的类和继承6. 总结 在 JavaScript 中,原型链和继承是构建对象…...
(二)【Jmeter】专栏实战项目靶场drupal部署
该专栏后续实战示例,都以该篇部署的项目展开操作。 前置条件 参考“(一)【Jmeter】JDK及Jmeter的安装部署及简单配置” 安装部署Jmeter,从文章最后下载“Postman、Rancher.ova、VirtualBox-7.0.12-159484-Win.exe、Xshell-7.0.01…...
使用 ChatGPT系统学习一门知识的技巧
如何使用 ChatGPT 高效学习一门知识?我探索到一种比较高效的方式:首先让 ChatGPT 给你一个学习提纲,然后以此把提纲内容逐个发给 ChatGPT,进行详情学习。 下面以“学习八木天线”工作原理为例说明。 以八木天线为切入点࿰…...
IDEA-常用插件
1、Mybatis Log Free 当我们使用mybatis log在控制台输出sql 内容,输出内容将语句与参数分开打印,还需要手动将参数替换到指定位置。 使用对应插件后,自动将输出内容组装成完整的可直接执行的SQL 在插件市场 查看对应名称,并安装。…...
揭秘:一行代码搞定.Net API高并发的烦恼
高并发下的接口请求重复提交问题 在.Net开发中,我们经常遇到用户疯狂点击同一按钮,或者服务响应慢时重复发送请求,导致数据重复添加或混乱。这不仅浪费资源,更会得到错误的业务结果。如何高效解决这一普遍问题呢? 常规…...
SpringBoot的 8 个优点
目录 1、简化配置 2、快速开发 3、微服务支持 4、内嵌服务器 5、健康监测 6、热部署 7、自动化管理 8、社区支持和生态系统 SpringBoot 是一个基于 Spring 框架的快速开发框架,它通过提供一系列的自动配置、约定优于配置、快速集成等功能,简化了…...
Spark中多分区写文件前可以不排序么
背景 Spark 3.5.0 目前 Spark中的实现中,对于多分区的写入默认会先排序,这是没必要的。可以设置spark.sql.maxConcurrentOutputFileWriters 为大于0来避免排序。 分析 这部分主要分为三个部分: 一个是V1Writes规则的重改; 另一个是FileFormatWriter中…...
突破编程_C++_面试(变量与常量)
面试题 1 : C 中的变量存储类别有哪些,并简要描述它们的特点? 在C中,变量的存储类别决定了变量的生命周期和可见性。以下是C中的几种变量存储类别及其特点: 自动存储期 也称为局部存储类别。这类变量在函数或代码块…...
k8s的一些关键信息(归类摘抄,非提炼)
零:举例说明 当用户提交一个 Deployment 对象到 Kubernetes 集群时,控制平面的 API Server 接收到该请求,并将其转发给 Controller Manager。Controller Manager 中的 Deployment Controller 监听到该请求,并根据用户定义的配置信…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
