当前位置: 首页 > news >正文

【JS逆向基础】数据库之redis

前言:Redis(Remote Dictionary Server)是一个开源的高性能键值数据库,广泛用于缓存、消息队列、实时统计、排行榜等场景,这篇文章就简单介绍一下这个使用也比较广泛的数据库的功能。

1 初识简介

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

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

2 Redis的数据类型及主要特性

Redis提供的数据类型主要分为5种自有类型和一种自定义类型,这5种自有类型包括:Sting类型、哈希类型、列表类型、集合类型和顺序集合类型。

redis=( "name" :"yuan", "age":"23", "scors":[78,79,98,], "info":{"gender":"male","tel":"110"}, "set":{l,2,3}, "zset":{1,2,3} )

使用以下命令启动redis服务端

redis-server C:/tool/redis/redis.windows.conf

3 常用操作

  • 自增自减

# web开发中的电商抢购、秒杀。游戏里面的投票、攻击计数。系统中计算当前在线人数、
set id 1
incr id   # 相当于id+1
get id    # 2 
iner id   #相当于id+1
get id    #3
set goods_id_1 10
decr goods_id_1    #相当于 id-1
get goods_id_1     #"9"
decr goods_id_1    #相当于id-1
get goods_id_1 #8
set age 22
incrby age 2 #自增自减大于1的值时候用incrby
  • 获取字符串的长度

set name xiaoming
strlen name    #8

4 key操作

redis中所有的数据都是通过key(键)来进行操作,这里我们学习一下关于任何数据类型都通用的命令

(1)查找键
#参数支持简单的正则表达式
keys pattern
#查看所有键
keys *
#例子:
#查看名称中包含 a 的键
keys a
#查看以a开头的键
keys a*
#查看以a结尾的键
keys *a
(2)判断键是否存在
#如果存在返回1,不存在返回 0
existp keyl
#判断键 title 是否存在
exists title

5 Python操作redis

  • 连接redis

#方式1
import redis
r=redis.Redis(host='127.0.0.1', port=6379)
r.set('foo','Bar')
print(r.get('foo'))
#方式2
import redis
pool =redis.ConnectionPool(host='127.0.0.1', port=6379)
r= redis.Redis(connection_pool=pool)
r.set('bar','Foo')
print(r.get('bar'))
  • python操作方式

# 三:list操作
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#四 : 集合操作
# key对应的集合中添加元素
r.sadd("name set","zhangsan","lisi","wangwu")
# 获取key对应的集合的所有成员
print(r.smembers("name set"))#{'lisi','zhangsan', 'wangwu'}
print(r.srandmember("name set",2))# 从key对应的集合中随机获取 numbers 个元素
r.srem("name set","lisi")
print(r.smembers("name set")) #{'wangwu','zhangsan'}
#五 :有序集合操作
# 在key对应的有序集合中添加元素
r.zadd("jifenbang",{"yuan":78,"rain":20,"alvin": 89, "eric": 45})#按照索引范围获取key对应的有序集合的元素
print(r.zrange("jifenbang",0,-1))#['rain', 'eric','yuan', 'alvin']
print(r.zrange("jifenbang",0,-1,withscores=True))#[('rain', 20.0),('eric', 45.0),('yuan', 78.0),('alvin',89.0)]
print(r.zrevrange("jifenbang",0,-1,withscores=mrue)) #[('alvin',89.0),('yuan',78.0),('eric',45.0),('rain', 20.0)]
print(r,zrangebyscore("jifenbang",0,100))  #['rain', 'eric','yuan', 'alvin']
print(r,zrangebyscore("jifenbang",0,100,start=0,num2))#['rain', 'eric']# 删除key对应的有序集合中值是values的成员
print(r.zrem("jifenbang","yuan"))    #删除成功返回1
print(r.zrange("iifenbang",0,-1) #['rain','eric','alvin']#五 :有序集合操作
# 在key对应的有序集合中添加元素
r.zadd("jifenbang",{"yuan":78,"rain":20,"alvin": 89,"eric": 45})
# 按照索引范围获取key对应的有序集合的元素
print(r.zrange("jifenbang",0,-1))#['rain','eric','yuan', 'alvin']
print(r.zrange("jifenbang",0,-1, withscores=True)) # [('rain', 20.0),('eric',45.0),('yuan', 78.0),('alvin',89.0)]
print(r.zrevrange("jifenbang",0,-1,withscores=rrue))#[('alvin',89.0),('yuan',78.0),('eric', 45.0),('rain', 20.0)]
print(r.zrangebyscore("jifenbang",0,100))#['rain', 'eric', 'yuan', 'alvin']
print(r.zrangebyscore("jifenbang",0,100,start=0,num=2))#['rain', 'eric']# 删除key对应的有序集合中值是values的成员
print(r.zrem("jifenbang","yuan"))       # 删除成功返回1
print(r.zrange("jifenbang",0,-1))       #['rain','eric', 'alvin']#六 :键值对操作
r.delete("scores")
print(r.exists("scores"))
print(r.keys("*"))
r.expire("name",10)
http://www.xdnf.cn/news/1156843.html

相关文章:

  • 第一章: 初识 Redis:背后的特性和典型应用场景
  • 什么是 ELK/Grafana
  • 使用pytorch创建模型时,nn.BatchNorm1d(128)的作用是什么?
  • Muduo库中单例模式详解
  • Mysql(事务)
  • 小型支付项目3-5:检测未接收到或未正确处理的支付回调通知
  • UE5多人MOBA+GAS 番外篇:移植Lyra的伤害特效(没用GameplayCue,因为我失败了┭┮﹏┭┮)
  • 音视频学习(四十一):H264帧内压缩技术
  • 【Vue进阶学习笔记】Vue 路由入门指南
  • 单线程 Reactor 模式
  • 动静态库的制作和原理
  • 【unitrix】 6.10 类型转换(from.rs)
  • [BUG]关于UE5.6编译时出现“Microsoft.MakeFile.Targets(44,5): Error MSB3073”问题的解决
  • 【软件测试】从软件测试到Bug评审:生命周期与管理技巧
  • VUE2 学习笔记2 数据绑定、数据代理、MVVM
  • 【数据结构】第一讲 —— 概论
  • 基于Arduino的智能寻迹小车设计
  • 剑指offer——链表:旋转数组的最小数字
  • 【OD机试】池化资源共享
  • 「Java案例」利用方法求反素数
  • Ubuntu挂载和取消挂载
  • LP-MSPM0G3507学习--07定时器之二定时节拍
  • ZYNQ平台深度剖析:EMMC/FLASH/SD卡性能测试与创新实践
  • 从磁记录到数据中心:磁盘原理与服务器架构的完整技术链路
  • 两个数据表的故事:第 1 部分
  • Spring之事务使用指南
  • Java行为型模式---解释器模式
  • Openlayers 面试题及答案180道(121-140)
  • Node.js Express keep-alive 超时时间设置
  • @import导入css样式、scss变量用法、static目录