[最详细] redis 常见指令 与 实际使用场景

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: redis的7中常见数据结构String、List、Set、Zset、Hash,HyperLogLogs(基数统计),Bitmap (位存储)详解,常见指令的使用,以及相关原理与实战场景的使用,感兴趣的大佬直接戳进来就对了

👳我亲爱的各位大佬们好

♨️本篇文章记录的为 redis 常见命令相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉🙉。
♨️如果文章有什么需要改进的地方还请大佬不吝赐教❤️🧡💛
👨‍🔧 个人主页 : 阿千弟

@[TOC]

Redis 所有的 key(键)都是字符串。在谈基础数据结构时,我们讨论的是存储值的数据类型,主要包括常见的 5 种数据类型,分别是: String、List、Set、Zset、Hash

数据结构介绍

Redis 是一个 key-value 的数据库,key 是一般的 String,不过 value 却是多种多样的:

在这里插入图片描述
| 结构类型 | 结构存储的值 |结构的读写能力 |
|--|--|--|
| String 字符串 | 可以是字符串、整数或浮点数| 对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作; |
|List 列表 | 一个链表,链表上的每个节点都包含一个字符串| 对链表的两端进行 push 和 pop 操作,读取单个或多个元素;根据值查找或删除元素; |
|Set 集合 | 包含字符串的无序集合 | 字符串的集合,包含基础的方法有看是否存在添加、获取、删除;还包含计算交集、并集、差集等 |
| Hash 散列 | 包含键值对的无序散列表 | 包含方法有添加、获取、删除单个元素|
|Zset 有序集合 | 和散列一样,用于存储键值对 | 字符串成员与浮点数分数之间的有序映射;元素的排列顺序由分数的大小决定;包含方法有添加、获取、删除单个元素以及根据分值范围或成员来获取元素 |

在这里插入图片描述

通用命令

  • KEYS pattern:查看复合模版的所有 keys, 不建议在生产坏境下使用

  • DEL key:删除一个指定的 key

  • EXISTS key:判断 key 是否存在

  • EXPIRE key seconds:给一个 key 设置过期时间 单位是秒

  • TTL key:查看指定 key 的剩余有效时间 。-1 表示当前 key 没有设置有效时间 ,-2 表示当前 key 不存在

  • PERSIST key:持久化 指定 key

  • TYPE key:查看指定 key 的类型

  • MOVE key num:移动指定 key 到指定数据库

  • RANDOMKEY:随即返回库中的一个 key

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> exists k1
(integer) 1
127.0.0.1:6379> exists k2
(integer) 0
127.0.0.1:6379> expire k1 10
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 7
127.0.0.1:6379> persist k1
(integer) 1
127.0.0.1:6379> ttl k1
(integer) -1
127.0.0.1:6379> type k1
string

String 字符串命令

String 类型是 Redis 基本类型,一个键最大能存储 512MB 且是二进制安全的。意思是 redis 的 String 类型可以存储任何数据,如数字,字符串,jpg 图片或者序列化的对象。

原理

redis 中的 String 是动态字符串,内部结构类似 ArrayList。采用预分配冗余空间的方式减少内存的频繁分配。

内部为字符串分配的实际空间一般高于字符串长度,当字符串长度 <1MB 时,扩容方式是加倍 也就是原来的两倍。当字符串长度> 1MB 时,一次扩容 1MB,直到最大 512MB.

命令使用

命令 简述 使用

GET |获取存储在给定键中的值| GET key
MGET |获取多个存储在给定键中的值| MGET key1 key2
SET| 设置存储在给定键中的值 |SET key value
MSET |设置多个存储在给定键中的值 |MSET key1 value1 key2 value2
SETNX |如果不存在即设置值| SETNX key value
SETEX |设置值的同时设置过期时间 |SETNX key seconds value
DEL| 删除存储在给定键中的值 |DEL key
INCR |将键存储的值加 1| INCR key
DECR |将键存储的值减 1 |DECR key
INCRBY |将键存储的值加上整数| INCRBY key amount
DECRBY |将键存储的值减去整数 |DECRBY key amount
APEEND |字符串后添加内容 |APEEND key value
STRLEN |获取字符串长度 |STRLEN ke
GETRANGE |获取字符串指定索引范围的内容 |GETRANGE key start end
SETRANGE| 设置字符串指定偏移量开始处插入值 |SETRANGE key offset value

