chunpat
chunpat
前端要做心跳检测,不然服务端检测客户端不活跃会自动断开
now ,just have these。i also dont know why ``` /* * Currency to mine. Supported values: * * bbscoin (automatic switch with block version 3 to cryptonight_v7) * bittube (uses...
i find it why,you can see https://github.com/fireice-uk/xmr-stak/pull/2581 @qlyfmss
> * > * 其实这种处理方式,算是一个兜底的方案吧。本身我们业务去处理的时候,是可以在接口层面就限制住不让用户去重复支付的。但是这是为了避免因为网络延迟导致的重复支付的问题 其中一场景是一个微信码给两个人扫,都支付成功了。(一次结清)出现一支付单两次支付,不同第三方交易id异步通知
> > > * 其实这种处理方式,算是一个兜底的方案吧。本身我们业务去处理的时候,是可以在接口层面就限制住不让用户去重复支付的。但是这是为了避免因为网络延迟导致的重复支付的问题 > > > > > > 其中一场景是一个微信码给两个人扫,都支付成功了。(一次结清)出现一支付单两次支付,不同第三方交易id异步通知 > > 哦哦。这种情况是我没考虑到的。这种情况下,难道微信那边没做限制么,总有一个先支付成功的吧。如果出现了这种情况。那就得入pay_repeat_transaction表了,走退款处理了 微信的话,生成微信支付订单的时候,自定义订单号唯一,微信那边就会验证重复支付。
> 2.至于原文中的购物车锁,如果做了校验,确实可以不用加锁了,有任何变动都会提示用户,并且简单加锁是解决不了购物车数据变化这个问题的,必须进行校验,但是原文中的锁可以起到作用是防止极端情况下,一个购物车生成多笔订单,如果不考虑这个问题的话,不加锁也是可以的。 加锁是为了校验的唯一性,假设校验a b c三个产品,你校验了a,还有b、c没校验,此时a的商品改了价格。那不就白校验了吗?
催更,23333☺☺☺ @TIGERB
> 字段的类型,大家根据自己的需要进行修改。 接下来该说怎么选择Redis的存储结构了,Redis常用的 `Hash Table、集合、有序集合、链表、字符串` 五种,我们一个个来分析。 首先购车一定有一个key来标记这个购物车属于哪个用户的,为了简化,我们的key假设是:`uid:cart_type`。 我们先来看如果用 `Hash Table`;我们添加时,需要用到如下命令:`HSET uid:cart_type sku ShoppingData`;看起来没问题,我们可以根据sku快速定位某个商品然后进行相关的修改等,但是注意,ShoppingData是一个json串,如果用户购物车中有非常多的商品,我们用 `HGETALL uid:cart_type` 获取到的时间复杂度是O(n),然后代码中还需要一一反序列化,又是O(n)的复杂度。 如果用`集合`,也会遇到类似的问题,每个购物车看做一个集合,集合中的每个元素是 ShoppingData ,取到代码中依然需要逐一反序列化(反序列化是成本),关于有序集合与链表就不在分析,大家可以按照上面的思路去尝试下问题所在。 看起来我们没得选,只有使用`String`,那我们来看一下`String`的契合度是什么样子。首先`SET uid:cart_type ShoppingDataArr`;我们把购物车所有的数据序列化成一个字符串存储,每次取出来的时间复杂度是O(1),序列化、反序列化都只需要一次。看来是非常不错的选择。但是在使用中大家还是有几点需要注意。 1. 单个Value不能太大,要不然就会出现大key问题,所以一般购物车有上限限制,比如item不能超过多少个; 2. 对redis的操作性能提升上来了,但是代码的就是修改单个item时的不便,必须每次读取全部然后找到对应的item进行修改;这里我们可以把从redis中的数据读取出来后,在内存中构建一个HashTable,来减少每次遍历的复杂度; 网上也看到很多Redis数据结构组合使用来保存购物车数据的,但是无疑增加了网络开销,相比起来还是String最经济划算。 **已经给了分析了呀,hash对于多层级复杂数据格式的购物车设计没啥性能优势而且还添加了操作难度,只有string符合设计要求**
> > > > string 类型,加购场景下时间复杂度是O(n),而且需要把用户全部购物车数据get出来,这样也符合设计要求? ### 存储方式 string存储:SET uid:cart_type ShoppingDataArr hash存储:HSET uid:cart_type sku ShoppingData ### Redis时间复杂度 | 存储\操作 | 进入购物车界面(get) | 单一商品加购 | 批量商品加购 | | ----------- | -----------...