Redis基础用法

本文介绍了Redis的基础概念,包括如何安装、连接管理、常用数据结构如字符串、列表、集合、哈希、有序集合和位图的使用方法。详细讲解了如何在命令行中操作、设置过期时间以及处理不同数据类型的实例。
摘要由CSDN通过智能技术生成

1. 初识 Redis

自行查阅 Redis官方文档 了解 Redis。推荐阅读列表:

  1. Redis提供了什么功能?
  2. 如何安装Redis?
  3. Redis支持哪些数据类型?
  4. 如何使用Redis命令行界面?
  5. 开发者如何使用Redis?
  6. 如何在编程语言中使用Redis?

注意:本文档只介绍常见用法,一些特殊的用法请参考官方文档。

2. 常见用法

Redis可当成命令行程序使用,也可以使用交互模式,参考 如何使用Redis命令行界面?

注意:本文档所述均基于交互模式。

2.1. 连接管理

2.1.1. 连接Redis

使用默认参数(IP:127.0.0.1;端口:6379)连接Redis:

$ redis-cli

连接指定IP(-h)和端口(-p)的Redis:

$ redis-cli -h redis15.localnet.org -p 6390

如果执行命令时提示(error) NOAUTH Authentication required.表示需要输入密码。使用 auth 命令认证即可,如下所示(其中 123456 为密码):

> auth 123456

连接成功之后执行 ping 命令即可测试连接是否正常:

> ping
PONG

2.1.2. 断开连接

使用 quit 命令即可断开与服务器的连接:

> quit

2.2. 基础操作

2.2.1. 查看帮助

使用 help 命令查看帮助:

> help
redis-cli 5.0.14.1 (git:ec77f72d)
To get help about Redis commands type:
      "help @<group>" to get a list of commands in <group>
      "help <command>" for help on <command>
      "help <tab>" to get a list of possible help topics
      "quit" to exit

To set redis-cli preferences:
      ":set hints" enable online hints
      ":set nohints" disable online hints
Set your preferences in ~/.redisclirc

查看指定命令组帮助:

> help @generic

命令组包含:

  • @generic
  • @string
  • @list
  • @set
  • @sorted_set
  • @hash
  • @pubsub
  • @transactions
  • @connection
  • @server
  • @scripting
  • @hyperloglog
  • @cluster
  • @geo
  • @stream

查看指定命令帮助:

> help get

2.2.2. 查看基础信息

使用 info 命令查看基础信息(服务器信息、内存使用情况、客户端统计信息等),可查看所有信息:

> info

也可查看指定部分信息:

> info server
> info keyspace

2.2.3. 清屏

当觉得命令行界面上显示的信息过于杂乱时,可使用 clear 命令执行清屏操作:

> clear

2.2.4. 选择数据库

redis默认创建16个数据库(编号为0-15),可使用 select 命令选择数据库:

> select 0
OK
> select 15
OK

2.2.5. 查看数据库key数量

可使用 dbsize 命令查看当前数据库中 key 总数

> select 0
OK
> dbsize
(integer) 7
> select 15
OK
> dbsize
(integer) 0

2.2.6. 重复执行命令

在命令之前加上一个数字,可以重复执行指定次数命令:

> set mycounter 0
OK
> 3 incr mycounter
(integer) 1
(integer) 2
(integer) 3
> get mycounter
"3"

2.3. key基础操作

2.3.1. key设计

key是二进制安全的,空字符串也是一个有效的key,key最大为512MB。

不建议使用过长的key,key过长时可通过摘要算法(如SHA1)计算后再用作key。

不建议单纯为了节省一点点内存就将key缩写成不易读的格式。

建议采用固定的策略来设计key,使用":“来分割字段,使用”-"来分割单词,例如:comment:4321:reply-to。

2.3.2. 创建key

使用 set 命令来创建 key(string类型):

> set mykey hello
OK

2.3.3. 获取key对应的值

使用 get 命令来获取 key(返回"(nil)"时表示 key 不存在):

> get mykey
hello

2.3.4. 判断key是否存在

