本文介绍: Redis(Remote Dictionary Server远程字典服务) 是一个使用ANSI C编写开源支持网络基于内存、可选持久性键值存储数据库,是NoSQL数据库(非关系型)。redis出现主要是为了替代早期的Memcache缓存系统的。map内存型(数据存放在内存中)的非关系型(nosql)keyvalue(键值存储)数据库

前言

学习爬虫而言,对于三种常见数据库做个基本了解足以,所以笔记都是浅尝辄止,不会涉及太深入的东西。

redis简介

Redis(Remote Dictionary Server ,远程字典服务) 是一个使用ANSI C编写开源支持网络基于内存、可选持久性键值存储数据库,是NoSQL数据库(非关系型)。

————–>>>>>

redis出现主要是为了替代早期的Memcache缓存系统的。map内存型(数据存放在内存中)的非关系型(nosql)keyvalue(键值存储)数据库。
支持数据持久化(基于RDB和AOF,注: 数据持久化时将数据存放文件中,每次启动redis之后会先将文件中数据加载到内存,经常用来缓存数据共享购物车消息队列计数器限流等。(最基本就是缓存一些经常用到的数据,提高读写速度)

redis特性

速度
持久
● 多种数据结构
支持多种编程语言
主从复制
● 高可用、分布式

Redis的数据类型及主要特性

Redis提供的数据类型主要分为5种自有类型和一种自定义类型

这5种自有类型包括:String类型哈希类型列表类型集合类型顺序集合类型

例如下:

#很像python的一个大字典redis={
"name":"hailey",                      #String类型
"age":"23",                           #String--数字类型
"scors":[78,79,98,],                  #list类型
"info":{"gender":"male","tel":"110"}, #哈希类型,键值结构嵌套键值
"set":{1,2,3},                        #集合类型              
"zset":{1,2,3,}                       #有序集合
}

 Redis的应用场景