命令执行

SET key value:设置key的值
127.0.0.1:6379> set id 1442490035
OK

GET key:获取key的值
127.0.0.1:6379> get id
"1442490035"

DEL key:删除指定key
127.0.0.1:6379> del id
(integer) 1

GETSET key value:修改key的值 并返回原来得到值
127.0.0.1:6379> getset id 1442490036
"1442490035"

setex key seconds value:给指定key值赋值的同时,设置该key的有效时间
127.0.0.1:6379> setex house 50 三室一厅
OK
127.0.0.1:6379> ttl house
(integer) 41

setnx house value:设置key值,如果key已存在,则不存储
127.0.0.1:6379> setnx name 天启帝君
(integer) 1
127.0.0.1:6379> setnx house 三室一厅
(integer) 0

mget key [key...]:同时获取多个key值
127.0.0.1:6379> mget name sex age
1) "天启帝君"
2) "man"
3) "18"

mset key value [key value...]:同时设置多个key值
127.0.0.1:6379> mset hieght 170cm weight 110
OK

msetnx key value [key value...]: 同时设置多个key值,如已经存在,则不存储 ,这是一个原子操作。
127.0.0.1:6379> msetnx hieght 170cm money 100000
(integer) 0

append key value:在该key值的后边加上value
127.0.0.1:6379> append name is-a-good-boy
(integer) 25

strlen key:返回这个key值得长度
127.0.0.1:6379> strlen name
(integer) 25

getrange key begin end: 获取该key值  索引从begin到end的字符串  包头包尾
127.0.0.1:6379> set name 天启帝君
OK
127.0.0.1:6379> getrange name 0 10
"天启帝君"

setrange key offset value : 修改offset位以后的 value值
127.0.0.1:6379> setrange name 10 man
(integer) 12
127.0.0.1:6379> get name
"天启帝君"

实战场景

  • 缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到 redis 中,redis 作为缓存层,mysql 做持久化层,降低 mysql 的读写压力。
  • 计数器:redis 是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
  • session:常见方案 spring session + redis 实现 session 共享

List 链表命令

redis 的列表是一个字符链表,内部结构类似 LinkedList。left,right 都可以添加。如果键不在,则创建新链表,如果已存在则新填内容。如果当前链表没有值,则该链表也会自动删除。redis 的列表最多可存储 2^32-1 个元素(4294967295,每个列表可以存储 40 多亿个元素)

原理

底层是一个快速链表(quickList)的结构,在列表元素较少时,使用内存存储压缩列表 ziplist。当元素数量较多时,改成quickList,也就是将多个 zipList 串起来使用,以减少内存的碎片化。

命令使用

命令 简述 使用

RPUSH| 将给定值推入到列表右端 |RPUSH key value
LPUSH |将给定值推入到列表左端| LPUSH key value
RPOP |从列表的右端弹出一个值,并返回被弹出的值 |RPOP key
LPOP| 从列表的左端弹出一个值,并返回被弹出的值 |LPOP key
LRANGE |获取列表在给定范围上的所有值 |LRANGE key 0 -1
LINDEX |通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 |LINDEX key index
LINSERT| 在某一个旧元素值的前边或后边插入一个新的值 |linsert key before/after old_value new_value
LLEN |过去链表长度| llen key
LTRIM |截取 list 从 stater 到 end 位置的值并保留| ltrim key start end
LREM |删除 count 个元素值为 value 的元素| lrem key count value
LSET |修改索引号为 index 的元素的值为 value |LSET key index value

命令执行

lpush key value : 从头部(左边)压进(新增)一个新元素
127.0.0.1:6379> lpush list1 v1 v2 v3 v4 v5
(integer) 5

rpush key value : 从尾部(右边)压进(新增)一个新元素
rpush list1 v6
(integer) 6