使用 exists 命令来判断 key 是否存在,返回 1 时表示存在,返回 0 时表示不存在。

> exists mykey
(integer) 1

2.3.5. 删除key

使用 del 命令来删除key(返回1表示删除成功,返回0表示key不存在):

> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0
> get mykey
(nil)

2.3.6. 重命名key

可使用 rename 命令来重命名 key:

> set mykey hello
OK
> get mykey
hello
> rename mykey newkey
OK
> get newkey
"hello"
> get mykey
(nil)

2.3.7. 查看key类型

使用 type 命令查看key类型:

> type mykey
none
> set mykey hello
OK
> type mykey
string
> set mykey 123
OK
> type mykey
string 

2.3.8. 设置key过期时间

可以在设置key时设置过期时间(ex指定spx指定ms),key 过期之后会被自动删除:

> set mykey hello ex 10
OK

也可以在设置key之后再设置过期时间,使用 expire 命令指定key过期时间(单位:s):

> set mykey hello
> expire mykey 10

可以使用 ttl 命令查看 key 剩余时间(单位:s,返回负数时表示不会过期):

> set mykey hello
OK
> ttl mykey
(integer) -1
> expire mykey 10
(integer) 1
> ttl mykey
(integer) 7

如果需要设置过期时间精度为 ms ,使用 pexpire 命令来设置过期时间,使用 pttl 命令来获取剩余过期时间:

> set mykey hello
OK
> pexpire mykey 100000
(integer) 1
> pttl mykey
(integer) 89736

新建 key 时未使用 expx 选项指定过期时间,默认永不过期,那如果中途使用了 expirepexpire 命令设置了过期时间之后又想重新设置为永不过期该怎么办呢,可以使用 expire 命令指定一个小于等于0的过期时间:

> ttl mykey
(integer) 7
> expire mykey 0
(integer) 1
> ttl mykey
(integer) -2

2.3.9. 浏览key

可以使用 keys 命令来查看所有匹配指定模式的 key 列表(key 数量很大时会导致 redis 服务器阻塞,慎用!):

> select 15
OK
> set key1 1
OK
> set key2 2
OK
> set key3 3
OK
> keys *
1) "key2"
2) "key1"
3) "key3"

匹配模式参考官方文档:

  • h?llo 匹配 hello, hallohxllo
  • h*llo 匹配 hlloheeeello
  • h[ae]llo 匹配 hellohallo, 不匹配 hillo
  • h[^e]llo 匹配 hallo, hbllo, … 不匹配 hello
  • h[a-b]llo 匹配 hallohbllo

可以使用 scan 命令来分页查看所有匹配指定模式的 key 列表(推荐使用):

> scan 0 match * count 2
1) "1"
2) 1) "key2"
   2) "key1"
> scan 1 match * count 2
1) "0"
2) 1) "key3"

2.3.10. 清空key

清空指定库中所有key:

> select 2
OK
> dbsize
(integer) 7
> flushdb
OK
> dbsize
(integer) 0

清空所有库中的key:

> flushall
OK
> select 0
OK
> dbsize
(integer) 0

3. 数据结构

3.1. Strings(字符串)

常用于缓存(二进制字符串),也可用于计数器或者执行位运算。

全量命令自行参考 Redis字符串操作命令

常用命令:

  • set 新建字符串。
  • get 获取字符串值。
  • setnx 仅当key不存在时设置字符串值。
  • getset 设置新值后返回旧值。
  • mset 新建多个字符串。
  • mget 获取多个字符串的值。
  • incr 使计数值加1。
  • incrby 增加计数值。
  • decr 使计数值减1。
  • decrby 减少计数值。
  • incrbyfloat 增减浮点数。

使用 set 命令设置值,使用 get 命令获取值:

> set mykey hello ex 1000
OK
> get mykey
"hello"
> ttl mykey
(integer) 995
> set mykey world
OK
> ttl mykey
(integer) -1

set 命令会重新设置 key 对应的值,且会重新设置过期时间。

使用 nx(key不存在时设置) 和 xx(key存在时才设置) 参数指定设置时是否检查key是否存在:

