luffy-09/redis

2023-05-16

这里写目录标题

  • 一.昨日回顾
  • 二.今日内容
    • 1.redis介绍
    • 2.redis的Windows安装和配置
    • 3.普通链接和连接池
      • 3.1代码
      • 3.2redis_pool.py
    • 4.redis之string操作
    • 5.redis之hash操作

一.昨日回顾

1 腾讯短信平台封装,配置信息不要写死,放到配置文件中,设置成常量
2 发送短信验证码的接口
	-get
	-如何防止被盗用:1 频率限制,ip限制 2 集成第三方认证
	-验证码保存到缓存中(原来session中)
3 验证码登录接口
	-post--->手机号和验证码--->验证码合法,手机号是注册用户--->签发token
4 验证码+手机号+密码注册
	-post--->注册用户,用户名设置成了手机号
5 注册功能前后端打通

二.今日内容

1.redis介绍

0 cs架构,key-value存储(没有表,各种关系)
1 redis--->是存储数据的软件,跟语言无关,纯内存数据库(所有数据都放在内存中)
2 速度非常快,支持的数据类型多样(5大数据类型:字符串,列表,字典,集合,有序集合)
3 Memcached和redis比较
	-redis是单线程,单进程,数据类型丰富(只针对于redis6.0以下)
	-memcache多线程多进程,数据类型单一
3.1 redis为什么单线程,单进程速度这么快?
	-10w,生产环境单机6w左右
	-1 纯内存数据库
	-2 io多路复用,epoll模型(Linux上支持),Windows上支持select
	-3 单线程单进程,避免了线程间切换
4 redis:开源软件,c语言写的,早期版本2w3千行,对Windows不支持 
	6.0.6
	-在不同平台编译--->可执行文件--->执行
	-Windows官方:又有大神把源码,在Windows上编译-->可以运行在Windows上(3.x)

2.redis的Windows安装和配置

1 https://github.com/microsoftarchive/redis/releases
    Redis-x64-3.2.100.msi:一路下一步,安装完成
2 6379:端口号
3 自动创建服务,服务运行
	本质是一条命令:redis-server redis.Windows-service.conf
	redis-server 配置文件
4 手动启动redis的服务端
	redis-server:服务端   
    	redis-server:就启动了,但是使用的是默认配置
        redis-server 配置文件:以该配置文件启动
    redis-cli:客户端
    	redis-cli:默认连接到本地的6379端口
        redis-cli -h 127.0.0.1 -p 6379
    图形化客户端:
    	redis-desktop-manager:图形化客户端(收费)

3.普通链接和连接池

1 使用python连接redis
2 pip3 install redis
3 使用python代码连接redis服务端,python代码就是客户端,跟使用图形化界面是一样的
	GUI---》可以开发出图形化界面的redis客户端

3.1代码

# 1 普通连接
# from redis import Redis
# # 拿到一个redis连接
# # conn=Redis()
# conn=Redis(host='127.0.0.1', port=6379)
#
# # 使用连接操作
# conn.set('age','18')
# conn.close()



# 2 连接池
# import redis
# # 创建出一个连接池
# pool = redis.ConnectionPool(host='127.0.0.1', port=6379,max_connections=100)
# # 从连接池中拿一个连接
# conn = redis.Redis(connection_pool=pool)
# conn.set('foo', 'Bar')
#
# conn.close()


# 实际应用
import redis
from redis_pool import POOL  # Pool是单例,
conn=redis.Redis(connection_pool=POOL)
conn.set('age',18)
conn.close()

3.2redis_pool.py

import redis
POOL=redis.ConnectionPool(host='127.0.0.1', port=6379,max_connections=100)

4.redis之string操作




# 字符串,列表,字典

import redis
conn=redis.Redis()
###  1 set 的使用
# name:key值
# value:value值
# ex:过期时间,按秒记
# px:过期时间(毫秒)
# nx:如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
# xx:如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值
# conn.set('name','egon')
# conn.set('name','lqz',nx=True)
# conn.set('name','lqz',xx=True)
# conn.set('age','18',xx=True)


## 2 get
# res=conn.get('name')
# print(res)  # 返回的数据是byte格式


