【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)