lpop key value : 从头部(左边)弹出(删除)一个元素并返回
127.0.0.1:6379> lpop list1
"v5"

rpop key value : 从尾部(右边)弹出(删除)一个元素并返回
127.0.0.1:6379> rpop list1
"v1"

lset key index value : 修改索引号为index的元素的值为value
127.0.0.1:6379> lset list1 4 v7
OK

lrem key count value : 删除count个元素值为value
127.0.0.1:6379> lrem list1 0 v0
(integer) 1

linsert key before/after old_value new_value : 在某一个旧元素值的前边或后边插入一个新的值
127.0.0.1:6379> linsert list1 before v7 v6
(integer) 6

lindex key index : 查询当前list中索引为index的值
127.0.0.1:6379> lindex list1 5
"v6"

lrange key start end : 遍历list的所有元素并显示
127.0.0.1:6379> lrange list1 0 -1
1) "v3"
2) "v4"
3) "v5"
4) "v6"
5) "v7"

ltrim key start end : 截取list从stater到end位置的值并保留
127.0.0.1:6379> ltrim list1 2 6
OK

llen key : 返回一个list的元素个数 
127.0.0.1:6379> llen list1
(integer) 5

使用列表的技巧

  • Stack (栈) : lpush+lpop
  • Queue(队列): lpush+rpop=
  • Capped Collection(有限集合): lpush+ltrim
  • Message Queue(消息队列): lpush+brpop

实战场景

  • 微博 TimeLine: 有人发布微博,用 lpush 加入时间轴,展示新的列表信息。
  • 消息队列

Set 集合命令

redis 的集合是 String 类型的无序不重复的元素集,同时提供交集、并集、差集等操作,集合中最大的成员数为 2^32-1(40多亿)。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O (1)。

原理

​ 类似 HashSet, 也是通过哈希表实现的,相当于所有的 value 都为空。通过计算 hash 的方式来快速排重,也是 set 能提供判断一个成员是否在集合内的原因。

命令使用

命令 |简述 |使用
|--|--|--|
SADD |向集合添加一个或多个成员| SADD key value
SPOP| 随机弹出 count 个 member| SPOP key [count]
SREM|删除 set 集合中的 member| SREMkey member [member…]
SCARD |获取集合的成员数 |SCARD key
SMEMBERS| 返回集合中的所有成员| SMEMBERS key member
SISMEMBER |判断 member 元素是否是集合 key 的成员 |SISMEMBER key member
SRANDMEMBER |随机返回 count 个成员 |SRANDMEMBER key count
SMOVE |移动 source 中的成员 member 到 destination 中 |SMOVE sourse destination member
SDIFF |返回 key1 与 key2 的差集 |SDIFF key1 key2 [key3…]
SINTER |返回 key1 与 key2 的交集| SINTER key1 key2 [key3…]
SUNION |返回 key1 与 key2 的交集 |SUNION key1 key2 [key3…]

命令执行

sadd key member [member...] : 添加set集合的member
127.0.0.1:6379> sadd set1 value1 value2 value3
(integer) 3

srem key member [member...] : 删除set集合中的member
127.0.0.1:6379> srem set1 value1
(integer) 1

spop key [count] : 随机弹出count个member  
127.0.0.1:6379> spop set1 1
1) "menber2"

scard key : 获取set的成员个数 
127.0.0.1:6379> scard set2
(integer) 2

smembers key :  获取set的所有成员
127.0.0.1:6379> smembers set2
1) "value3"
2) "member1"

sismember key member : 判断member是否是set中的成员
127.0.0.1:6379> sismember set1 member1
(integer) 1

srandmember key count : 随机返回count个成员
127.0.0.1:6379> srandmember set1 1
(integer) 1

smove sourse destination member : 移动source中的成员member到destination中
127.0.0.1:6379> smove set1 set2  member1 
(integer) 1

sdiff key1 key2 [key3...] : 返回key1与key2的差集
127.0.0.1:6379> sdiff set2 set1
1) "value3"

sinter key1 key2 [key3...] : 返回key1与key2的交集
127.0.0.1:6379> sinter set1 set2
1) "member1"

