分类
devops

redis

redis java library

Data serialization

https://github.com/redisson/redisson/wiki/4.-data-serialization

org.redisson.client.codec.Codec
org.redisson.client.codec.BaseCodec
org.redisson.client.codec.BitSetCodec
org.redisson.client.codec.ByteArrayCodec
org.redisson.client.codec.DoubleCodec
org.redisson.client.codec.IntegerCodec
org.redisson.client.codec.LongCodec
org.redisson.client.codec.StringCodec


org.redisson.codec.AvroJacksonCodec
org.redisson.codec.BaseEventCodec
org.redisson.codec.CborJacksonCodec
org.redisson.codec.CompositeCodec
org.redisson.codec.CustomObjectInputStream
org.redisson.codec.DefaultReferenceCodecProvider
org.redisson.codec.FstCodec
org.redisson.codec.IonJacksonCodec
org.redisson.codec.JacksonCodec
org.redisson.codec.JsonCodec
org.redisson.codec.JsonCodecWrapper
org.redisson.codec.JsonJacksonCodec
org.redisson.codec.Kryo5Codec
org.redisson.codec.KryoCodec
org.redisson.codec.LZ4Codec
org.redisson.codec.LZ4CodecV2
org.redisson.codec.MapCacheEventCodec
org.redisson.codec.MarshallingCodec
org.redisson.codec.MsgPackJacksonCodec
org.redisson.codec.ProtobufCodec
org.redisson.codec.ReferenceCodecProvider
org.redisson.codec.SerializationCodec
org.redisson.codec.SmileJacksonCodec
org.redisson.codec.SnappyCodec
org.redisson.codec.SnappyCodecV2
org.redisson.codec.TypedJsonJacksonCodec

org.springframework.integration.support.locks.LockRegistry

https://docs.spring.io/spring-integration/api/org/springframework/integration/support/locks/LockRegistry.html
https://docs.spring.io/spring-integration/api/org/springframework/integration/support/locks/package-summary.html

  • org.springframework.integration.support.locks.DefaultLockRegistry
  • org.springframework.integration.hazelcast.lock.HazelcastLockRegistry
  • org.springframework.integration.jdbc.lock.JdbcLockRegistry
  • org.springframework.integration.support.locks.PassThruLockRegistry
  • org.springframework.integration.redis.util.RedisLockRegistry
  • org.springframework.integration.zookeeper.lock.ZookeeperLockRegistry

org.apache.shardingsphere.mode.repository.cluster.lock.DistributedLock

  • org.apache.shardingsphere.mode.repository.cluster.lock.impl.DefaultDistributedLock
  • org.apache.shardingsphere.mode.repository.cluster.etcd.lock.EtcdDistributedLock
  • org.apache.shardingsphere.mode.repository.cluster.consul.lock.ConsulDistributedLock
  • org.apache.shardingsphere.mode.repository.cluster.zookeeper.lock.ZookeeperDistributedLock

Distributed locks and synchronizers(redisson impl)

https://github.com/redisson/redisson/wiki/8.-Distributed-locks-and-synchronizers

  • org.redisson.api.RLock
  • org.redisson.api.RFencedLock
  • org.redisson.RedissonFencedLock
  • org.redisson.RedissonFairLock
  • org.redisson.RedissonFencedLock
  • org.redisson.RedissonReadLock
  • org.redisson.RedissonWriteLock
  • org.redisson.RedissonMultiLock
  • org.redisson.RedissonRedLock
  • org.redisson.RedissonSpinLock
  • org.redisson.RedissonBaseLock
  • org.redisson.RedissonLock

org.springframework.session.SessionRepository

  • org.springframework.session.hazelcast.HazelcastIndexedSessionRepository
  • org.springframework.session.jdbc.JdbcIndexedSessionRepository
  • org.springframework.session.MapSessionRepository
  • org.springframework.session.data.mongo.MongoIndexedSessionRepository
  • org.springframework.session.data.redis.RedisIndexedSessionRepository
  • org.springframework.session.data.redis.RedisSessionRepository
  • org.springframework.session.data.gemfire.GemFireOperationsSessionRepository

org.springframework.session.ReactiveSessionRepository

  • org.springframework.session.ReactiveMapSessionRepository
  • org.springframework.session.data.mongo.ReactiveMongoSessionRepository
  • org.springframework.session.data.redis.ReactiveRedisSessionRepository

java.util.concurrent.ExecutorService

  • java.util.concurrent.ScheduledExecutorService
  • java.util.concurrent.AbstractExecutorService
  • java.util.concurrent.ForkJoinPool
  • java.util.concurrent.ScheduledThreadPoolExecutor
  • java.util.concurrent.ThreadPoolExecutor
  • org.jboss.netty.handler.execution.MemoryAwareThreadPoolExecutor
  • io.netty.util.concurrent.SingleThreadEventExecutor
  • io.netty.util.concurrent.MultithreadEventExecutorGroup
  • io.netty.util.concurrent.DefaultEventExecutorGroup
  • io.netty.channel.SimpleChannelInboundHandler

