演示文稿主題怎么設置啊(怎么將演示文稿主題設置)
814
2022-05-29
【辰兮要努力】:hello你好我是辰兮,很高興你能來閱讀,昵稱是希望自己能不斷精進,向著優秀程序員前行!
博客來源于項目以及編程中遇到的問題總結,偶爾會有讀書分享,我會陸續更新Java前端、后臺、數據庫、項目案例等相關知識點總結,感謝你的閱讀和關注,希望我的博客能幫助到更多的人,分享獲取新知,大家一起進步!
吾等采石之人,應懷大教堂之心,愿你們奔赴在各自的熱愛中…
文章目錄
一、Redis序言
二、Redis
一、Redis序言
一年前就已經接觸了Redis的相關知識,了解了這個強大的Redis緩存數據庫,接下來會陸續抽時間整理Redis的相關具體應用在電影購票,等相關場景的實現和Redis鍵值的設計思路,希望自己努力成為一名合格的開發工程師!
Redis簡介
Redis 是開源免費的,遵守BSD協議,是一個高性能的key-value非關系型數據庫。
Redis特點:
3、Redis支持數據的備份,即master-slave模式的數據備份。
4、性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
5、原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全并后的原子性執行。
6、豐富的特性 – Redis還支持 publish/subscribe, 通知, 設置key有效期等等特性。
二、Redis
先說一下自己項目遇到的真實場景,就是給一個社交圈平臺帖子和評論的Redis鍵值設計!
當我給 當前帖子(post)后這個接口會有兩個邏輯
第一:當前帖子總贊數+1 ,然后將新的總數存儲在redis中;
第二:用Redis記錄用戶 給這個帖子
當我給 當前帖子某一條評論(review)后這個接口會有兩個邏輯
第一:當前評論總贊數+1 ,然后將新的總數存儲在redis中;
第二:用Redis記錄用戶 給這個該評論
用戶給帖子這里的用戶ID(userId)是從后臺直接獲取的,這里有一個邏輯就是:判斷如果用戶未登錄是無法進行的;
服務器開啟postman測試
正常postman測試 傳入帖子ID(postId)和狀態likeStatus
測試數據給id為65的帖子,傳入1代表 0代表取消贊
測試數據 給帖子Id為66號的帖子 ,傳入1代表 0代表取消贊
這里我們登陸Redis的桌面工具查看我們存儲redis鍵值的情況!
來看看顯示一下存儲效果,POSTID是存儲總數的,POST_USERID是記錄用戶的,綁定的是用戶id和帖子id
如上顯示的是記錄了65,66號帖子的數,同時記錄了34號用戶了65和66號帖子;
如上我們要設計兩個鍵值:一個存儲總數目的鍵,一個記錄具體用戶的鍵
//單獨記錄帖子本身的鍵的設計 String key = "POSTID:" + postId; //記錄用戶具體帖子的鍵值設計 String userKey = "POST_USERID:" + postId + "-" + userId;
1
2
3
4
鍵值這里是可以靈活設計的,但是你要確保唯一且自己能看懂
相關代碼:,要傳入的是帖子id(postId) ,用戶id (userId),用戶狀態likeStatus 0代表取消,1代表
簡單邏輯就是先判斷Redis中有無我們需要的鍵
1.如果有我們要的鍵,我們直接從鍵中取出對應的值 即(總數 +用戶情況)
2.如果沒有我們要的鍵,我們先從數據庫中取總數的情況,如果數據庫中取出總數為0,那么代表是第一次,我們給他設置為1,并存儲在對應的Redis中
3.針對具體的情況,再看看用戶是1還是取消贊0,再對應的+ -和增加刪除
//,要傳入的是帖子id,用戶id,用戶狀態0代表取消,1代表 public void updateLike(Long postId, Long userId, Integer likeStatus) { //單獨記錄帖子本身的鍵的設計 String key = "POSTID:" + postId; //記錄用戶具體帖子的鍵值設計 String userKey = "POST_USERID:" + postId + "-" + userId; //如果redis中有這個鍵 if (redisTemplate.hasKey(key)) { //我們將相關的值取出來,這個值就是該帖子的總數 Object o = redisTemplate.opsForValue().get(key); if (o != null) { //取出總數值,轉換成int類型進行總數加減 int likeNum = Integer.parseInt(o.toString()); //如果用戶 if (likeStatus == 1) { try { //邏輯1:帖子總數+1,存儲對應的鍵值,key為鍵,后總數加一存儲 redisTemplate.opsForValue().set(key, likeNum + 1, 10L, TimeUnit.MINUTES); //邏輯2:記錄對用戶的情況,將用戶和對應帖子綁定,在redis中存儲對應的鍵 redisTemplate.opsForValue().set(userKey, 1, 1L, TimeUnit.DAYS); } catch (Exception e) { logger.error("redis error:{}", e); } // 寫入數據庫post_like,其實也可以在數據庫中記錄對應情況,這樣是防止redis過期,具體業務具體分析; //postLikeService.save(postId, userId); } else { try { redisTemplate.opsForValue().set(key, likeNum - 1, 10L, TimeUnit.MINUTES); redisTemplate.delete(userKey); } catch (Exception e) { logger.error("redis error:{}", e); } postLikeService.delete(postId, userId); //總贊數 postMapper.updatePostCountLike(postId, (long) (likeNum - 1)); } } } else { /** 這里是判斷Redis中沒有相關鍵值記錄,即Redis中沒有記錄具體的帖子總數和某一個用戶的情況。 這里一般是兩個情況 1.該帖子從來沒有被過 這是第一次,第一次的時候就會設置鍵值 2.Redis中相關鍵值對過期 **/ // 首先我們查詢數據庫,拿取數據庫的該帖子的總數,這兩步具體看業務需求 Post post = postMapper.selectByPrimaryKey(postId); int likeCount = post.getLikeCount(); //當用戶的時候 if (likeStatus == 1) { try { //邏輯一:首先帖子總數的存儲在Redis中 redisTemplate.opsForValue().set(key, likeCount + 1, 10L, TimeUnit.MINUTES); //邏輯二:在Redis中記錄某一個具體用戶的情況 redisTemplate.opsForValue().set(userKey, 1, 1L, TimeUnit.DAYS); //這個likecount是數據庫取出來的,如果總數為0,代表沒有人過,帖子總數設置1 if (likeCount == 0) { post.setLikeCount(1); //同時同步更新到數據庫數據表中 這一步更加你自己的業務需求走 簡單的demo不需要 postMapper.updateByPrimaryKey(post); } } catch (Exception e) { logger.error("redis error:{}", e); } // 寫入數據庫post_like 按需求看自己是否要同步到數據庫 //postLikeService.save(postId, userId); } else { //如果取出來的總數為0,總數無法 -1 ,出現這樣的情況是我postman測試直接傳入likestatus為0的情況,真實頁面如果沒有是無法傳入0進來的; if (likeCount == 0) { logger.error("總數為0,無法取消"); } else { try { // redisTemplate.opsForValue().set(key, likeCount - 1, 10L, TimeUnit.MINUTES); redisTemplate.delete(userKey); } catch (Exception e) { logger.error("redis error:{}", e); } } } } }
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
如上的每一行我都寫了注釋,具體你應用到你的Redis中要根據項目具體的業務邏輯來,代碼可以適當刪減;
核心邏輯不變:設計一個存儲總數目的鍵,設計一個記錄具體用戶的鍵,鍵值保持唯一且和具體的帖子對應
//單獨記錄帖子本身的鍵的設計 String key = "POSTID:" + postId; //記錄用戶具體帖子的鍵值設計 String userKey = "POST_USERID:" + postId + "-" + userId;
1
2
3
4
所以我們一般采用帖子ID (postId)來拼接一個字符串保持此鍵的唯一
如上是存儲,你如果要顯示給前端頁面就用如下方式再取出來即可,Redis中也可以去除總數;
String userKey = "POST_USERID:" + postId + "-" + userId; boolean likeStatus = redisTemplate.hasKey(userKey); //從redis中判斷用戶是否喜歡帖子 postVo.setLikeStatus(likeStatus);
1
2
3
4
想必你一定有了更深入的了解,我們下期Redis文章見……
The best investment is to invest in yourself.
2020.10.18 愿你們奔赴在自己的熱愛里!
Redis 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。