##3 setnx(name, value)
# 设置值,只有name不存在时,执行设置操作(添加),如果存在,不会修改
# conn.setnx('name','egon')

##4 setex(name, time,value, )
# conn.setex('name',3,'egon')


## 5 mset

# conn.mset({'name':'lqz','age':19,'sex':'男'})
## 6 mget

# res=conn.mget('name','age')
# res=conn.mget(['name','age'])
# print(res)


## 7 getset(name, value)
# 一次网络io,完成了取值和设置
# res=conn.getset('name','egon')
# print(res)

## 8 getrange(key, start, end)

# 前闭后闭区间
# res=conn.getrange('name',0,4)
# 最终效果跟上面一样
# res=conn.get('name').decode('utf-8')
# print(res[0:5])
# print(res)


# setrange(name, offset, value)
# conn.setrange('name',0,'tt')
# conn.setrange('name',5,'tt')
# conn.setrange('name',7,'ttttttttttttttttttttttttt')


# setbit(name, offset, value)
# conn.set('n1','foo')
#那么字符串foo的二进制表示为:01100110 01101111 01101111
# conn.setbit('n1',7,1)
# #那么字符串foo的二进制表示为:01100111 01101111 01101111
# res=conn.get('n1')

# getbit(name, offset)
# 获取bit位的第几个位置,看是1还是0
# res=conn.getbit('n1',7)
# print(res)


# bitcount(key, start=None, end=None)
# end:指的是bytes,前闭后闭区间
# res=conn.bitcount('n1',0,1)
# print(res)



### incr 重点
# 每次自增1
# 统计网页访问量,文章阅读量,粉丝数量,计数相关(不会存在并发安全的问题)
# conn.incr('age',-2)
# res=conn.get('age')

# conn.decr('age')
# res=conn.get('age')
# print(res)


# append
# conn.append('name','lqz')
#
# res=conn.get('name')
# print(res)
#
# conn.close()


## 总结
# set:超时时间,nx,xx
# get
# mset
# mget
# incr
# decr
# getrange
# setrange
# append


5.redis之hash操作

字典(字典,在内存中如何存储的),hash类型

import redis
conn=redis.Redis()

# hset
# conn.hset('userinfo','name','lqz')
# conn.hset('userinfo','age','18')
# conn.hset('userinfo','sex','男')

# hmset
# conn.hmset('userinfo_2',{'name':'egon','age':18,'sex':'男'})

#hget
# res=conn.hget('userinfo','name')

# hmget
# res=conn.hmget('userinfo','age','name')
# res=conn.hmget('userinfo',['age','name'])

# hgetall
# res=conn.hgetall('userinfo')


# hlen(name)
# res=conn.hlen('userinfo')

# hkeys(name)
# res=conn.hkeys('userinfo')
# hvals(name)
# res=conn.hvals('userinfo')


# hexists(name, key)
# res=conn.hexists('userinfo','hobby')
# res=conn.hexists('userinfo','name')

#hdel
# res=conn.hdel('userinfo','name','age')

#hincrby
# res=conn.hset('userinfo','age',19)
# conn.hincrby('userinfo','age')
# res=conn.hget('userinfo','age')


# hscan

# for i in range(1000):
#     conn.hset('test','test_'+str(i),str(i))

# 不建议使用
# res=conn.hgetall('test')

# 不怎么用

# name,redis的name
# cursor,游标(基于游标分批取获取数据)
# match,匹配指定key,默认None 表示所有的key
# count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数


res=conn.hscan('test',cursor=478,count=500)
print(res)
# print(len(res[1]))

# hscan_iter

# res=conn.hscan_iter('test',count=10)



# 以后要使用hgetall的时候,要使用如下方式
for item in conn.hscan_iter('test',count=10):
    print(item)


# print(res)


conn.close()



## 总结
'''
hset
hget
hmset
hmget
hincrby
hdel
hexists

hscan_iter/hgetall 区分

'''

参考博客:(更加详细)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

