redis java library
- Jedis https://mvnrepository.com/artifact/redis.clients/jedis
- Lettuce https://mvnrepository.com/artifact/io.lettuce/lettuce-core
- Redisson https://mvnrepository.com/artifact/org.redisson/redisson
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;