Java核心篇之Redis--day4
Java核心篇之Redis–day4
Redis有哪些數據結構?
字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。
1.String:字符串,常用命令:get,set,decr,incr,mget(查詢多個key)
2.Hash類型:hset(添加賦值)/hget(查詢)/hgetall(查詢所有字段和值)等。
3.list(列表類型):lpush(列表頭部添加元素)/rpush(列表尾部添加元素)/lpop(頭部刪除元素)/rpop(尾部刪除元素)/lrange(查詢元素):不支持嵌套其他數據類型,應用場景很多,存儲文章評論列表,存儲用戶的粉絲列表,黑名單列表等,也可以作為重要的消息隊列來使用。Redis的list數據結構的實現是一個雙向鏈表,支持正向反向遍歷查找,方便用戶操作的同時,也增加了內存開銷。
4.Set集合類型:Redis集合是字符串的不重復無序結構。常用命令有sadd(添加元素)/spop(刪除)/smembers(查詢)/sunion(添加多個集合)等,不支持嵌套其他數據類型,提供自動去重的功能(內部實現是一個value永遠為null的hashmap)
5.Zset(sorted set)在set基礎上關聯一個score,通過score來實現排序的功能。(應用到的場合:實現文章按點擊量排序,微博熱搜榜,論壇熱帖)
高級應用:
RDB:在不同的時間點,將redis存儲的數據生成快照并存儲到磁盤等介質上;
AOF:將執行過的指令記錄下來,在數據恢復時按照從前到后的順序再將指令都執行一遍,從而恢復數據。
Redis作為一個內存數據庫,優勢如下:使用redis的好處:快速,持久化,事務原子性,單線程,緩存,多種類型
使用過Redis分布式鎖么,它是什么回事?
先拿setnx來爭搶鎖,搶到之后,再用expire給鎖加一個過期時間防止鎖忘記了釋放。
這時候對方會告訴你說你回答得不錯,然后接著問如果在setnx之后執行expire之前進程意外crash或者要重啟維護了,那會怎么樣?
這時候你要給予驚訝的反饋:唉,是喔,這個鎖就永遠得不到釋放了。緊接著你需要抓一抓自己得腦袋,故作思考片刻,好像接下來的結果是你主動思考出來的,然后回答:我記得set指令有非常復雜的參數,這個應該是可以同時把setnx和expire合成一條指令來用的!對方這時會顯露笑容,心里開始默念:摁,這小子還不錯。https://juejin.im/post/5b16148a518825136137c8db
總結
以上是生活随笔為你收集整理的Java核心篇之Redis--day4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态代理与静态代理
- 下一篇: Java核心篇之Java锁--day2