redis
redis 介绍
c s 架构的软件
cs架构即Client/Server架构,即客户端/服务器架构
-
redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。
它通过提供多种键值数据类型来适应不同场景下的存储需求,
目前为止Redis支持的键值数据类型有:字符串类型 散列类型 列表类型 集合类型,
端口默认为6379
-
nosql
指非关系型数据库:
1.不限于SQL
2.没有sql
redis 为什么这么快
1.具有高性能的网络模型:IO多路复用的epoll模型,承载了非常高的并发量
2.纯内存操作,避免了很多IO
3.单线程架构,避免了线程间切换的消耗
注:redis在6.x版本之前是单线程,单进程,在6.x版本之后,是多线程架构,数据操作还是使用的单线程,别的现成做数据的持久化,其他现成进行其他操作
redis的应用场景
-
当缓存数据库使用
1.请求进入视图后去做数据的查询[多表查询,去硬盘取数据:速度慢] 然后转成json格式字符串返回给前端
2.请求进到视图---》去redis[内存]----》取json格式字符串---》返回给前端
-
做计数器
由于redis是单线程,不存在并发安全问题故而可以当作计数器使用
场景:①统计网站的访问量,② 个人站点的浏览量,③文章的阅读量
-
去重操作
集合
-
排行榜
有序集合
场景:①阅读排行榜,②金币排行榜 ……
-
布隆过滤器
-
抽奖
-
消息队列
Redis的特性
- 高性能:支持超过 100K+ 每秒的读写频率。
- 支持多种数据类型:除了key-value类型的数据,同时还提供String,List,Set,hash,以及Ordered Set等数据结构的存储。
- 原子性:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
- 数据持久化:可以将内存中的数据保存在磁盘中,在服务器宕机或者重启时,可以重新读取使用。
- 单线程:避免了不必要的上下文切换以及加锁导致的一系列性能问题。
- 功能丰富:Redis还支持 publish/subscribe, 通知, key 过期等等特性。
redis 的安装
redis是开源软件,他是使用C语言所编写
是编译型语言,在操作系统运行,要编译成可执行文件,由于采用了IO多路复用的epoll模型,所以它不支持windows,只有linux操作系统支持epoll
由微软官方将其更改编译成了可执行的安装包,但版本没有最新版
官网
-
redis的官网:https://redis.io/
下载完是源代码:c语言源码 :https://redis.io/download/#redis-stack-downloads
最稳定:6.x,最新7.x
-
redis的中文网:http://redis.cn/download.html
上面最新只到5.x
win版本的下载地址
最新5.x版本 https://github.com/tporadowski/redis/releases/
最新3.x版本 https://github.com/microsoftarchive/redis/releases
下载完一路下一步即可,具体可参照:https://www.cnblogs.com/liuqingzheng/p/9831331.html
win装完会有redis服务
建议启动服务,手动停止
客户端连接redis命令:redis-cli -h 127.0.0.1 -p 6379
-
简单的命令
set name lqz # 创建名字 get name # 打印名字 ping #ping通主机
-
停掉服务的方法
1.去win服务点关闭
2.在客户端中输入命令
shutdown
关闭
python操作redis
1.在pycharm上安装redis
安装命令:pip3 install redis
2.创建一个测试脚本,代码如下:
from redis import Redis
connent = Redis(host="localhost", port=6379)
# connent.set('name', 'tony')
print(connent.get('name'))
connent.close()
redis连接池
POOL.py
import redis
pool = redis.ConnectionPool(max_connections=200, host='127.0.0.1', port=6379)
redis_pool_test.py
from redis import Redis
from threading import Thread
# 直接连接
# def get_name_from_redis():
# conn = Redis(host="localhost", port=6379)
# print(conn.get('name'))
# conn.close()
#
#
# for i in range(100):
# t=Thread(target=get_name_from_redis)
# t.start()
#
#
# import time
# time.sleep(10)
# 使用连接池链接
import redis
from POOL import pool
def get_name_from_redis():
# 创建一个连接池,保证它是单例,全局只有一个pool对象:使用模块导入方式实现单例
conn = redis.Redis(connection_pool=pool) # 每执行一次会从池中取一个链接,如果没有则等待
res=conn.get('name')
print(res)
conn.close()
for i in range(100):
t=Thread(target=get_name_from_redis)
t.start()
import time
time.sleep(10)
标签:name,get,redis,Redis,import,pool
From: https://www.cnblogs.com/nirvana001/p/16890563.html