Redis 使用及命令操作
文章目录
- 一、基本命令
- 二、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