https://qiankunli.github.io/2019/06/28/netty_executor.html
https://www.cnblogs.com/ZhuChangwu/p/12011096.html

ThreadLocal

  • java.lang.ThreadLocal
  • java.lang.InheritableThreadLocal
  • com.alibaba.ttl3.TransmittableThreadLocal
  • io.netty.util.concurrent.FastThreadLocal

org.springframework.core.task.TaskExecutor

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/task/TaskExecutor.html

  • org.springframework.core.task.SyncTaskExecutor
  • org.springframework.core.task.SimpleAsyncTaskExecutor
  • org.springframework.core.task.support.TaskExecutorAdapter
  • org.springframework.scheduling.concurrent.ConcurrentTaskExecutor
  • org.springframework.scheduling.concurrent.ConcurrentTaskScheduler
  • org.springframework.scheduling.concurrent.DefaultManagedTaskExecutor
  • org.springframework.scheduling.concurrent.DefaultManagedTaskScheduler
  • org.springframework.scheduling.quartz.SimpleThreadPoolTaskExecutor
  • org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
  • org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler

java.util.concurrent.CompletableFuture

java.util.concurrent.ThreadFactory

  • org.springframework.scheduling.concurrent.CustomizableThreadFactory
  • org.springframework.scheduling.concurrent.DefaultManagedAwareThreadFactory
  • org.springframework.scheduling.concurrent.ExecutorConfigurationSupport
  • io.netty.util.concurrent.DefaultThreadFactory

java.util.concurrent.RejectedExecutionHandler

  • ThreadPoolExecutor.AbortPolicy
  • ThreadPoolExecutor.CallerRunsPolicy
  • ThreadPoolExecutor.DiscardOldestPolicy
  • ThreadPoolExecutor.DiscardPolicy

java.util.concurrent.BlockingQueue

  • java.util.concurrent.ArrayBlockingQueue
  • java.util.concurrent.BlockingDeque
  • java.util.concurrent.DelayQueue
  • java.util.concurrent.LinkedBlockingQueue
  • java.util.concurrent.PriorityBlockingQueue
  • java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue
  • java.util.concurrent.SynchronousQueue
  • java.util.concurrent.TransferQueue
  • java.util.concurrent.ConcurrentLinkedQueue
  • java.util.concurrent.LinkedTransferQueue
  • java.util.PriorityQueue

java.util.concurrent.locks.Lock

  • ReentrantLock
  • ReentrantReadWriteLock.ReadLock
  • ReentrantReadWriteLock.WriteLock
  • StampedLock.ReadLockView
  • StampedLock.WriteLockView

java.util.concurrent.locks.AbstractQueuedSynchronizer

  • java.util.concurrent.CountDownLatch.Sync
  • java.util.concurrent.Semaphore.Sync
  • java.util.concurrent.ThreadPoolExecutor.Worker
  • java.util.concurrent.locks.ReentrantLock.Sync
  • java.util.concurrent.locks.ReentrantReadWriteLock.Sync

mysql lock

occ by update_time

# `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间'


CREATE TABLE `goods` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品id',
  `goods_name` varchar(16) DEFAULT NULL COMMENT '商品名称',
  `goods_title` varchar(64) DEFAULT NULL COMMENT '商品标题',
  `goods_img` varchar(64) DEFAULT NULL COMMENT '商品图片',
  `goods_detail` longtext COMMENT '商品详情',
  `goods_price` decimal(10,2) DEFAULT '0.00' COMMENT '商品单价',
  `goods_stock` int(11) DEFAULT '0' COMMENT '-1表示没有限制',
  `update_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

select * from goods where id =1;
VAR_UPDATE_TIME=<上边的语句拿回来>
update goods set goods_stock=goods_stock-1 where id =1 and update_time='<VAR_UPDATE_TIME>';


### https://www.huangchaoyu.com/2021/07/01/mysql%E4%BD%BF%E7%94%A8updatetime%E4%BD%9C%E4%B8%BA%E4%B9%90%E8%A7%82%E9%94%81/

occ by version

select * from promotion_sec_kill where goods_id =1;
VAR_VERSION=<上边的语句拿回来>
UPDATE promotion_sec_kill SET ps_count = ps_count-?, version = version+1 WHERE version = <VAR_VERSION> AND goods_id = ?

## https://github.com/CocaineCong/Go-SecKill/blob/main/model/seckill.go#L75

pcc by for update

begin;
select * from promotion_sec_kill where goods_id =1 for update;
VAR_PS_COUNT=ps_count-1;
UPDATE promotion_sec_kill SET ps_count =<VAR_PS_COUNT> WHERE goods_id = ?
commit;