缓存系统(“热点”数据:高频读、低频写):缓存用户信息,优惠券过期时间验证码过期时间sessiontoken等。
计数器帖子浏览数,视频播放次数评论次数点赞次数等
消息队列秒杀系统
● 社交网络粉丝、共同好友可能认识的人),兴趣爱好(推荐商品
排行榜有序集合
发布订阅粉丝关注消息通知

————————————-

在实际中,Redis常和mysql一起使用,通常先把数据存储在Redis,再同步mysql查询时候也是先从Redis中进行查询例如时候网站修改名字刷新时候更新成功,就是因为还在缓存。主要图Redis存储特别快。

redis环境安装

官方原版: https://redis.io/

虽然 Redis 官方网站没有提供 Windows 版的安装包,但可以通过 GitHub下载 Windows 版 Redis 安装包

下载地址点击前往

=====================================================================

安装时一路next

到“ Destination Folder界面选择安装目录勾选add path全局变量

ort Number and Firewall Exception端口号默认:6379

“Memory Limit”勾选“Set the Max Memory lmit”可修改Max Memory MB,即redis占用内存的限制

下面详细记录windows完整安装步骤

 ❶ 进入GitHub开始下载

解压zip安装包解压后的文件目录

创建Redis临时服务

双击启动服务端程序redis.server.exe,界面如下

上图中显示一些 Redis 的相关信息,比如 Redis 的版本号以及默认端口号(6379)。

注意,为了实现后续操作需要保持服务端开启状态,否则客户端无法正常工作。 

双击启动客户端程序redis.cli.exe,界面如下说明 Redis 本地客户端服务端连接成功。

命令创建Redis服务

上述方式虽然简单快捷,但是显然不是程序员操作,下面介绍通过命令启动 Redis 服务端,并将 Redis 服务添加到 Windows 资源管理器实现开机自动启动

注册Redis服务

通过 CMD 命令行工具进入 Redis 安装目录,将 Redis 服务注册到 Windows 服务中,执行以下命令:

redis-server.exe --service-install redis.windows.conf --loglevel verbose

执行输出8060这两行,说明注册成功:

启动Redis服务

执行以下命令启动 Redis 服务,命令如下

redis-server --service-start

执行启动后,如下所示

注意:

此时 Redis 已经被添加到 Windows 服务中(cmd输入services.msc),因此不会再显示 Redis 服务端的相应的信息:

启动Redis客户端

在 CMD 命令行输出 redis-cli 命令启动客户

redis-cli

如下

检查是否连接成功

测试客户端和服务端是否成功连接输出PING命令,若返回PONG则证明成功连接:

配置环境变量

电脑 -> 右击“属性” -> 高级系统设置 -> 环境变量 ->系统变量(s) -> 双击path -> 新建填写路径

安装命令总结

安装服务:redis-server --service-install
卸载服务:redis-server --service-uninstall
开启服务:redis-server --service-start
停止服务:redis-server --service-stop
服务端启动时重命名redis-server --service-start --service-name Redis1

Python操作redis

连接redis

python中有一个专门的redis第三

还是需要先进行安装:pip install redis

引用import redis

链接方式1:

import redis(在python中improt之前,本地还是需要先进行安装redis)

r = redis.Redis(host='本地ip', port=6379)  #本机链接也可省略hostport
r.set('foo', 'Bar')    #写入数据
print(r.get('foo'))    #获取数据

链接方式2:

import redis
 
pool = redis.ConnectionPool(host='服务器ip', port=6379)  #远程链接必须写
r = redis.Redis(connection_pool=pool)
r.set('bar', 'Foo')        #写入数据
print(r.get('bar'))        #获取数据

通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接,一般情况下, 这是没问题的, 但当并发比较高的时候, 频繁的连接创建和释放对性能会有较高的影响

于是, 连接池就发挥作用了。连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用于后续的其他redis操作

这样就达到了避免频繁的redis连接创建和释放的目的, 从而提高性能

数据类型操作

(1) 字符串操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
#字符串操作:不允许对已经存在的键设置值
ret = r.setnx("name", "eric")
print(ret)  # False
 
 
#设置键有效期
r.setex("good_1001", 10, "2")
 
 
#字符串操作:自增自减
r.set("age", 20)
r.incrby("age", 2)
print(r.get("age"))  # b'22'

(2) hash操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
 
 
r.hset("info", "name", "rain")
print(r.hget("info", "name"))  # b'rain'
r.hmset("info", {"gedner": "male", "age": 22})
print(r.hgetall("info"))  # {b'name': b'rain', b'gender': b'male', b'age': b'22'}

(3) list操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
 
r.rpush("scores", "100", "90", "80")
r.rpush("scores", "70")
r.lpush("scores", "120")
print(r.lrange("scores", 0, -1))  # ['120', '100', '90', '80', '70']
r.linsert("scores", "AFTER", "100", 95)
print(r.lrange("scores", 0, -1))  # ['120', '100', '95', '90', '80', '70']
print(r.lpop("scores"))  # 120
print(r.rpop("scores"))  # 70
print(r.lindex("scores", 1)) # '95'

(4) 集合操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
 
# key对应集合添加元素
r.sadd("name_set", "zhangsan", "lisi", "wangwu")
# 获取key对应集合的所有成员
print(r.smembers("name_set"))  # {'lisi', 'zhangsan', 'wangwu'}
# 从key对应集合随机获取 numbers 个元素
print(r.srandmember("name_set", 2))
r.srem("name_set", "lisi")
print(r.smembers("name_set"))  # {'wangwu', 'zhangsan'}

(5) 有序集合操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
# 在key对应的有序集合中添加元素
r.zadd("jifenbang", {"yuan": 78, "rain": 20, "alvin": 89, "eric": 45})
# 按照索引范围获取key对应的有序集合的元素
# zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
print(r.zrange("jifenbang", 0, -1))  # ['rain', 'eric', 'yuan', 'alvin']
print(r.zrange("jifenbang", 0, -1, withscores=True))  # ['rain', 'eric', 'yuan', 'alvin']
print(r.zrevrange("jifenbang", 0, -1, withscores=True))  # ['rain', 'eric', 'yuan', 'alvin']
 
 
print(r.zrangebyscore("jifenbang", 0, 100))
print(r.zrangebyscore("jifenbang", 0, 100, start=0, num=1))
 
# 删除key对应的有序集合中值是values成员
print(r.zrem("jifenbang", "yuan"))  # 删除成功返回1
print(r.zrange("jifenbang", 0, -1))  # ['rain', 'eric', 'alvin']

(6) 键操作

import redis
 
pool = redis.ConnectionPool(host='ip', port=6379, db=0, decode_responses=True)
r = redis.Redis(connection_pool=pool)
 
 
r.delete("scores")
print(r.exists("scores"))
print(r.keys("*"))
r.expire("name",10)

 

原文地址:https://blog.csdn.net/weixin_54104072/article/details/134768836

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38030.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注