diff --git a/packages/backend/src/core/FederatedInstanceService.ts b/packages/backend/src/core/FederatedInstanceService.ts
index e028265bdc..2049bd4c60 100644
--- a/packages/backend/src/core/FederatedInstanceService.ts
+++ b/packages/backend/src/core/FederatedInstanceService.ts
@@ -23,8 +23,8 @@ export class FederatedInstanceService {
 		private idService: IdService,
 	) {
 		this.federatedInstanceCache = new RedisKVCache<Instance | null>(this.redisClient, 'federatedInstance', {
-			lifetime: 1000 * 60 * 60 * 24, // 24h
-			memoryCacheLifetime: 1000 * 60 * 30, // 30m
+			lifetime: 1000 * 60 * 30, // 30m
+			memoryCacheLifetime: 1000 * 60 * 3, // 3m
 			fetcher: (key) => this.instancesRepository.findOneBy({ host: key }),
 			toRedisConverter: (value) => JSON.stringify(value),
 			fromRedisConverter: (value) => {
@@ -65,15 +65,18 @@ export class FederatedInstanceService {
 	}
 
 	@bindThis
-	public async updateCachePartial(host: string, data: Partial<Instance>): Promise<void> {
-		host = this.utilityService.toPuny(host);
+	public async update(id: Instance['id'], data: Partial<Instance>): Promise<void> {
+		const result = await this.instancesRepository.createQueryBuilder().update()
+			.set(data)
+			.where('id = :id', { id })
+			.returning('*')
+			.execute()
+			.then((response) => {
+				return response.raw[0];
+			});
+
+		const updated = result.raw[0];
 	
-		const cached = await this.federatedInstanceCache.get(host);
-		if (cached == null) return;
-	
-		this.federatedInstanceCache.set(host, {
-			...cached,
-			...data,
-		});
+		this.federatedInstanceCache.set(updated.host, updated);
 	}
 }
diff --git a/packages/backend/src/core/FetchInstanceMetadataService.ts b/packages/backend/src/core/FetchInstanceMetadataService.ts
index bbc8b4332e..8103d5afe9 100644
--- a/packages/backend/src/core/FetchInstanceMetadataService.ts
+++ b/packages/backend/src/core/FetchInstanceMetadataService.ts
@@ -10,6 +10,7 @@ import { DI } from '@/di-symbols.js';
 import { LoggerService } from '@/core/LoggerService.js';
 import { HttpRequestService } from '@/core/HttpRequestService.js';
 import { bindThis } from '@/decorators.js';
+import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
 import type { DOMWindow } from 'jsdom';
 
 type NodeInfo = {
@@ -42,6 +43,7 @@ export class FetchInstanceMetadataService {
 		private appLockService: AppLockService,
 		private httpRequestService: HttpRequestService,
 		private loggerService: LoggerService,
+		private federatedInstanceService: FederatedInstanceService,
 	) {
 		this.logger = this.loggerService.getLogger('metadata', 'cyan');
 	}
@@ -96,7 +98,7 @@ export class FetchInstanceMetadataService {
 			if (favicon) updates.faviconUrl = favicon;
 			if (themeColor) updates.themeColor = themeColor;
 	
-			await this.instancesRepository.update(instance.id, updates);
+			await this.federatedInstanceService.update(instance.id, updates);
 	
 			this.logger.succ(`Successfuly updated metadata of ${instance.host}`);
 		} catch (e) {
diff --git a/packages/backend/src/queue/processors/DeliverProcessorService.ts b/packages/backend/src/queue/processors/DeliverProcessorService.ts
index 0e99b7bcd2..f293bd4d7e 100644
--- a/packages/backend/src/queue/processors/DeliverProcessorService.ts
+++ b/packages/backend/src/queue/processors/DeliverProcessorService.ts
@@ -79,10 +79,7 @@ export class DeliverProcessorService {
 			// Update stats
 			this.federatedInstanceService.fetch(host).then(i => {
 				if (i.isNotResponding) {
-					this.instancesRepository.update(i.id, {
-						isNotResponding: false,
-					});
-					this.federatedInstanceService.updateCachePartial(host, {
+					this.federatedInstanceService.update(i.id, {
 						isNotResponding: false,
 					});
 				}
@@ -101,10 +98,7 @@ export class DeliverProcessorService {
 			// Update stats
 			this.federatedInstanceService.fetch(host).then(i => {
 				if (!i.isNotResponding) {
-					this.instancesRepository.update(i.id, {
-						isNotResponding: true,
-					});
-					this.federatedInstanceService.updateCachePartial(host, {
+					this.federatedInstanceService.update(i.id, {
 						isNotResponding: true,
 					});
 				}
@@ -123,10 +117,7 @@ export class DeliverProcessorService {
 					// 相手が閉鎖していることを明示しているため、配送停止する
 					if (job.data.isSharedInbox && res.statusCode === 410) {
 						this.federatedInstanceService.fetch(host).then(i => {
-							this.instancesRepository.update(i.id, {
-								isSuspended: true,
-							});
-							this.federatedInstanceService.updateCachePartial(host, {
+							this.federatedInstanceService.update(i.id, {
 								isSuspended: true,
 							});
 						});
diff --git a/packages/backend/src/queue/processors/InboxProcessorService.ts b/packages/backend/src/queue/processors/InboxProcessorService.ts
index ed7f38d013..ada6f9e967 100644
--- a/packages/backend/src/queue/processors/InboxProcessorService.ts
+++ b/packages/backend/src/queue/processors/InboxProcessorService.ts
@@ -174,13 +174,10 @@ export class InboxProcessorService {
 
 		// Update stats
 		this.federatedInstanceService.fetch(authUser.user.host).then(i => {
-			this.instancesRepository.update(i.id, {
+			this.federatedInstanceService.update(i.id, {
 				latestRequestReceivedAt: new Date(),
 				isNotResponding: false,
 			});
-			this.federatedInstanceService.updateCachePartial(host, {
-				isNotResponding: false,
-			});
 
 			this.fetchInstanceMetadataService.fetchInstanceMetadata(i);
 
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts b/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
index 0a529ecb08..4fd74e591d 100644
--- a/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
+++ b/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts
@@ -3,6 +3,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
 import type { InstancesRepository } from '@/models/index.js';
 import { UtilityService } from '@/core/UtilityService.js';
 import { DI } from '@/di-symbols.js';
+import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
 
 export const meta = {
 	tags: ['admin'],
@@ -28,6 +29,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 		private instancesRepository: InstancesRepository,
 
 		private utilityService: UtilityService,
+		private federatedInstanceService: FederatedInstanceService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
 			const instance = await this.instancesRepository.findOneBy({ host: this.utilityService.toPuny(ps.host) });
@@ -36,7 +38,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 				throw new Error('instance not found');
 			}
 
-			this.instancesRepository.update({ host: this.utilityService.toPuny(ps.host) }, {
+			this.federatedInstanceService.update(instance.id, {
 				isSuspended: ps.isSuspended,
 			});
 		});
diff --git a/packages/frontend/src/components/MkNumberDiff.vue b/packages/frontend/src/components/MkNumberDiff.vue
index e7d4a5472a..303417dae8 100644
--- a/packages/frontend/src/components/MkNumberDiff.vue
+++ b/packages/frontend/src/components/MkNumberDiff.vue
@@ -1,47 +1,32 @@
 <template>
-<span class="ceaaebcd" :class="{ isPlus, isMinus, isZero }">
+<span class="ceaaebcd" :class="{ [$style.isPlus]: isPlus, [$style.isMinus]: isMinus, [$style.isZero]: isZero }">
 	<slot name="before"></slot>{{ isPlus ? '+' : '' }}{{ number(value) }}<slot name="after"></slot>
 </span>
 </template>
 
-<script lang="ts">
-import { computed, defineComponent } from 'vue';
+<script lang="ts" setup>
+import { computed } from 'vue';
 import number from '@/filters/number';
 
-export default defineComponent({
-	props: {
-		value: {
-			type: Number,
-			required: true,
-		},
-	},
+const props = defineProps<{
+	value: number;
+}>();
 
-	setup(props) {
-		const isPlus = computed(() => props.value > 0);
-		const isMinus = computed(() => props.value < 0);
-		const isZero = computed(() => props.value === 0);
-		return {
-			isPlus,
-			isMinus,
-			isZero,
-			number,
-		};
-	},
-});
+const isPlus = computed(() => props.value > 0);
+const isMinus = computed(() => props.value < 0);
+const isZero = computed(() => props.value === 0);
 </script>
 
-<style lang="scss" scoped>
-.ceaaebcd {
-	&.isPlus {
-		color: var(--success);
-	}
+<style lang="scss" module>
+.isPlus {
+	color: var(--success);
+}
 
-	&.isMinus {
-		color: var(--error);
-	}
+.isMinus {
+	color: var(--error);
+}
 
-	&.isZero {
-		opacity: 0.5;
-	}
+.isZero {
+	opacity: 0.5;
 }
 </style>
diff --git a/packages/frontend/src/ui/deck/column.vue b/packages/frontend/src/ui/deck/column.vue
index 798bfdc98f..19643cfd94 100644
--- a/packages/frontend/src/ui/deck/column.vue
+++ b/packages/frontend/src/ui/deck/column.vue
@@ -243,7 +243,7 @@ function onDrop(ev) {
 <style lang="scss" module>
 .root {
 	--root-margin: 10px;
-	--deckColumnHeaderHeight: 40px;
+	--deckColumnHeaderHeight: 38px;
 
 	height: 100%;
 	overflow: clip;