luffy-09/redis 的相关文章

  • Spring RedisTemplate:8次调用后方法键挂起

    我使用 Spring RedisTemplate spring data redis 1 7 1 与 Redis 进行通信 我需要通过正则表达式获取然后删除键 例如 context user1 我用的方法 RedisTemplate key
  • python 3.5 中的 json.loads 和 Redis

    我使用 json dumps 创建了一个 JSON 对象 并在 Redis 列表中将其 RPUSH ed 当使用 LRANGE redis lrange 返回 JSON 时 我收到一个二进制字符串 b si 00 ff 所以 json lo
  • 如何让客户端下载动态生成的非常大的文件

    我有一个导出功能 可以读取整个数据库并创建一个包含所有记录的 xls 文件 然后文件被发送到客户端 当然 导出完整数据库的时间需要大量时间 并且请求很快就会以超时错误结束 处理这种情况的最佳解决方案是什么 例如 我听说过使用 Redis 创
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • 库存管理系统的 SQL 与 NoSQL

    我正在开发一个基于 JAVA 的网络应用程序 主要目的是拥有在多个称为渠道的网站上销售的产品的库存 我们将担任所有这些渠道的管理者 我们需要的是 用于管理每个渠道的库存更新的队列 库存表 其中包含每个通道上分配的正确快照 将会话 ID 和其
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • redis-cli 重定向到 127.0.0.1

    我在PC1上启动Redis集群 然后在PC2上连接它 当需要重定向到另一个集群节点时 它会显示Redirected to slot 7785 located at 127 0 0 1 但应该显示Redirected to slot 7785
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • 无法启动redis.service:单元redis-server.service被屏蔽

    我在 ubuntu 16 04 上安装了 Redis 服务器 但是当我尝试使用启动redis服务时 sudo systemctl start redis 我收到消息 Failed to start redis service Unit re
  • Redis发布/订阅:查看当前订阅了哪些频道

    我目前有兴趣查看我拥有的 Redis 发布 订阅应用程序中订阅了哪些频道 当客户端连接到我们的服务器时 我们将它们注册到如下所示的通道 user user id 这样做的原因是我希望能够看到谁 在线 目前 我在不知道客户端是否在线的情况下盲
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • Redis Cluster 与 Pub/Sub 中的 ZeroMQ,用于水平扩展的分布式系统

    如果我要设计一个巨大的分布式系统 其吞吐量应随系统中的订阅者数量和通道数量线性扩展 哪个会更好 1 Redis集群 仅适用于Redis 3 0 alpha 如果是集群模式 您可以在一个节点上发布并在另一个完全不同的节点上订阅 消息将传播并到
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • 如何使redis中的“HSET”子键“过期”?

    我需要使 Redis 哈希中所有超过 1 个月的密钥过期 这不可能 https github com antirez redis issues 167 issuecomment 2559040 为了保持 Redis 简单 https git
  • 在 Redis 上为 Django 和 Express.js 应用程序共享会话存储

    我想创建一个包含一些登录用户的 Django 应用程序 另一方面 由于我想要一些实时功能 所以我想使用 Express js 应用程序 现在的问题是 我不希望身份不明的用户访问 Express js 应用程序的日期 因此 我必须在 Expr
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客

