千面由心,拥抱变化

Stay foolish. Be happy.


  • 首页

  • 编程

  • 学习

  • 哲思

  • 随想

  • 标签

  • 分类

  • 归档

  • 搜索

InnoDB中的MVCC机制

发表于 2018-11-14 | 分类于 programming
字数统计: 131 | 阅读时长 ≈ 1

乐观锁与悲观锁是关于锁的一种分类。MVCC(Multi-Version Concurrency Control)为多版本并发控制,是一种乐观锁的思想,InnoDB中每个操作都会有一个隐藏属性,“版本号”-事务ID,通过事务ID可实现“可重复读”的隔离级别。

在数据库设计中,可借鉴这种思想,每个表都加一个rowstamp时间戳作为版本号,可以在数据库并发控制与redis并发控制中起到很便利的作用。

Redis发布订阅机制

发表于 2018-11-14 | 分类于 programming
字数统计: 632 | 阅读时长 ≈ 3

在开发进程缓存系统的时候,在更新缓存值的时候需要有一个通知机制。之前使用的是spring的监听机制,在涉及更新操作后,通过ApplicationContext发布ApplicationEvent,由@EventListener监听事件并更新缓存。但是spring监听机制只能在单机使用,涉及到集群部署,只能更新当前机器的缓存。如果使用消息队列又太重、太繁琐,后来发现redis本身提供订阅发布机制,可有效解决此类问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* redis发布-订阅机制中的订阅者,相当于监听器
*/
@Service
public class RedisTopicSubscriber {

private Logger logger = LoggerFactory.getLogger(getClass());

@Resource
private RedisMessageListenerContainer redisMessageListenerContainer;

private MessageListenerAdapter adapter;

@Resource
private CacheDao cacheDao;

@PostConstruct
private void init() {
adapter = new MessageListenerAdapter(this);
adapter.afterPropertiesSet();

redisMessageListenerContainer.addMessageListener(adapter, new ChannelTopic(RedisConstant.TOPIC));
}

/**
* 处理监听到的消息
*
* @param channel
* @param message
*/
public <T extends EntityHasNCM> void handleMessage(String message, String channel) {
logger.info("接收到redis订阅消息,渠道{},信息{}", channel, message);

RedisEvent redisEvent = JSON.parseObject(message, RedisEvent.class);
JSONObject enitity = (JSONObject)redisEvent.getItem();
Object item = JSONObject.parseObject(enitity.toJSONString(), redisEvent.gettClass());

switch (redisEvent.getType()) {
case 0:
cacheDao.updateCache((T)item);
break;
case 1:
cacheDao.updateCache((T)item);
break;
case 2:
cacheDao.updateCache((T)item);
break;
case 3:
cacheDao.deleteCache((T)item);
break;
default:
return;
}
}

RedisMessageListenerContainer为redis监听者容器,redis中的监听者在启动时注册到容器中,MessageListenerAdapter为redis监听者适配,可指定适配对象与适配方法,默认是handleMessage方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* redis发布-订阅中的发布者
*/
@Service
public class RedisTopicPublisher {

private Logger logger = LoggerFactory.getLogger(getClass());

@Resource
private RedisUtil redisUtil;

public <T extends EntityHasNCM> void publishSearchEvent(T item, String message) {
logger.info("发布查询事件开始:" + message);

publishRedisEvent(JSON.toJSONString(new CacheSearchEvent<>(this, item, message)));

logger.info("发布查询事件结束:" + message);
}

public <T extends EntityHasNCM> void publishInsertEvent(T item, String message) {
logger.info("发布插入事件开始:" + message);

publishRedisEvent(JSON.toJSONString(new CacheInsertEvent<>(this, item, message)));

logger.info("发布插入事件结束:" + message);
}

public <T extends EntityHasNCM> void publishUpdateEvent(T item, String message) {
logger.info("发布更新事件开始:" + message);

publishRedisEvent(JSON.toJSONString(new CacheUpdateEvent<>(this, item, message)));

logger.info("发布更新事件结束:" + message);
}

public <T extends EntityHasNCM> void publishDeleteEvent(T item, String message) {
logger.info("发布删除事件开始:" + message);

publishRedisEvent(JSON.toJSONString(new CacheDeleteEvent<>(this, item, message)));

logger.info("发布删除事件结束:" + message);
}

private <T extends EntityHasNCM> void publishRedisEvent(String message) {
redisUtil.call(jedis -> jedis.publish(RedisConstant.TOPIC, message));
}
}

Dubbo框架解析

发表于 2018-10-28 | 分类于 learning
字数统计: 0 | 阅读时长 ≈ 1

舜尧计划

发表于 2018-10-07 | 分类于 thinking
字数统计: 647 | 阅读时长 ≈ 2

春风杨柳千万条,六亿神州皆舜尧。

毛爷爷的愿景依然还只是理想世界,十四亿的神州一部分陷入高频低质的娱乐轰炸中,一部分被高压文化阉割,处于美丽新世界与1984的威权社会的魔幻交合中。但是,还是有一部分清醒、睿智、有理想的现实主义者在默默做着努力,努力让社会变得更好,让下一代生活在一个更明亮的世界。

中国社会的走向一方面掌握在政府手中,但是政府的最基本目的都是保持平稳,不做改变就是就好的变化。这就需要社会上有影响力的集体、个人、舆论去倡导,但是集体有集体的利益,资本有资本的劣根性,个人有自己的欲望,触动利益比触动灵魂更难。不过,这也是相对的。需要塑造一个有理想的集体,去完成以普及科学,攀登人类科学高峰,并诱发社会崇尚科学、追寻科学的氛围。

支付宝的社交尝试一次次失败,既然都是撒钱进行社交尝试,为什么不尝试建立一种新型的社交关系,科学问题讨论的社交关系。中国人都有应试教育的经历,都有青春讨论题目的经历,也都有少年的一些未完之境。尝试以答题奖赏为形式的新型社交关系的建立,不仅可以推动字符包自己的社交版本,也是中国科学氛围的推动者,不要在50年内不再有中国人获得诺贝尔奖,

活动形式就是选取当前科学界一些难题进行悬赏,根据答题正确的先后顺序进行奖励,只要答对就有奖励,并对优秀答案和优秀的解答进行投票进行进一步奖励。每个人都可以在别人的教导下答题,只要答对就可以分一杯羹,或者把自己的奖励进行捐赠或者投给别人。

题目的形式也不一定局限于科学类,也可以进行社会科学的探讨。

希望能推动中国科学的发展吧,十四亿神州其实是巨大的资源,这么多优秀的资源却不能筛选出来进行有序培养,实在可惜。

舜尧不必是你我,你我却可以培养出舜尧。

回头望

发表于 2018-08-31
字数统计: 14 | 阅读时长 ≈ 1

最怕英雄回头望

百折努力终为空

着色

发表于 2018-08-31 | 分类于 note
字数统计: 98 | 阅读时长 ≈ 1

我的天空时常飘着冷的雨

抱紧双肩依然红了脸

快步地走过每一个喧闹的路口

期待一个温暖的拥有

我的天空颜色总是苍白的

想要着色却没有鲜艳

被人的世界基色是红蓝绿

而我只有黑与白

不经意的一次回眸

却是红砂浸透了宣纸末

柳絮

发表于 2018-08-30 | 分类于 note
字数统计: 14 | 阅读时长 ≈ 1

身如柳絮随风摆

命如浮萍任雨摇

星辰

发表于 2018-08-20 | 分类于 note
字数统计: 8 | 阅读时长 ≈ 1

吾夜晦暗

君启星辰

逃脱

发表于 2018-08-13 | 分类于 note
字数统计: 30 | 阅读时长 ≈ 1

鼓起了多少次勇气

激励了多少次精神

切断了多少条后路

我终于

开始逃

美人

发表于 2018-08-13 | 分类于 note
字数统计: 22 | 阅读时长 ≈ 1

有美人兮如兰

纤纤柔荑

肤若凝脂

一朵桃腮

笑意盈盈

12…4

Viking

描述看看有啥效果

36 日志
4 分类
5 标签
© 2018 Viking | Site words total count: 6.9k
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4