sunion key1 key2 [key3...] : 返回key1与key2的交集
127.0.0.1:6379> sunion set2 set1
1) "value3"
2) "value1"
3) "menber3"
4) "member1"
5) "member2"

实战场景

  • 标签(tag), 给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。
  • 点赞,或点踩,收藏等,可以放到 set 中实现

Hash 散列命令

redis 中的无序字典是一个 String 类型的 field 和 value 的映射表,内部结构类似 HashMap,每个 hash可以存储 2^32-1 个键值对(40 多亿)

原理

​ 底层的实现结构,与 HashMap 一样,是 “数组 + 链表” 的二维结构,第一维 hash 的数据位置碰撞时,将碰撞元素用链表串接起来,不同的是,redis 字典的值只能是字符串,而且两者的 rehash 方式不同。java 的 hashmap 是一次全部 rehash,耗时较高,redis 为了提高性能,采用渐进式 rehash 策略。具体方式为,同时保留新旧两个 hash 结构,然后逐步搬迁,最后取代

命令使用

命令| 简述| 使用
|--|--|--|
HSET(HMSET,HSETNX)| 添加键值对 |HSET hash-key sub-key1 value1
HGET(HMGET)| 获取指定散列键的值 |HGET hash-key key1
HGETALL| 获取散列中包含的所有键值对| HGETALL hash-key
HDEL |如果给定键存在于散列中,那么就移除这个键| HDEL hash-key sub-key1
HKEYS |获取散列中包含的所有键| HKEYS hash-key
HVALS |获取散列中包含的所有值 |HVALS hash-key
HEXISTS | 判断 hash 中是否存在 field 值 |HEXISTS key field

命令执行

hset key field value : 给hash设置field和value
127.0.0.1:6379> hset hash1 k1 v1
(integer) 1

hget  key field : 获取hash中健值为field的值
127.0.0.1:6379> hget hash1 k1
"v1"

hmset key field value [field value...] : 同时给hash设置多个field和value
127.0.0.1:6379> hmset hash1 k2 v2 k3 v3 k4 v4
OK

hmget key field [field...] : 同时获取hash中多个健值为field的值
127.0.0.1:6379> hmget hash1 k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) "v4"

hsetnx key field value : 判断hash中是否存在 该field值,不存在则添加
127.0.0.1:6379> hsetnx hash1 k5 v5
(integer) 1

hgetall key : 获取hash中所有的field和value的值
127.0.0.1:6379> hgetall hash1
 1) "k3"
 2) "v3"
 3) "k4"
 4) "v4"
 5) "k5"
 6) "v5"
 7) "k1"
 8) "3"
 9) "k2"
10) "81.83635"

hkeys key : 获取hash中所有的field的值
127.0.0.1:6379> hkeys hash1
1) "k3"
2) "k4"
3) "k5"

hvals key : 获取hash中所有value的值
127.0.0.1:6379> hvals hash1
1) "v3"
2) "v4"
3) "v5"

hexists key field : 判断hash中是否存在field值 
127.0.0.1:6379> hexists hash1 k1
(integer) 1

hlen key : 获取hash中键值对的个数
127.0.0.1:6379> hlen hash1
(integer) 5

hincrby key field increment : 设置hash中field属性自增,前提是整数,自增步长为increment
127.0.0.1:6379> hincrby hash1 k2 10
(integer) 10

hincrbyfloat key field increment : 设置hash中field属性自增 ,可以是小数,自增步长为increment
127.0.0.1:6379> hincrbyfloat hash1 k2 10.1
"40.1"

实战场景

  • 缓存: 能直观,相比 string 更节省空间,的维护缓存信息,如用户信息,视频信息等。

    Zset 有序集合命令

    Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数是可以重复的。

原理

压缩列表 (ziplist): ziplist 是为了提高存储效率而设计的一种特殊编码的双向链表。它可以存储字符串或者整数,存储整数时是采用整数的二进制而不是字符串形式存储。它能在 O (1) 的时间复杂度下完成 list 两端的 push 和 pop 操作。但是因为每次操作都需要重新分配 ziplist 的内存,所以实际复杂度和 ziplist 的内存使用量相关

