文章目錄
- 一、基本命令
- 二、redis 設置鍵的生存時間或過期時間
- 三、SortSet 排序集合類型操作
- 四、查看中文
- 五、密碼設置和查看密碼的方法
- 六、關于 Redis 的 database 相關基礎
- 七、查看內存占用
一、基本命令
# 查看版本
redis-cli --version
結果:redis-cli 8.0.0redis-server --version
結果:Redis server v=8.0.0 sha=00000000:2 malloc=jemalloc-5.3.0 bits=64 build=5c6bfe0bdcb0538b#查看所有key
keys * 或 keys "*"#查看匹配前綴的keys
keys "miao*"#清空redis
flushdb#查看key的類型
type key#查看數據庫中key的數量
dbsize#查看服務器信息
info#查看日志
slowlog get
slowlog get 10# 設置key的值,若存在則覆蓋
set key value# 重命名
RENAME oldkey newkey# 向key的字符串追加拼接
append key value# 獲取key對應的值 MGET key1 key2 ... keyN:獲取這些key對應的值
get key# 查看是否存在該元素
EXISTS key# 刪除元素
del key
參考:redis學習教程之一基本命令
二、redis 設置鍵的生存時間或過期時間
# 設置該元素多少秒后失效
EXPIRE key seconds# 設置該元素多少毫秒后失效
PEXPIRE key milliseconds# 查看還可以存活多少秒,-2表示key不存在,-1表示永久存儲
TTL key# 取消過期時間
persist key# unix時間戳,1970.1.1之后,這個絕對時間,將在這個時間刪除key。expireat pages:about 1356933600:在2012年12月31日上午12點刪除掉關鍵字
expireat key 時間戳
參考:redis設置鍵的生存時間或過期時間
??Java 實現:
import redis.clients.jedis.Jedis;public class RedisExpireExample {public static void main(String[] args) {// 連接到Redis服務器Jedis jedis = new Jedis("localhost", 6379);try {// 設置鍵 "key" 的值為 "value"jedis.set("key", "value");// 設置鍵 "key" 的過期時間為60秒jedis.expire("key", 60);// 打印鍵 "key" 的剩余生存時間System.out.println("剩余生存時間:" + jedis.ttl("key"));} finally {// 關閉連接jedis.close();}}
}
三、SortSet 排序集合類型操作
??創建一個 sort set
排序集合:
127.0.0.1:6379> zadd b3ebc2e6 0.1 id10
(integer) 1
127.0.0.1:6379> zadd b3ebc2e6 0.5 id11
(integer) 1
127.0.0.1:6379> zadd b3ebc2e6 2.1 id12
(integer) 1
127.0.0.1:6379> zadd b3ebc2e6 0.7 id13
(integer) 1
??我們按照權值從大到小逆序排序顯示一下我們的數據:
127.0.0.1:6379> zrevrange b3ebc2e6 0 100
1) "id12"
2) "id13"
3) "id11"
4) "id10"
??我們要刪除回復量最低的數據(從小到大的排序后,刪除區間為0到0的元素,也就是0本身):
127.0.0.1:6379> zremrangebyrank b3ebc2e6 0 0
(integer) 1
127.0.0.1:6379> zrevrange b3ebc2e6 0 100
1) "id12"
2) "id13"
3) "id11"
??想查看某一個權值數據的排名(zrank 從小到大,zrevrank 從大到小),使用 zrank 指令:
127.0.0.1:6379> zrank b3ebc2e6 id11
(integer) 0
127.0.0.1:6379> zrank b3ebc2e6 id13
(integer) 1
127.0.0.1:6379> zrank b3ebc2e6 id12
(integer) 2
127.0.0.1:6379> zrevrank b3ebc2e6 id11
(integer) 2
??zcard 指令可以返回 SortSet 集合中的元素個數:
127.0.0.1:6379> zcard b3ebc2e6
(integer) 3
??zincrby 指令增加某個權值下的數值,我們給 id11 的數據加 200:
127.0.0.1:6379> zincrby b3ebc2e6 200 id11
"200.5"
127.0.0.1:6379> zrevrange b3ebc2e6 0 100
1) "id11"
2) "id12"
3) "id13"
??最后,想查看某個權值對應的數據值,使用 zscore 就可以了:
127.0.0.1:6379> zscore b3ebc2e6 id12
"2.1000000000000001"
參考:
【Redis緩存機制】7.SortSet排序集合類型操作
Redis sort 排序命令詳解
四、查看中文
??Redis 在使用命令行操作時,如果查看內容中包含中文,會顯示16進制的字符串 \xe4\xb8\xad\xe5\x9b\xbd
127.0.0.1:6379> set k1 '中國'
OK
127.0.0.1:6379> get k1
"\xe4\xb8\xad\xe5\x9b\xbd"# 解決:
redis-cli 后面加上–-raw
$ redis-cli --raw
127.0.0.1:6379> get k1
中國
五、密碼設置和查看密碼的方法
??redis 沒有實現訪問控制這個功能,但是它提供了一個輕量級的認證方式,可以編輯 redis.conf
配置來啟用認證。
??1. 初始化 Redis 密碼:
??在配置文件中有個參數:requirepass
這個就是配置 redis 訪問密碼的參數; 比如 requirepass test123
;(Ps:需重啟 Redis 才能生效) redis 的查詢速度是非常快的,外部用戶一秒內可以嘗試多大150K個密碼;所以密碼要盡量長(對于DBA 沒有必要必須記住密碼);
??2. 不重啟Redis設置密碼:
# 設置密碼
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
# 查詢密碼
127.0.0.1:6379> config set requirepass 123456
OK
127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.
# 密碼驗證
127.0.0.1:6379> auth 123456
OK
# 再次查詢
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
# PS:如果配置文件中沒添加密碼 那么redis重啟后,密碼失效;
??3. 登陸有密碼的 Redis
# 在登錄的時候的時候輸入密碼
redis-cli -h 127.0.0.1 -p 6379 -a 123456# 先登陸后驗證
redis-cli -p 6379
redis 127.0.0.1:6379> auth 123456
OK
??AUTH 命令跟其他 redis 命令一樣,是沒有加密的;阻止不了攻擊者在網絡上竊取你的密碼;
??認證層的目標是提供多一層的保護。如果防火墻或者用來保護 redis 的系統防御外部攻擊失敗的話,外部用戶如果沒有通過密碼認證還是無法訪問 redis 的。
參考:Redis 密碼設置和查看密碼的方法
六、關于 Redis 的 database 相關基礎
??Redis 默認提供了16個數據庫(database),每個數據庫有一個 id,從0到15,他們沒有名字,只有 id。
??可以在 Redis 配置文件中修改數據庫個數,使用以下配置:
# 代表啟動時提供32個數據庫
databases 32
??客戶端登錄 Redis 時默認登錄的是 id 為 0 的數據庫。不同的數據庫中數據隔離保存。使用select id命令可以切換當前數據庫,比如:
??切換數據庫后 Redis 命令行會有數據庫 id 的標識,另外,0號數據庫不顯示標識。FLUSHALL 命令會清空所有數據庫中的數據庫,不只是當前數據庫。
??spring-boot 可以在配置文件中設置默認登錄的數據庫(這樣默認登錄的數據庫就是 5):
spring.redis.database=5
參考:關于Redis的database相關基礎
七、查看內存占用
??要查看 Redis 的內存占用情況,可以通過以下幾種方式進行操作:
??INFO memory
: 該命令會返回一個包含內存相關信息的文本,其中包括 used_memory
字段表示已使用內存的大小,used_memory_human
字段表示已使用內存的大小(以人類可讀的格式顯示)。
??MEMORY STATS
:該命令會返回一個包含詳細內存統計信息的文本,其中包括 used_memory
字段表示已使用內存的大小,used_memory_human
字段表示已使用內存的大小(以人類可讀的格式顯示)。
127.0.0.1:6379> INFO memory
# Memory
used_memory:4952568
used_memory_human:4.72M
used_memory_rss:7786496
used_memory_rss_human:7.43M
used_memory_peak:5754256
used_memory_peak_human:5.49M
used_memory_peak_perc:86.07%
used_memory_overhead:1616328
used_memory_startup:865968
used_memory_dataset:3336240
used_memory_dataset_perc:81.64%
allocator_allocated:5176184
allocator_active:6045696
allocator_resident:9076736
total_system_memory:33566556160
total_system_memory_human:31.26G
used_memory_lua:31744
used_memory_vm_eval:31744
used_memory_lua_human:31.00K
used_memory_scripts_eval:0
number_of_cached_scripts:0
number_of_functions:0
number_of_libraries:0
used_memory_vm_functions:32768
used_memory_vm_total:64512
used_memory_vm_total_human:63.00K
used_memory_functions:184
used_memory_scripts:184
used_memory_scripts_human:184B
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.17
allocator_frag_bytes:869512
allocator_rss_ratio:1.50
allocator_rss_bytes:3031040
rss_overhead_ratio:0.86
rss_overhead_bytes:-1290240
mem_fragmentation_ratio:1.57
mem_fragmentation_bytes:2834128
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_total_replication_buffers:0
mem_clients_slaves:0
mem_clients_normal:43608
mem_cluster_links:0
mem_aof_buffer:0
mem_allocator:jemalloc-5.3.0
active_defrag_running:0
lazyfree_pending_objects:0
lazyfreed_objects:0
127.0.0.1:6379> MEMORY STATS1) "peak.allocated"2) (integer) 57542563) "total.allocated"4) (integer) 50066885) "startup.allocated"6) (integer) 8659687) "replication.backlog"8) (integer) 09) "clients.slaves"
10) (integer) 0
11) "clients.normal"
12) (integer) 95216
13) "cluster.links"
14) (integer) 0
15) "aof.buffer"
16) (integer) 0
17) "lua.caches"
18) (integer) 0
19) "functions.caches"
20) (integer) 184
21) "db.2"
22) 1) "overhead.hashtable.main"2) (integer) 4054323) "overhead.hashtable.expires"4) (integer) 2649445) "overhead.hashtable.slot-to-keys"6) (integer) 0
23) "db.10"
24) 1) "overhead.hashtable.main"2) (integer) 361923) "overhead.hashtable.expires"4) (integer) 05) "overhead.hashtable.slot-to-keys"6) (integer) 0
25) "overhead.total"
26) (integer) 1667936
27) "keys.count"
28) (integer) 7559
29) "keys.bytes-per-key"
30) (integer) 547
31) "dataset.bytes"
32) (integer) 3338752
33) "dataset.percentage"
34) "80.63216400146484"
35) "peak.percentage"
36) "87.00843048095703"
37) "allocator.allocated"
38) (integer) 5235728
39) "allocator.active"
40) (integer) 6098944
41) "allocator.resident"
42) (integer) 9129984
43) "allocator-fragmentation.ratio"
44) "1.164870262145996"
45) "allocator-fragmentation.bytes"
46) (integer) 863216
47) "allocator-rss.ratio"
48) "1.4969778060913086"
49) "allocator-rss.bytes"
50) (integer) 3031040
51) "rss-overhead.ratio"
52) "0.8716913461685181"
53) "rss-overhead.bytes"
54) (integer) -1171456
55) "fragmentation"
56) "1.5896047353744507"
57) "fragmentation.bytes"
58) (integer) 2951920