当前位置: 首页 > news >正文

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

相关文章:

  • 实操3:6位数码管
  • C语言的重要知识点☞static关键字
  • 探索SQLMesh中的Jinja宏:提升SQL查询的灵活性与复用性
  • 人工智能任务24-AI学习中的模型训练中稀疏化参数与稀疏损失函数,以及实战项目应用
  • conda 安装cudnn
  • Android第六次面试总结之Java设计模式(二)
  • LeetCode 1. 两数之和(Java)
  • flex布局打印对联
  • 如何对 Redis 进行水平扩展和垂直扩展以应对微服务流量的增长?
  • C++ 重载
  • Matplotlib 饼图
  • 【C++】C++中的命名/名字/名称空间 namespace
  • 爱普生VG7050EFN压控晶振在小基站的应用优势
  • 【T2I】DreamBench++: A Human-Aligned Benchmark for Personalized Image Generation
  • Kali:利用rockyou文本字典hash破解zip压缩包密码
  • NetApp SAS 连接线:铜缆与光缆的全面介绍
  • 开源智能体MetaGPT记忆模块解读
  • 【5G通信】天线调整
  • 【AI】用AI将文档、文字一键生成PPT的方法(百度的自由画布版)
  • STL详解 - map和set
  • 上海:下调个人住房公积金贷款利率
  • 解读|降准叠加政策利率、公积金贷款利率、结构性政策工具利率全线下调,影响有多大?
  • 探索人类的心灵这件事,永远也不会过时
  • 央行行长详解降准:将释放长期流动性1万亿,整体存款准备金率平均水平降至6.2%
  • 科技赋能文化体验,“五一”假期“海昏侯”人气创新高
  • 郭旭涛转任河北省科协党组书记、常务副主席,曾任团省委书记