目录
redis问题画像
redis特点
数据在计算机存储的位置的不同,性能及成本也是不同的,一般来说遵循速度越快,成本越高,容量越小的规律
在redis的bin
目录下,一般会有这几个二进制文件
Redis可执行文件 | 说明 |
---|---|
redis-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试工具 |
redis-check-aof | AOF文件修复工具(服务器可能在程序正在对 AOF 文件进行写入时停机, 如果停机造成了 AOF 文件出错(corrupt), 那么 Redis 在重启时会拒绝载入这个 AOF 文件, 从而确保数据的一致性不会被破坏。可以使用 Redis 附带的 redis-check-aof 程序,对原来的 AOF 文件进行修复) |
redis-check-dump | RDB持久化文件检测和修复工具 |
redis-sentinel | Sentinel服务器 |
Redis常用配置 | 解释 |
---|---|
daemonize | 是否开启守护进程 |
port | 对外端口号 |
logfile | Redis系统日志 |
dir | Redis工作目录 |
命令 | 时间复杂度 |
---|---|
keys | O(n) |
dbsize | O(1) |
del | O(1) |
exists | O(1) |
expire | O(1) |
type | O(1) |
由于redis是单线程的,一次只运行一条命令,所以注意要拒绝长(慢)命令,比如:
keys
,flushall
,flushdb
,slow lua script
,mutil/exec
,operate big value(collection)
其实不是单线程,有的命令会开一个独立的线程去执行,比如:fysnc file descriptor
,close file descriptor
string
由于redis单线程,无竞争,所以天然就适合做计数器
命令 | 含义 | 时间复杂度 |
---|---|---|
set key value | 设置key-value | O(1) |
get key | 获取key-value | O(1) |
del key | 删除key-value | O(1) |
setnx key | 根据key是否存在,设置key-value | O(1) |
Incr、decr | 计数 | O(1) |
mget、mset | 批量操作key-value | O(n) |
getset key newvalue | set key newvalue并返回旧的value | O(1) |
append key value | 将value追加到旧的value | O(1) |
strlen key | 返回字符串的长度(注意中文) | O(1) |
getrange key start end | 获取字符串指定下标所有的值 | O(1) |
setrange key index value | 设置指定下标所有对应的值 | O(1) |
hash
命令 | 时间复杂度 |
---|---|
hget、 hset、 hdel | O(1) |
hexists | O(1) |
hincrby | O(1) |
hgetall、 hvals、 hkeys | O(n) |
hmget、 hmset | O(n) |
list
命令 | 含义 | 时间复杂度 |
---|---|---|
rpush key valuel value2…valueN | 从列表右端插入值(1-N个) | O(1~n) |
lpush key valuel value2…valueN | 从列表左端插入值(1-N个) | O(1~n) |
linsert key beforelafter value newValue | 在list指定的值前或后插入newValue | O(n) |
Itrim key start end | 按照索引范围修剪列表 | O(n) |
Irange key start end(包含end) | 获取列表指定索引范围所有item | O(n) |
lindex key index | 获取列表指定索引的item | O(n) |
lpop key | 从列表左侧弹出一个item | O(1) |
rpop key | 从列表右侧弹出一个item | O(1) |
llen key | 获取列表长度 | O(1) |
lrem key count value | 根据count值,从列表中删除所有value相等的项 (1)count>0,从左到右,删除最多count个value相等的项 (2)count<0,从右到左,删除最多Math.abs(count)个value相等的项 (3)count=0,删除所有value相等的项 |
O(n) |
lset key index newValue | 设置列表指定索引值为newValue | O(n) |
blpop key timeout | Ipop阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞 | O(1) |
brpop key timeout | rpop阻塞版本,timeout是阻塞超时时间,timeout=0为永远不阻塞 | O(1) |
set
命令 | 含义 | 时间复杂度 |
---|---|---|
sadd key element | 向集合key添加element(如果element已经存在,添加失败) | O(1) |
srem key element | 将集合key中的element移除掉 | O(1) |
zset
命令 | 含义 | 时间复杂度 |
---|---|---|
zadd key score element | 添加score和element | O(logN) |
zrem key element | 删除元素 | O(1) |
zscore key element | 返回元素的分数 | O(1) |
zincrby key increScore element | 增加或减少元素的分数 | O(1) |
zcard key | 返回元素的总个数 | O(1) |
zrange key start end[WITHSCORES] | 返回指定索引范围内的升序元素[分值] | O(log(n)+m) |
zrangebyscore key minScore maxScore[WITHSCORES] | 返回指定分数范围内的升序元素[分值] | O(log(n)+m) |