avatar

正进一步

只有喜欢,才会全情投入,才会成功!!!

不关注架构设计细节的程序员不是一个好架构师

  • Home
  • Tags
  • Categories
  • Archives
  • 2018寄语
Redis_String讲解

引用: https://mp.weixin.qq.com/s/65jTyTK7Pj5Yc4ddPZBHEg

redis 特点

  1. 所有数据存储在内存中,高速读写
  2. 提供丰富多样的数据类型:string、 hash、 set、 sorted set、bitmap、hyperloglog
  3. 提供了 AOF 和 RDB 两种数据的持久化保存方式,保证了 Redis 重启后数据不丢失
  4. Redis 的所有操作都是原子性的,还支持对几个操作合并后的原子性操作,支持事务

string 类型是 Redis 中最基本的数据类型,最常用的数据类型,甚至被很多玩家当成 redis 唯一的数据类型去使用。string 类型在 redis 中是二进制安全 (binary safe) 的, 这意味着 string 值关心二进制的字符串,不关心具体格式,你可以用它存储 json 格式或 JPEG 图片格式的字符串

Redis_Hash讲解

引用: https://mp.weixin.qq.com/s/65jTyTK7Pj5Yc4ddPZBHEg

1
2
3
4
5
6
7
8
9
10
11
12
13
//同时设置多个字段值
hmset user:2 name beijing email struggle@126.com
//得到所有的值
HGETALL runoobkey
//删除key中的字段
HDEL key field
//为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBY key field increment

HMGET key field1 [field2]
获取所有给定字段的值
HMSET key field1 value1 [field2 value2 ]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
Redis_List讲解

引用自:https://mp.weixin.qq.com/s/65jTyTK7Pj5Yc4ddPZBHEg

list 是按照插入顺序排序的字符串链表,可以在头部和尾部插入新的元素(双向链表实现,两端添加元素的时间复杂度为 O(1))。插入元素时,如果 key 不存在,redis 会为该 key 创建一个新的链表,如果链表中所有的元素都被移除,该 key 也会从 redis 中移除。

常见操作时用 lpush 命令在 list 头部插入元素, 用 rpop 命令在 list 尾取出数据。
blpush;lrpop; 分别都是阻塞版本,可以设置超时时间.
如果有多个客户端同时因为某个列表而被阻塞,那么当有新值被推入到这个列表时,服务器就会按照先到先服务原则,优先向最早被阻塞的客户端返回新值。

Redis_Set讲解

引用自:https://mp.weixin.qq.com/s/65jTyTK7Pj5Yc4ddPZBHEg

set 数据类型是一个集合(没有排序,不重复),可以对 set 类型的数据进行添加、删除、判断是否存在等操作(时间复杂度是 O(1) )

set 集合不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份。

set 类型提供了多个 set 之间的聚合运算,如求交集、并集、补集,这些操作在 redis 内部完成,效率很高。
共同好友;共同文章

Redis在秒杀场景中的应用_限流_库存扣减_异步下单

引用自:http://geek.csdn.net/news/detail/246932
Redis作用: 限流库存扣减异步下单

1
2
3
4
"goodsId" : {
"Total": 100
"Booked": 100
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
local n = tonumber(ARGV[1])
if not n or n == 0 then
return 0
end
local vals = redis.call("HMGET", KEYS[1], "Total", "Booked");
local total = tonumber(vals[1])
local blocked = tonumber(vals[2])
if not total or not blocked then
return 0
end
if blocked + n <= total then
redis.call("HINCRBY", KEYS[1], "Booked", n)
return n;
end
return 0
Redis分布式锁的正确实现方式Java

来自:https://mp.weixin.qq.com/s/qJK61ew0kCExvXrqb7-RSg

互斥性。在任意时刻,只有一个客户端能持有锁。
不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。