redis

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的特性

  1. 高性能:支持超过 100K+ 每秒的读写频率。
  2. 支持多种数据类型:除了key-value类型的数据,同时还提供String,List,Set,hash,以及Ordered Set等数据结构的存储。
  3. 原子性:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  4. 数据持久化:可以将内存中的数据保存在磁盘中,在服务器宕机或者重启时,可以重新读取使用。
  5. 单线程:避免了不必要的上下文切换以及加锁导致的一系列性能问题。
  6. 功能丰富:Redis还支持 publish/subscribe, 通知, key 过期等等特性。

redis 的安装

redis是开源软件,他是使用C语言所编写

是编译型语言,在操作系统运行,要编译成可执行文件,由于采用了IO多路复用的epoll模型,所以它不支持windows,只有linux操作系统支持epoll

由微软官方将其更改编译成了可执行的安装包,但版本没有最新版

官网

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)
posted @ 2022-11-14 21:43  Nirvana*  阅读(24)  评论(0)    收藏  举报