> set mykey world nx
OK
> get mykey
"hello"
> set mykey world xx
OK
> get mykey
"world"

setnx 命令效果等同于 set 命令加上 nx 参数。

可以使用 getset 命令来实现在设置新值时获取旧值:

> set mycounter 0
OK
> 3 incr mycounter
(integer) 1
(integer) 2
(integer) 3
> getset mycounter 0
"3"

可使用 msetmget 命令来同时设置多个值或者同时获取多个值:

> mset bike:1 "Deimos" bike:2 "Ares" bike:3 "Vanth"
OK
> mget bike:1 bike:2 bike:3
1) "Deimos"
2) "Ares"
3) "Vanth"

可用作计数器,使用 incrincrby 命令来增加计数,使用 decrdecrby 命令来减少计数:

> set mycounter 0
OK
> incr mycounter
(integer) 1
> incrby mycounter 3
(integer) 4
> decr mycounter
(integer) 3
> decrby mycounter 2
(integer) 1
> incrby mycounter -1
(integer) 0

可以使用 incrbyfloat 命令来操作浮点数:

> incrbyfloat mycounter 1.23
"1.22999999999999998"
> incrbyfloat mycounter -0.23
"1"

3.2. Lists(列表)

列表是字符串类型值的链表,常用于实现栈和队列。

常用业务场景:

  • 用于多进程交互,生产者进程往列表存入数据,消费者进程从列表取出数据。
  • 用于记录最新产生的业务数据。

全量命令自行参考 Redis列表操作命令

常用命令:

  • lpush 从左侧插入数据。
  • lpop 从左侧弹出数据。
  • rpush 从右侧插入数据。
  • rpop 从右侧弹出数据。
  • llen 获取列表元素个数。
  • lmove 将一个列表中的元素移动到另一个列表中。
  • lrange 获取列表指定范围内的元素。
  • ltrim 截断列表,删除部分元素。
  • blpop 从左侧弹出数据(无数据时阻塞)。
  • brpop 从右侧弹出数据(无数据时阻塞)。

将列表用作队列(先进先出):

> lpush bikes:repairs bike:1
(integer) 1
> lpush bikes:repairs bike:2
(integer) 2
> rpop bikes:repairs
"bike:1"
> rpop bikes:repairs
"bike:2"

将列表用作栈(后进先出):

> lpush bikes:repairs bike:1
(integer) 1
> lpush bikes:repairs bike:2
(integer) 2
> lpop bikes:repairs
"bike:2"
> lpop bikes:repairs
"bike:1"

获取列表的长度:

> llen bikes:repairs
(integer) 0

从一个列表弹出元素后加入另一个列表中:

> lpush bikes:repairs bike:1
(integer) 1
> lpush bikes:repairs bike:2
(integer) 2
> lmove bikes:repairs bikes:finished LEFT LEFT
"bike:2"
> lrange bikes:repairs 0 -1
1) "bike:1"
> lrange bikes:finished 0 -1
1) "bike:2"

限制列表的长度:

> rpush bikes:repairs bike:1 bike:2 bike:3 bike:4 bike:5
(integer) 5
> ltrim bikes:repairs 0 2
OK
> lrange bikes:repairs 0 -1
1) "bike:1"
2) "bike:2"
3) "bike:3"

可以使用 brpop 或者 blpop 命令来阻塞等待列表:

> rpush bikes:repairs bike:1 bike:2
(integer) 2
> brpop bikes:repairs 1
1) "bikes:repairs"
2) "bike:2"
> brpop bikes:repairs 1
1) "bikes:repairs"
2) "bike:1"
> brpop bikes:repairs 1
(nil)
(2.01s)

3.3. Sets(集合)

用于存储未排序的集合,集合中所有值都是唯一的。

全量命令自行参考 Redis集合操作命令

常用命令有:

  • sadd 向集合中添加新的元素。
  • srem 从集合移除指定元素。
  • sismember 测试集合中是否存在指定值元素。
  • sinter 获取两个或多个集合的交集。
  • scard 获取集合中元素个数。
  • smembers 获取集合所有元素。