跳跃表(zSkiplist): 跳跃表的性能可以保证在查找,删除,添加等操作的时候在对数期望时间内完成,这个性能是可以和平衡树来相比较的,而且在实现方面比平衡树要优雅,这是采用跳跃表的主要原因。跳跃表的复杂度是 O (log (n))。

命令使用

命令| 简述 |使用
|--|--|--|
ZADD |将一个带有给定分值的成员添加到有序集合里面| ZADD zset-key member1
ZRANGE(zrevrange)| 根据元素在有序集合中所处的位置,从有序集合中获取多个元素 |ZRANGE zset-key 0-1 withccores
ZREM| 如果给定元素成员存在于有序集合中,那么就移除这个元素 |ZREM zset-key member1
zrangebyscore(zrevrangebyscore)| 获取指定范围内分数的所有成员 (升序) withscores 表示带上分数,limit 表示分页| zrangebyscore key min max [withscores] [limit offset count]
zcard |获取 zset 成员个数 |zcard key
zcount |获取 zset 在指定分数范围内的成员个数,“(” 左括号表示闭区间 |zcount key min max
zrank(zrevrank) |获取 zset 中成员 member 的排名(升序) |zrank key member

命令执行

zadd key score member [score member...]:添加zset集合新的成员分数和成员。
127.0.0.1:6379> zadd k1 10 c1 20 c2 30 c3 40 c4 50 c5 60 c6 70 c7 80 c8 90 c9 
(integer) 9

zrem key member [member...]:删除zset中的成员member
127.0.0.1:6379> zrem zset key1
(integer) 1

zrange key start stop [withscores]:遍历zset,获取所有成员 ,若加上withscores,则分数被同时返回
127.0.0.1:6379> zrange k1 0 -1
1) "c1"
2) "c2"
3) "c3"
4) "c4"
5) "c5"
6) "c6"
7) "c7"
8) "c8"
9) "c9"

zrangebyscore key min max [withscores] [limit offset count] : 获取指定范围内分数的所有成员 (升序) withscores表示带上分数,limit表示分页
127.0.0.1:6379> zrevrangebyscore k1 50 (10
1) "c5"
2) "c4"
3) "c3"
4) "c2"

zcard key:获取zset成员个数
127.0.0.1:6379>zcard k1
(integer)8
zcount key min max :获取zset在指定分数范围内的成员个数,“(”左括号表示闭区间
127.0.0.1:6379> zcount k1 0 (60
(integer) 5

zrank key member : 获取zset中成员member的排名(升序)
127.0.0.1:6379> zvrank k1 c9
(integer) 8

zrevrank key member:获取zset中成员member的排名(降序)
127.0.0.1:6379> zrevrank k1 c9
(integer) 0

zrevrange key [withscores]: 获取zset中所有的成员(降序)
127.0.0.1:6379> zrevrange k1 0 -1
1) "c9"
2) "c8"
3) "c7"
4) "c6"
5) "c5"
6) "c4"
7) "c3"
8) "c2"
9) "c1"

zrevrangebyscore key max min [withscores] [limit offset count] :获取指定范围内分数的所有成员 (降序) withscores表示带上分数,limit表示分页

实战场景

  • 排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

HyperLogLogs(基数统计)

什么是基数?

举个例子,A = {1, 2, 3, 4, 5}, B = {3, 5, 6, 7, 9};那么基数(不重复的元素)= 1, 2, 4, 6, 7, 9; (允许容错,即可以接受一定误差)

HyperLogLogs 基数统计用来解决什么问题?

这个结构可以非常省内存的去统计各种计数,比如注册 IP 数、每日访问 IP 数、页面实时 UV、在线用户数,共同好友数等。

它的优势体现在哪?

一个大型的网站,每天 IP 比如有 100 万,粗算一个 IP 消耗 15 字节,那么 100 万个 IP 就是 15M。而 HyperLogLog 在 Redis 中每个键占用的内容都是 12K,理论存储近似接近 2^64 个值,不管存储的内容是什么,它一个基于基数估算的算法,只能比较准确的估算出基数,可以使用少量固定的内存去存储并识别集合中的唯一元素。而且这个估算的基数并不一定准确,是一个带有 0.81% 标准错误的近似值(对于可以接受一定容错的业务场景,比如 IP 数统计,UV 等,是可以忽略不计的)。

