淘宝京东抖音微信都在用的Redis究竟是什么样呢?

Redis是内存数据库,速度快,适合高并发。
淘宝用Redis做缓存,京东用Redis做计数器。

单线程也能扛几百万请求。
I/O多路复用,不是CPU瓶颈。
开发调试简单,不用管锁问题。

字符串类型,支持set、get、自增。
Hash类型,像字典,支持hset、hget。
列表类型,支持左入栈、右出栈。
集合类型,元素不重复,支持sadd、srem。
有序集合,按分数排序,适合排行榜。

缓存热点数据,比如商品详情页。
验证码有效期,比如6 0秒后失效。
点赞数递增,比如视频播放量。
粉丝列表用Hash,存储用户ID和昵称。
判断用户是否点赞,用sismember。
排行榜用SortedSet,按分数排序。
最新动态按时间排序,用列表。
消息队列用List,左push右pop。

你自己掂量。

lua脚本有没有自加自减运算符?

2 02 2 年,我在某个城市的一个技术论坛上看到一个提问,问的是如何在Lua语言里创建一个每次访问都会自增的变量。
我当时也懵,因为这种需求挺特别的。

我记得那个提问者说的是,他想要一个变量,每次被访问的时候,它的值都能自动加一。
我后来才反应过来,这其实是一个挺有趣的技术挑战。

我提供了一个解决方案,就是用Lua的元表(metatable)功能。
我写了一段代码,大意是这样的:
lua tab = {} tab = {} tab.amount = 0
meta = { __index = function(t, k) if k == "amount" then tab.amount = tab.amount + 1 return tab.amount else return tab[k] end end, __newindex = function(t, k, v) tab[k] = v end }
setmetatable(tab, meta)
这段代码的意思是,每次访问tab.amount的时候,都会执行一个函数,这个函数会把tab.amount的值自增。
然后我演示了如何使用这个变量:
lua print(tab.amount) -
输出 1 print(tab.amount) -
输出 2 print(tab.amount) -
输出 3
我当时觉得这个解决方案挺巧妙的,因为它利用了Lua的元表机制,实现了提问者想要的功能。
不过,可能我偏激了,因为这种方法并不适合所有情况。