使用示例:

> sadd bikes:racing:france bike:1
(integer) 1
> smembers bikes:racing:france
1) "bike:1"
> sadd bikes:racing:france bike:1
(integer) 0
> sadd bikes:racing:france bike:2 bike:3
(integer) 2
> sadd bikes:racing:usa bike:1 bike:4
(integer) 2
> sismember bikes:racing:usa bike:1
(integer) 1
> sismember bikes:racing:usa bike:2
(integer) 0
> sinter bikes:racing:france bikes:racing:usa
1) "bike:1"
> scard bikes:racing:france
(integer) 3

3.4. Hashes(哈希)

用于存储相关联的一组字段-值。

全量命令自行参考 Redis哈希操作命令

常用命令有:

  • hset 设置指定哈希的单个或多个字段值。
  • hget 从指定哈希中获取单个字段值。
  • hmget 从指定哈希中获取单个或多个字段值。
  • hgetall 从指定哈希中获取所有字段值。
  • hincrby 对指定哈希中的字段值执行加减算术操作。

使用示例:

> hset bike:1 model Deimos brand Ergonom type 'Enduro bikes' price 4972
(integer) 4
> hget bike:1 model
"Deimos"
> HMGET bike:1 model price no-such-field
1) "Deimos"
2) "4972"
3) (nil)
> hgetall bike:1
1) "model"
2) "Deimos"
3) "brand"
4) "Ergonom"
5) "type"
6) "Enduro bikes"
7) "price"
8) "4972"
> hincrby bike:1 price 100
(integer) 5072
> hincrby bike:1 price -100
(integer) 4972

3.5. Sorted sets(有序集合)

有序集合将字符串与一个得分关联,常用于实现排行榜功能。

全量命令自行参考 Redis有序集合操作命令

常用命令有:

  • zadd 向集合新增元素。
  • zincrby 修改指定元素得分。
  • zrem 从排序集合中删除指定元素。
  • zrange 获取排序集合指定范围的元素。
  • zrank 获取指定元素在排序集合中的排名(升序)。
  • zrevrank 获取指定元素在排序集合中的排名(降序)。
  • zrangebyscore 或者指定得分范围内的元素。

使用示例:

> zadd racer_scores 10 "Norem"
(integer) 1
> zadd racer_scores 8 "Sam-Bodden" 10 "Royce" 
(integer) 2
> zrange racer_scores 0 -1
1) "Sam-Bodden"
2) "Norem"
3) "Royce"
> ZREVRANGE racer_scores 0 -1
1) "Royce"
2) "Norem"
3) "Sam-Bodden"
> zrange racer_scores 0 -1 withscores
1) "Sam-Bodden"
2) "8"
3) "Norem"
4) "10"
5) "Royce"
6) "10"
> zrangebyscore racer_scores -inf 9
1) "Sam-Bodden"
> zrank racer_scores Royce
(integer) 2
> zrevrank racer_scores Royce
(integer) 0
> zrem racer_scores Royce
(integer) 1
> zincrby racer_scores 5 Norem
"15"

3.6. Bitmaps(位图)

位图用于实现位操作。

全量命令自行参考 Redis位图操作命令

常用命令:

  • setbit 用于将对应位设置为0或1。
  • getbit 用于获取对应位的值。
  • bitcount 用于获取位图中为1的位数。
  • bitop 用于操作单个或多个位图。

使用示例:

> setbit pings:2024-01-01-00:00 123 1
(integer) 0
> getbit pings:2024-01-01-00:00 123
(integer) 1
> getbit pings:2024-01-01-00:00 456
(integer) 0
> bitcount pings:2024-01-01-00:00
(integer) 1
> setbit pings:2024-01-01-00:00 123 0
(integer) 1
> bitcount pings:2024-01-01-00:00
(integer) 0
> bitop NOT destbit pings:2024-01-01-00:00
(integer) 16
> bitcount destbit
(integer) 128

3.7. 其他数据类型

自行参考官方文档学习:

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值