随机推荐

  • 为什么电脑唯独搜不到自己家wifi?

    转载自品略图书馆 http www pinlue com article 2020 05 2213 2410586244619 html 电脑唯独搜不到自己家wifi xff0c 别人家的都能搜到 xff0c 手机也可以搜到自己家的 xff
  • http://和www.前缀网站有什么具体区别?

    转载自品略图书馆 http www pinlue com article 2019 03 1813 598231572617 html 将http 和www 放一起比较 xff0c 是没有实际意义的 一 http协议二 域名一 http协议
  • 什么是三层交换机、网关、DNS、子网掩码、MAC地址?

    转载自品略图书馆 http www pinlue com article 2020 08 2313 2511146576256 html 一文讲懂什么是三层交换机 网关 DNS 子网掩码 MAC地址 很多朋友多次问到什么是网关 dns 子网
  • C++类对象共享数据的5种实现方法

    转自 xff1a http www pinlue com article 2020 09 2617 0611262487540 html
  • c语言free的用法

    转自 xff1a http www pinlue com article 2020 03 3100 4610073901713 html
  • Spring Boot 修改默认端口号

    修改配置文件 xff0c 加上参数 xff1a server port 61 8014 或者 xff1a server port 8014 启动后可发现tomcat运行在端口8014上了 实现原因可看以下链接 转载 SpringBoot修改
  • php调用类中的方法

    转自 xff1a http www pinlue com article 2020 06 1219 0410725563037 html
  • 人工智能 : 第三篇”脑机接口“

    本文作者Tim Urban xff1a Wait but Why的作者Tim Urban 是埃隆马斯克 xff08 特斯拉 SpaceX创始人 xff09 强烈推荐的科技博主 他写的AI文章是全世界转发量最高的 他的粉丝还包括 xff1a
  • 如何找回一台丢失的Win10电脑?

    今天说说如何找电脑 为什么小微想到了这个问题 还要从一次关于奇葩办公地点的讨论说起 看到大家的回答 xff0c 小微佩服得五体投地 办公经历还可以如此精jing彩xin绝dong伦po 作为结实靠谱的出行伙伴 ThinkPad陪伴大家出现在
  • 不必再狂按空格键了!Word 里文字对齐推荐这4种方法

    我们在用Word写论文 制作简历的时候 xff0c 通常会遇到把word中某些特定文字对齐的情况 那么问题来了 xff0c 你平时都是怎么对齐文字的 xff1f 傻傻的用空格来对齐吗 xff1f 在字符数不等的情况下 xff0c 加空格不仅
  • AMI主板BIOS菜单图文讲解设置!

    电脑硬件 xff0c 包括电脑中所有物理的零件 xff0c 以此来区分它所包括或执行的数据和为硬件提供指令以完成任务的软件 主要包含 机箱 xff0c 主板 xff0c 总线 xff0c 电源 xff0c 硬盘 xff0c 存储控制器 xf
  • luffy-02

    这里写目录标题 一 昨日回顾二 今日内容1 路飞前台配置 1 重构项目目录 2 文件修订 xff1a 目录中非配置文件的多余文件可以移除router的使用 3 前台配置 全局样式 配置文件 axios vue cookies element
  • luffy-03

    这里写目录标题 一 昨日回顾二 今日内容1 跨域问题1 1后端自己处理跨域简单请求非简单请求中间件处理 1 2前端处理跨域App vuevue config js 2 头部组件 尾部组件components Header vuecompon
  • luffy-04

    这里写目录标题 一 昨日回顾二 今日内容1 路飞项目使用xadmin2 首页轮播图接口 轮播图表 视图类 轮播图数量4 通过配置实现 前端对接 后续 接口缓存 3 git的使用3 1git的工作流程 4 git分支git提交代码出现冲突的2
  • luffy-05

    这里写目录标题 一 首页轮播图接口二 今日内容1 过滤文件2 从远端拉项目3 远程仓库3 1链接远程仓库的两种情况 4 冲突出现的原因及解决 一 首页轮播图接口 span class token number 1 span 首页轮播图接口
  • 手把手教你搭建鸿蒙hi3518开发和运行环境

    前言 学习 C 语言 xff0c C 43 43 语言 xff0c 数据结构和算法 xff0c 操作系统 xff0c 网络 xff0c 驱动 xff0c 设计模式等知识 用鸿蒙来强化就太对了 本文教你一步一步搭建鸿蒙的开发和运行环境 xff
  • luffy-06

    这里写目录标题 一 上节回顾二 今日内容1 ssh链接和https链接2 gitlab3 git远程分支合并4 git冲突出现原因及解决5 首页登录注册vue页面Header vueLogin vue 6 登录注册功能接口分析 一 上节回顾
  • luffy-07

    这里写目录标题 一 昨日回顾二 今日内容1 登录注册前端页面1 1Login vue1 2Register vue1 3Header vue 2 多方式登录接口3 手机号是否存在接口3 1路由层user urls py3 2user ser
  • luffy-08

    这里写目录标题 一 集成了腾讯短信 封装 luffyapi lib t sms settings pyluffyapi lib t sms sms py 二 短信验证码接口2 1路由 配置2 2视图 三 短信登录接口3 1视图3 2序列化类
  • luffy-09/redis

    这里写目录标题 一 昨日回顾二 今日内容1 redis介绍2 redis的Windows安装和配置3 普通链接和连接池3 1代码3 2redis pool py 4 redis之string操作5 redis之hash操作 一 昨日回顾 s