Redis学习笔记
1.数据类型与APIKey 相关命令常用命令命令含义时间复杂度keys查找所有符合给定模式 pattern 的 keyO(N), N 为数据库中 key 的数量dbsize计算key的总数O(1)exists检查key是否存在O(1)del删除指定的key-value...
1.数据类型与API
Key 相关命令
常用命令
命令 | 含义 | 时间复杂度 |
---|---|---|
keys | 查找所有符合给定模式 pattern 的 key | O(N), N 为数据库中 key 的数量 |
dbsize | 计算key的总数 | O(1) |
exists | 检查key是否存在 | O(1) |
del | 删除指定的key-value | O(1) |
expire、ttl、persist | 设置、查看、去掉key的过期时间 | O(1) |
type | 查看key的类型 | O(1) |
keys (遍历key)
当key较多时,命令执行时间较长,会造成阻塞,慎用该命令。
- keys * (遍历所有key)
- keys [pattern] (遍历所有正则表达式匹配的key)
dbsize (计算key的总数)
127.0.0.1:6379> mset hello world hehe haha php good phe his
OK
127.0.0.1:6379> keys *
1) "hello"
2) "phe"
3) "php"
4) "hehe"
127.0.0.1:6379> keys he*
1) "hello"
2) "hehe"
127.0.0.1:6379> keys he[h-l]*
1) "hello"
2) "hehe"
127.0.0.1:6379> keys ph?
1) "phe"
2) "php"
127.0.0.1:6379> dbsize
(integer) 4
exists key (检查key是否存在)
del key [key2 key3 …] (删除指定的key-value,可一次删除多个)
127.0.0.1:6379> exists hello
(integer) 1
127.0.0.1:6379> del hello php
(integer) 2
127.0.0.1:6379> exists hello
(integer) 0
127.0.0.1:6379> get hello
(nil)
expire、ttl、persist (设置、查看、去掉key的过期时间)
- expire key seconds (key在seconds秒后过期)
ttl key (查看key剩余过期时间)
大于等于0时,表示剩余过期秒数
-1 表示key存在,并且没有过期时间
-2 表示key已经不存在了persist key (去掉key的过期时间)
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> expire hello 20
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 12
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> ttl hello
(integer) -2
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> expire hello 20
(integer) 1
127.0.0.1:6379> ttl hello
(integer) 14
127.0.0.1:6379> persist hello
(integer) 1
127.0.0.1:6379> ttl hello
(integer) -1
127.0.0.1:6379> get hello
"world"
type key (查看key的类型)
string
hash
list
set
zset
none
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> type a
string
127.0.0.1:6379> sadd myset 1 2 3
(integer) 3
127.0.0.1:6379> type myset
set
更多 Key 相关命令:http://www.redis.cn/commands.html#generic
String (字符串)
场景
- 缓存 (key-value、存储json)
- 分布式锁
- 计数器
- Bits
常用命令
命令 | 含义 | 时间复杂度 |
---|---|---|
set、get、del | 设置、获取、删除key-value | O(1) |
setnx、set xx | 根据key是否存在设置key-value | O(1) |
incr、decr、incrby、decrby、incrbyfloat | 计数 | O(1) |
mget、mset | 批量操作key-value | O(N),N 为给定 key 的数量 |
getset | 为key设置新值,并返回旧值 | O(1) |
append | 将value追加到旧的value后 | O(1) |
strlen | 返回字符串的长度 | O(1) |
setrange、getrange | 设置、获取字符串指定下标对应的值 | O(1) |
get、set、del
- get key (获取key对应的value)
- set key value (设置key-value)
- del key (删除key-value)
incr、decr、incrby、decrby
- incr key (key自增1,如果key不存在,自增后get(key)=1)
- decr key (key自减1,如果key不存在,自增后get(key)=-1)
- incrby key n (key自增n,如果key不存在,自增后get(key)=n)
- decrby key n (key自减n,如果key不存在,自增后get(key)=-n)
set、setnx、set xx
- set key value (不管key是否存在,都设置)
- setnx key value (key不存在,才设置)
- set key value xx (key存在,才设置)
127.0.0.1:6379> exists php
(integer) 0
127.0.0.1:6379> set php good
OK
127.0.0.1:6379> setnx php bad
(integer) 0
127.0.0.1:6379> set php best xx
OK
127.0.0.1:6379> get php
"best"
127.0.0.1:6379> exists java
(integer) 0
127.0.0.1:6379> setnx java best
(integer) 1
127.0.0.1:6379> exists lua
(integer) 0
127.0.0.1:6379> set lua hehe xx
(nil)
mget、mget
- mget key1 key2 key3 … (批量获取key,原子操作)
- mset key1 value1 key2 value2 key3 value3 … (批量设置key-value)
getset、append、strlen
- getset key newvalue (为key设置新值,并返回旧值)
- append key value (将value追加到旧的value后)
- strlen key (返回字符串的长度(注意中文))
127.0.0.1:6379> get java
"best"
127.0.0.1:6379> getset java hello
"best"
127.0.0.1:6379> get java
"hello"
127.0.0.1:6379> append java world
(integer) 10
127.0.0.1:6379> get java
"helloworld"
127.0.0.1:6379> strlen java
(integer) 10
incrbyfloat、getrange、setrange
- incrbyfloat key 3.5 (为key对应的值增加3.5)
- getrange key start end (获取字符串指定下标所有的值)
- setrange key index value (设置指定下标所对应的值)
127.0.0.1:6379> incr counter
(integer) 1
127.0.0.1:6379> incrbyfloat counter 1.1
"2.1"
127.0.0.1:6379> get counter
"2.1"
127.0.0.1:6379> set hello javabest
OK
127.0.0.1:6379> getrange hello 0 2
"jav"
127.0.0.1:6379> setrange hello 4 p
(integer) 8
127.0.0.1:6379> get hello
"javapest"
更多 String 相关命令:http://www.redis.cn/commands.html#string
实战
分布式ID生成器
注意
- 最大长度 512M
Hash (哈希)
常用命令
命令 | 含义 | 时间复杂度 |
---|---|---|
hget、hset | 设置、获取hash key对应的field的value | O(1) |
hdel | 删除hash key对应的一个或多个field | O(N),N 为要删除的域的数量 |
hexists | 判断hash key是否有指定的field | O(1) |
hlen | 获取hash key 的field的数量 | O(1) |
hmget、hmset | 批量、获取hash key的一批field对应的值 | O(N),N 为给定field的数量 |
hkeys、hvals、hgetall | 返回hash key对应所有的field、value、field和value | O(N),N 为哈希表的大小 |
hsetnx | 设置hash key 对应field (如果field已存在,则失败) | O(1) |
hincrby、hincrbyfloat | hash key 对应的field的value自增initCounter | O(1) |
hget、hset、hdel
- hget key field (获取hash key对应的field的value)
- hset key field value (设置hash key 对应field的value)
- hdel key field (删除hash key 对应field的value)
127.0.0.1:6379> hset user:1:info age 23
(integer) 1
127.0.0.1:6379> hget user:1:info age
"23"
127.0.0.1:6379> hset user:1:info name ronaldo
(integer) 1
127.0.0.1:6379> hgetall user:1:info
1) "age"
2) "23"
3) "name"
4) "ronaldo"
127.0.0.1:6379> hdel user:1:info age
(integer) 1
127.0.0.1:6379> hgetall user:1:info
1) "name"
2) "ronaldo"
hexists、hlen
- hexists key field (判断hash key是否有指定的field)
- hlen key (获取hash key 的field的数量)
127.0.0.1:6379> hgetall user:1:info
1) "name"
2) "ronaldo"
127.0.0.1:6379> hexists user:1:info name
(integer) 1
127.0.0.1:6379> hexists user:1:info age
(integer) 0
127.0.0.1:6379> hlen user:1:info
(integer) 1
hmget、hmset
- hmget key field1 field2 field3 … (批量获取hash key的一批field对应的值)
- hmset key field1 value1 field2 value2 … (批量设置hash key的一批field value)
hgetall、hvals、hkeys
- hkeys key (返回hash key 对应所有field)
- hvals key (返回hash key 对应所有field的value)
- hgetall key (返回hash key 对应所有的field和value)
127.0.0.1:6379> hmset user:2:info age 30 name kaka page 50
OK
127.0.0.1:6379> hgetall user:2:info
1) "age"
2) "30"
3) "name"
4) "kaka"
5) "page"
6) "50"
127.0.0.1:6379> hkeys user:2:info
1) "age"
2) "name"
3) "page"
127.0.0.1:6379> hvals user:2:info
1) "30"
2) "kaka"
3) "50"
hsetnx、hincrby、hincrbyfloat
- hsetnx key field value (设置hash key 对应field (如果field已存在,则失败))
- hincrby key field initCounter (hash key 对应的field的value自增initCounter)
- hincrbyfloat key field floatCounter (hincrby浮点数版)
更多 Hash 相关命令:http://www.redis.cn/commands.html#string
实战
记录网站每个用户个人主页的访问量
hincrby user:1:info pageview count
缓存视频对象基本信息
String vs Hash
相似的API
String | Hash |
---|---|
get | hget |
set、setnx | hset、hsetnx |
del | hdel |
incr、incrby、decr、decrby | hincrby |
mset | hmset |
mget | hmget |
List (列表)
特点
- 有序
- 可以重复
- 左右两边插入弹出
常用命令
命令 | 含义 | 时间复杂度 |
---|---|---|
lrange | 获取列表指定索引范围的所有item | O(S+N),S 为偏移量 start,N 为指定区间内元素的数量。 |
lpush、rpush | 从列表左/右侧插入1-N个值 | O(1) |
lpop、rpop | 从列表左/右侧弹出1个值 | O(1) |
linsert | 在list指定的值前/后插入newValue | O(N), N 为寻找 pivot 过程中经过的元素数量。 |
lrem | 从列表中删除value相等的项 | O(N), N 为列表的长度。 |
ltrim | 按照索引范围修剪列表 | O(N),N 为被移除的元素的数量。 |
lindex | 获取列表指定索引的item | O(N), N 为到达下标 index 过程中经过的元素数量。因此,对列表的头元素和尾元素执行 LINDEX 命令,复杂度为O(1)。 |
llen | 获取列表长度 | O(1) |
lset | 设置列表指定索引值为newValue | 对头元素或尾元素进行 LSET 操作,复杂度为 O(1)。其他情况下,为 O(N), N 为列表的长度。 |
lrange
- lrange key start end (获取列表指定索引范围的所有item(包含start和end))
a - b - c - d - e - f
索引从左到右 0 ~ 5
索引从右到左 -1 ~ -6
127.0.0.1:6379> rpush listkey a b c d e f
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lrange listkey 0 2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange listkey 1 -2
1) "b"
2) "c"
3) "d"
4) "e"
lpush、rpush
- lpush key value1 value2 value3 … (从列表左侧插入1-N个值)
- rpush key value1 value2 value3 … (从列表右侧插入1-N个值)
127.0.0.1:6379> lpush listkey c b a
(integer) 3
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpush listkey c b a
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "c"
5) "b"
6) "a"
lpop、rpop
- lpop key (从列表左侧弹出一个item)
- rpop key (从列表右侧弹出一个item)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> lpop listkey
"a"
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> rpop listkey
"a"
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"
linsert
- linsert key before|after value newValue (在list指定的值前|后插入newValue)
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "c"
3) "c"
4) "b"
127.0.0.1:6379> linsert listkey before b 0
(integer) 5
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "c"
5) "b"
127.0.0.1:6379> linsert listkey after c 1
(integer) 6
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "1"
5) "c"
6) "b"
lrem
- lrem key count value (根据count的值,从列表中删除value相等的项)
(1) count>0,从左到右,删除最多count个value相等的项
(2) count<0,从右到左,删除最多abs(count)个value相等的项
(3) count=0,从左到右,删除所有value相等的项
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "b"
3) "c"
4) "1"
5) "c"
6) "b"
127.0.0.1:6379> lrem listkey 1 b
(integer) 1
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "c"
3) "1"
4) "c"
5) "b"
127.0.0.1:6379> lrem listkey -1 c
(integer) 1
127.0.0.1:6379> lrange listkey 0 -1
1) "0"
2) "c"
3) "1"
4) "b"
ltrim
- ltrim key start end (按照索引范围修剪列表)
127.0.0.1:6379> lrange listkey 0 -1
1) "c"
2) "b"
3) "a"
4) "a"
5) "b"
6) "c"
127.0.0.1:6379> ltrim listkey 1 3
OK
127.0.0.1:6379> lrange listkey 0 -1
1) "b"
2) "a"
3) "a"
lindex
- lindex key index (获取列表指定索引的item)
llen
- llen key (获取列表长度)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lindex listkey 0
"a"
127.0.0.1:6379> lindex listkey -1
"f"
127.0.0.1:6379> llen listkey
(integer) 6
lset
- lset key index newValue (设置列表指定索引值为newValue)
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lset listkey 2 0
OK
127.0.0.1:6379> lrange listkey 0 -1
1) "a"
2) "b"
3) "0"
更多 List 相关命令:http://www.redis.cn/commands.html#list
Tips
lpush + lpop = Stack (栈)
lpush + rpop = Queue (队列)
lpush + ltrim = Capped Collection (定容集合)
lpush + brpop = Message Queue (消息队列)
Set(集合)
特点
- 无序
- 无重复
- 集合间操作
常用命令
命令 | 含义 | 时间复杂度 |
---|---|---|
sadd | 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略 | O(N), N 是被添加的元素的数量。 |
srem | 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 | O(N), N 为给定 member 元素的数量 |
smove | 将 member 元素从 A 集合移动到 B 集合 | O(1) |
scard | 集合中元素的数量 | O(1) |
sismember | 判断 member 元素是否集合 key 的成员 | O(1) |
smembers | 返回集合 key 中的所有成员 | O(N),N 为集合的基数 |
srandmember | 从集合中随机挑选指定数量元素返回 | O(N),N 为返回数组的元素个数 |
spop | 移除并返回集合中的一个随机元素 | O(1) |
sdiff、sdiffstore | 给定集合之间的差集(将结果保存到新的集合) | O(N),N 是所有给定集合的成员数量之和。 |
sinter、sinterstore | 给定集合之间的交集(将结果保存到新的集合) | O(N * M),N 为给定集合当中基数最小的集合,M 为给定集合的个数。 |
sunion、sunionstore | 给定集合之间的并集(将结果保存到新的集合) | O(N), N 是所有给定集合的成员数量之和 |
sadd、srem
- sadd key element1 element2 … (向集合key添加element(如果element已经存在,则添加失败))
- srem key element1 element2 … (移除key中的element元素)
scard、sismember、srandmember、smembers
- scard key (计算集合大小)
- sismember key element (判断element是否在集合中)
- srandmember key count (从集合中随机挑选count个元素)
- spop key(从集合中随机弹出一个元素)
- smembers key(获取集合中所有元素)
127.0.0.1:6379> sadd setkey go c c++ c# php java python
(integer) 7
127.0.0.1:6379> sadd setkey go
(integer) 0
127.0.0.1:6379> sadd setkey matlab c
(integer) 1
127.0.0.1:6379> smembers setkey
1) "php"
2) "python"
3) "go"
4) "c++"
5) "matlab"
6) "java"
7) "c"
8) "c#"
127.0.0.1:6379> srem setkey c c++
(integer) 2
127.0.0.1:6379> smembers setkey
1) "matlab"
2) "java"
3) "c#"
4) "go"
5) "python"
6) "php"
127.0.0.1:6379> scard setkey
(integer) 6
127.0.0.1:6379> sismember setkey c++
(integer) 0
127.0.0.1:6379> sismember setkey php
(integer) 1
127.0.0.1:6379> srandmember setkey 3
1) "go"
2) "python"
3) "java"
127.0.0.1:6379> srandmember setkey 3
1) "go"
2) "java"
3) "c#"
127.0.0.1:6379> spop setkey
"matlab"
127.0.0.1:6379> spop setkey
"java"
127.0.0.1:6379> smembers setkey
1) "go"
2) "python"
3) "c#"
4) "php"
srandmember 和 spop: spop 从集合中弹出;srandmember 不会破坏集合
sdiff、sinter、sunion
- sdiff setkey1 setkey2 (setkey1 setkey2的差集)
- sinter setkey1 setkey2 (setkey1 setkey2的交集)
- sunion setkey1 setkey2 (setkey1 setkey2的并集)
- sdiff|sinter|suion + store destkey setkey1 setkey2 (将差集、交集、并集结果保存到destkey中)
示例见下面 实战 中的 粉丝
更多 Set 相关命令:http://www.redis.cn/commands.html#set
实战
抽奖系统
- spop
记录点赞,踩的用户
标签
- 给用户添加标签
sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag3 tag4 tag5
...
sadd user:n:tags tag1 tag3 tag5
- 给标签添加用户
sadd tag:1:users user1 user3
sadd tag:2:users user3 user5 user6
...
sadd tag:n:users user1 user4
粉丝
- 关注
127.0.0.1:6379> sadd user:1:follow 2 3 5 6 8 9
(integer) 6
127.0.0.1:6379> sadd user:2:follow 1 3 5 7 8 9
(integer) 6
- 粉丝
127.0.0.1:6379> sadd user:1:fans 2 7 9
(integer) 3
- 我关注他,他没关注我
127.0.0.1:6379> sdiff user:1:follow user:1:fans
1) "3"
2) "5"
3) "6"
4) "8"
- 他关注我,我没关注他
127.0.0.1:6379> sdiff user:1:fans user:1:follow
1) "7"
- 互粉
127.0.0.1:6379> sinter user:1:follow user:1:fans
1) "2"
2) "9"
127.0.0.1:6379> sinterstore user:1:mutual_fans user:1:follow user:1:fans
(integer) 2
127.0.0.1:6379> smembers user:1:mutual_fans
1) "2"
3) "9"
- 共同关注
127.0.0.1:6379> sinter user:1:follow user:2:follow
1) "3"
2) "5"
3) "8"
4) "9"
- 可能认识的人(用户1和用户2关注用户的并集)
127.0.0.1:6379> sunion user:1:follow user:2:follow
1) "1"
2) "2"
3) "3"
4) "5"
5) "6"
6) "7"
7) "8"
8) "9"
Tips
sadd = Tagging (标签)
spop/srandmember = Random item (随机成员)
sadd + sinter = Social Craph (社交平台关系)
Sorted Set (有序集合)
特点
- 有序
- 无重复
- 集合间操作
集合 VS 有序集合
集合 | 有序集合 |
---|---|
无重复元素 | 无重复元素 |
无序 | 有序 |
element | element + score |
列表 VS 有序集合
列表 | 有序集合 |
---|---|
可以有重复元素 | 无重复元素 |
有序 | 有序 |
element | element + score |
常用命令
操作类型 | 命令 |
---|---|
基本操作 | zadd、zrem、zcard、zincrby、zscore |
范围操作 | zrange、zrangebyscore、zcount、zremrangebyrank |
集合操作 | zunionstore、zinterstore |
命令 | 含义 | 时间复杂度 |
---|---|---|
zadd | 将一个或多个 member 元素及其 score 值加入到有序集 key 当中 | O( M * log(N) ), N 是有序集的基数, M 为成功添加的新成员的数量 |
zrem | 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略 | O(M*log(N)), N 为有序集的基数, M 为被成功移除的成员的数量。 |
zscore | 元素的分数 | O(1) |
zincrby | 增加或减少元素的分数 | O(log(N)) |
zcard | 元素的总个数 | O(1) |
zrange | 返回指定索引范围内的升序元素【和分值】 | O(log(N) + M),N 为有序集的基数,而 M 为结果集的基数 |
zrangebyscore | 返回指定分数范围内的升序元素【和分值】 | O(log(N) + M),N 为有序集的基数,而 M 为结果集的基数 |
zcount | 返回有序结合内,在指定分数范围内的元素个数 | O(log(N) + M),N 为有序集的基数, M 为值在 min 和 max 之间的元素的数量 |
zremrangebyrank | 删除指定排名内的升序元素 | O(log(N) + M),N 为有序集的基数,而 M 为被移除成员的数量 |
zremrangebyscore | 删除指定分数内的升序元素 | O(log(N) + M),N 为有序集的基数, M 为结果集的基数 |
zadd
- zadd key score element(可以是多对)(向有序集合key添加score和element)
zrem
- zrem key element(可以是多个) (删除指定元素)
zscore
- zscore key element (返回元素的分数)
zincrby
- zincrby key increScore element (增加或减少元素的分数)
zcard
- zcard key (返回元素的总个数)
zrange
- zrange key start end [withscores] (返回指定索引范围内的升序元素【和分值】)
zrangebyscore
- zrangebyscore key minScore maxScore [withscores] (返回指定分数范围内的升序元素【和分值】)
zcount
- zcount key minScore maxScore (返回有序结合内,在指定分数范围内的元素个数)
zremrangebyrank
- zremrangebyrank key start end (删除指定排名内的升序元素)
zremrangebyscore
- zremrangebyscore key minScore maxScore (删除指定分数内的升序元素)
127.0.0.1:6379> zadd report 100 xiaoming 98 xiaohong 85 laowang 60 zhangsan 55 lisi
(integer) 5
127.0.0.1:6379> zscore report laowang
"85"
127.0.0.1:6379> zcard report
(integer) 5
127.0.0.1:6379> zrank report xiaohong
(integer) 3
127.0.0.1:6379> zrank report xiaoming
(integer) 4
127.0.0.1:6379> zrem report lisi
(integer) 1
127.0.0.1:6379> zrange report 0 -1 withscores
1) "zhangsan"
2) "60"
3) "laowang"
4) "85"
5) "xiaohong"
6) "98"
7) "xiaoming"
8) "100"
127.0.0.1:6379> zrangebyscore report 85 100 withscores
1) "laowang"
2) "85"
3) "xiaohong"
4) "98"
5) "xiaoming"
6) "100"
127.0.0.1:6379> zcount report 85 100
(integer) 3
127.0.0.1:6379> zremrangebyrank report 1 1
(integer) 1
127.0.0.1:6379> zrange report 0 -1 withscores
1) "zhangsan"
2) "60"
3) "xiaohong"
4) "98"
5) "xiaoming"
6) "100"
127.0.0.1:6379> zremrangebyscore report 85 98
(integer) 1
127.0.0.1:6379> zrange report 0 -1 withscores
1) "zhangsan"
2) "60"
3) "xiaoming"
4) "100"
其他命令
- zrevrank
- zrevrange
- zrevrangebyscore
- zinterstore
- zunionstore
更多 Sorted Set 相关命令:http://www.redis.cn/commands.html#sorted_set
实战
- 排行榜:新书榜、畅销榜、关注榜等。
2. 数据结构和内部编码
RedisObject
- 数据类型(type)
string
hash
list
set
sorted set
- 编码方式(encoding)
raw
int
ziplist
linkedlist
hashmap
intset
- 数据指针(ptr)
- 虚拟内存(vm)
- 其他信息
其他
基本配置
# 配置redis作为守护进程运行
daemonize yes
# 端口号为6379
port 6379
# 数据文件存储目录
dir "/opt/soft/redis/data"
# 日志文件
logfile "redis-6379.log"
单线程
- 1.一次只运行一条命令
2.拒绝长(慢)命令
keys, flushall, flushdb, slow lua script, mutil/exec, operate big value(collection)
3.其实不是单线程
fysnc file descriptor
close file descriptor
更多推荐
所有评论(0)