c语言开发,代码量只有三万多行,开源,默认端口号6379
[size=medium][b]5种数据类型[/b][/size]
string 字符串
hash 散列
list 列表
set 集合
zset 有序集合
redis 可以对标签进行如交集,并集这样的集合操作
redis 可以为每个键值设置生存时间(time to live,TTL)
[size=medium][b]redis 事务[/b][/size]
[b]multi[/b]
commond1
commond2
exec
1.事务之间的命令会入等待执行的任务队列,exec告诉redis顺序执行队列的命令,redis保证队列里的命令要么都执行,要么都不执行。
2.redis还保证事务的命令顺序执行不会被其他命令插入。
3.如果队列里的命令有错误(语法错误:指令不存在or参数错误),则队列里的命令[b]全不[/b]执行。
[size=medium][b]watch[/b][/size]
[b]watch实现incr[/b]
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
1.watch执行之后,exec执行之前,如果有其他客户端修改了mykey的值,当前客户端的事务就会失败,称需要做的就是不断重复这个操作,直到没有发生碰撞为止。
2.这种形式的锁被称作乐观锁, 它是一种非常强大的锁机制。 并且因为大多数情况下, 不同的客户端会访问不同的键, 碰撞的情况一般都很少, 所以通常并不需要进行重试
[b][size=medium]优先级队列[/size][/b]
[b]blpop[/b]
>blpop queue1 queue2 queue3 0
会从最左边的队列pop元素,直到最左边的队列为空。
如果多个键都没有元素则阻塞。
消息队列伪代码
while(true){
var task = brpop blpop queue1 queue2 queue3 0
execute(task)
}
[size=medium][b]5种数据类型[/b][/size]
string 字符串
hash 散列
list 列表
set 集合
zset 有序集合
redis 可以对标签进行如交集,并集这样的集合操作
redis 可以为每个键值设置生存时间(time to live,TTL)
[size=medium][b]redis 事务[/b][/size]
[b]multi[/b]
commond1
commond2
exec
1.事务之间的命令会入等待执行的任务队列,exec告诉redis顺序执行队列的命令,redis保证队列里的命令要么都执行,要么都不执行。
2.redis还保证事务的命令顺序执行不会被其他命令插入。
3.如果队列里的命令有错误(语法错误:指令不存在or参数错误),则队列里的命令[b]全不[/b]执行。
[size=medium][b]watch[/b][/size]
[b]watch实现incr[/b]
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
1.watch执行之后,exec执行之前,如果有其他客户端修改了mykey的值,当前客户端的事务就会失败,称需要做的就是不断重复这个操作,直到没有发生碰撞为止。
2.这种形式的锁被称作乐观锁, 它是一种非常强大的锁机制。 并且因为大多数情况下, 不同的客户端会访问不同的键, 碰撞的情况一般都很少, 所以通常并不需要进行重试
[b][size=medium]优先级队列[/size][/b]
[b]blpop[/b]
>blpop queue1 queue2 queue3 0
会从最左边的队列pop元素,直到最左边的队列为空。
如果多个键都没有元素则阻塞。
消息队列伪代码
while(true){
var task = brpop blpop queue1 queue2 queue3 0
execute(task)
}