相关命令使用

127.0.0.1:6379> pfadd key1 a b c d e f g h i    # 创建第一组元素
(integer) 1
127.0.0.1:6379> pfcount key1                    # 统计元素的基数数量
(integer) 9
127.0.0.1:6379> pfadd key2 c j k l m e g a        # 创建第二组元素
(integer) 1
127.0.0.1:6379> pfcount key2
(integer) 8
127.0.0.1:6379> pfmerge key3 key1 key2            # 合并两组:key1 key2 -> key3 并集
OK
127.0.0.1:6379> pfcount key3
(integer) 13

Bitmap (位存储)

Bitmap 即位图数据结构,都是操作二进制位来进行记录,只有 0 和 1 两个状态。

用来解决什么问题?

比如:统计用户信息,活跃,不活跃! 登录,未登录! 打卡,不打卡! 两个状态的,都可以使用 Bitmaps!

如果存储一年的打卡状态需要多少内存呢? 365 天 = 365 bit 1 字节 = 8bit 46 个字节左右!

相关命令使用

使用 bitmap 来记录 周一到周日的打卡! 周一:1 周二:0 周三:0 周四:1 ……

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0

查看某一天是否有打卡!

127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 5
(integer) 0

统计操作,统计 打卡的天数!

127.0.0.1:6379> bitcount sign # 统计这周的打卡记录,就可以看到是否有全勤!
(integer) 3

在这里插入图片描述

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对Java后端或者对redis感兴趣的朋友,请多多关注💖💖💖
👨‍🔧 个人主页 : 阿千弟

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
25 3
|
3月前
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
172 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
|
4月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
3月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Azure Reids是否可以开启慢日志(slowlog)和执行config指令
【Azure Redis 缓存】Azure Reids是否可以开启慢日志(slowlog)和执行config指令
|
3月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】Azure Redis 服务不支持指令CONFIG
【Azure Redis 缓存】Azure Redis 服务不支持指令CONFIG
|
5月前
|
存储 JSON NoSQL
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
Redis第五弹-HASH结构相关指令和介绍,计数功能Hash-哈希(Redis本来就是键值对结构,哈希,就相当于键值对嵌套了一个键值对)的多种指令Hset key field value-
|
6月前
|
NoSQL Redis 数据库
Redis中的常用命令非常丰富,涵盖了各种数据类型的基本操作以及服务器管理和维护的相关指令
【5月更文挑战第15天】Redis常用命令包括通用(如PING、SELECT)、键操作(KEYS、EXISTS、DEL)、字符串(SET、GET)、哈希(HSET、HGET)、列表(LPUSH、LPOP)、集合(SADD、SMEMBERS)和有序集合(ZADD、ZRANGE)等。这些命令用于数据操作及服务器管理,满足不同场景需求。了解更多命令,建议参考Redis官方文档。
58 2
|
5月前
|
存储 NoSQL Java
【超长文】Redis在项目中的17种使用场景
Redis 是一个开源的高性能键值对数据库,它以其内存中数据存储、键过期策略、持久化、事务、丰富的数据类型支持以及原子操作等特性,在许多项目中扮演着关键角色。以下是V哥整理的17个Redis在项目中常见的使用场景
299 0
|
5月前
|
消息中间件 NoSQL Redis
Redis第三弹,定时删除1.优先级队列(堆)2.基于时间轮实现的定时器​编辑Type指令(返回key对应的数据类型)redis的数据类型hset key field value
Redis第三弹,定时删除1.优先级队列(堆)2.基于时间轮实现的定时器​编辑Type指令(返回key对应的数据类型)redis的数据类型hset key field value
|
6月前
|
存储 SQL NoSQL
Redis入门到通关之五大基本数据类型及其使用场景
Redis入门到通关之五大基本数据类型及其使用场景
53 0