首页 > 数据库 >redis 常用数据类型和常用命令

redis 常用数据类型和常用命令

时间:2024-09-09 16:47:47浏览次数:1  
标签:127.0 0.1 数据类型 redis 6379 key 常用命令 集合 integer

一、数据类型
在Redis中命令不区分大小写,但key是区分大小写的,帮助命令如下: help command

help @group

解释:group 是指数据类型,比如string、hash,这样就会把关于字符串或者是hash数据类型的所有命令列出来

redis 有十大数据类型,本文介绍常用的六种。

1.1、string
在一个字符串中存储最多 512 MB的内容
# 1、set  get 设置和获取字符串
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> get name
"xiaoming"

set key value [NX|XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
# 解释
NX (Not exists):仅当键不存在时才设置键值
XX:仅当键已经存在时才设置键值。
EX (EXpire):设置键的过期时间(以秒为单位)
PX :设置键的过期时间(以毫秒为单位)
GET:在设置新值之前返回键的旧值。如果键不存在,则返回空字符串


# 2、mget mset 同时设置或获取多个键值对
127.0.0.1:6379> mset k2 v2 k3 v3
OK
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> get k3
"v3"
127.0.0.1:6379> mget k2 k3
1) "v2"
2) "v3"

注意:MSET 命令是原子性的,这意味着同时设置多个键值对时它要么完全执行,要么完全不执行。


# 3、append命令追加内容到某个key对应的value中
127.0.0.1:6379> append name " xiaohone"
(integer) 17
127.0.0.1:6379> get name
"xiaoming xiaohone"

如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。 如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作,这种情况 APPEND 将类似于 SET 操作。

# 4、incr,整数增加1, DECR key ,整数减一
127.0.0.1:6379> set num 2
OK
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incr num
(integer) 3
127.0.0.1:6379> decr num
(integer) 2

应用场景:点赞,点一次加一
注意:如果存储的字符串类型不能表示为一个整数,那么执行这个命令时服务器会返回一个错误(eq:(error) ERR value is not an integer or out of range)。如果key不存在,会先把key的值设置为0 然后直接加一

# 5、INCRBY key n  表示加n  ,  DECRBY key n 表示减n
127.0.0.1:6379> set num 2
OK
127.0.0.1:6379> 
127.0.0.1:6379> incrby num 5
(integer) 7
127.0.0.1:6379> decrby num 4
(integer) 3

注意:n也必须是整数,不能是小数或别的类型。如果key不存在,会先把key的值 设置为0 然后直接加n

# 6、STRLEN key
返回key的string类型value的长度。如果key对应的非string类型,就返回错误。
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> strlen name
(integer) 8

1.2、hash
Redis 的 hash 数据类型是一种非常有用的数据结构,它可以存储一组键值对(field-value pairs),非常适合用于存储对象。每个 hash 有一个名称(键),键下面包含多个字段(fields,不能重复),每个字段有自己的值。

基本概念:
键(Key):hash 的名称,用于标识整个 hash 结构。
字段(Field):hash 内部的键,用于标识具体的键值对。
值(Value):与字段关联的值,可以是任意字符串。

例如:

127.0.0.1:6379> hset user1 name xiaohong age 10 height 20kg
(integer) 3
127.0.0.1:6379> hgetall user1
1) "name"
2) "xiaohong"
3) "age"
4) "10"
5) "height"
6) "20kg"

hash常用命令:

命令	                                      命令对应描述
HSET key field value [field2 value2 ]	    将哈希表 key 中的字段 field 的值设为 value,也可以同时设置多个field-value。
HMSET key field1 value1 [field2 value2 ]	同时将多个 field-value (域-值)对设置到哈希表 key 中
HSETNX key field value	                    只有在字段 field 不存在时,设置哈希表字段的值。
HGET key field	                            获取存储在哈希表中指定字段的值。
HGETALL key	                                获取在哈希表中指定 key 的所有字段和值
HMGET key field1 [field2]	                获取所有给定字段的值
HDEL key field1 [field2]	                删除一个或多个哈希表字段
HEXISTS key field	                        查看哈希表 key 中,指定的字段是否存在。
HINCRBY key field increment	                为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBYFLOAT key field increment            为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
HKEYS key	                                获取所有哈希表中的字段
HLEN key	                                获取哈希表中某个字段的对应的键的数量
HVALS key	                                获取哈希表中某个key的所有值。
HSCAN key cursor [MATCH pattern] [COUNT count]	迭代哈希表中的键值对。


# 例子:
127.0.0.1:6379> hset user1 name xiaohong age 10 height 20kg
(integer) 3
127.0.0.1:6379> hgetall user1
1) "name"
2) "xiaohong"
3) "age"
4) "10"
5) "height"
6) "20kg"
127.0.0.1:6379> hget user1 age
"10"
127.0.0.1:6379> hkeys user1
1) "name"
2) "age"
3) "height"
127.0.0.1:6379> hlen user1
(integer) 3
127.0.0.1:6379> hvals user1
1) "xiaohong"
2) "10"
3) "20kg"


1.3、list

Redis 的列表(List)数据类型是一种有序的字符串集合,非常适合用于实现消息队列、任务队列等场景。列表中的每个元素都是一个字符串,列表按照插入顺序排列,可以从列表的头部(left)或尾部(right)进行操作。

基本概念:
键(Key):列表的名称,用于标识整个列表。
元素(Elements):列表中的每个字符串值。

1. LPUSH 和 RPUSH
用于在列表的头部或尾部添加一个或多个元素。
LPUSH:将一个或多个值插入到列表的头部(左边)
RPUSH:将一个或多个值插入到列表的尾部(右边)

127.0.0.1:6379> lpush list1 a b c
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush list2 a b c
(integer) 3
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "c"

2、LRANGE key start stop
用于获取列表中指定范围内的元素,如果想获取所有值,则start为0,stop为-1
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "c"

3、LPOP n和 RPOP n
LPOP:从列表的头部(左边)弹出n个元素。
RPOP:从列表的尾部(右边)弹出n个元素。
127.0.0.1:6379> lpop list1 2
1) "a"
2) "b"
127.0.0.1:6379> lrange list1 0 -1
1) "c"

4、 LINDEX key index
用于获取列表中指定索引位置的元素。
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> lindex list1 1
"a"

5、llen key
用于获取列表的长度
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> llen list1
(integer) 3

6、LREM key count value
用于移除列表中与给定值匹配的元素
参数说明:
count:如果 count 大于 0,则从头部开始移除;如果 count 小于 0,则从尾部开始移除;如果 count 为 0,则移除所有匹配的元素。
返回值:
返回被移除的元素数量。
127.0.0.1:6379> lrem list1 1 a
(integer) 1
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "c"

7、LSET key index value
用于设置列表中指定索引位置的元素值,只能设置已存在的索引位置,比如有两个值,那索引就是0和1,不能设置索引为2的值,否则会报错(error) ERR index out of range,新值会覆盖旧的值;
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "c"
127.0.0.1:6379> lset list1 1 d
OK
127.0.0.1:6379> lrange list1 0 -1
1) "b"
2) "d"

1.4、set
Redis set(集合)遵循无序排列的规则,集合中的每一个元素都是字符串类型,且不可重复,无序。集合有一个非常重要的特性就是“自动去重”,这使得它可以适用于存储唯一的元素的场景,比如过滤掉已中奖用户的 id,保证该用户不会被第二次抽中,比如用户列表、标签集合等。
1、SADD key member [member ...] — 添加一个或多个成员到集合中,如果成员已经是集合的成员,则忽略该成员
127.0.0.1:6379> smembers set1
1) "b"
2) "a"
127.0.0.1:6379> sadd set1 c b d
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> smembers set1
1) "b"
2) "c"
3) "a"
4) "d"

2、SMEMBERS key 获取集合中的所有成员


3、SISMEMBER key member — 判断成员是否是集合的成员
127.0.0.1:6379> sismember set1 a
(integer) 1
127.0.0.1:6379> sismember set1 e
(integer) 0


4、SREM key member [member ...] — 移除集合中的一个或多个成员
127.0.0.1:6379> srem set1 c d
(integer) 2
127.0.0.1:6379> smembers set1
1) "b"
2) "a"


5、SCARD key — 获取集合中元素的数量
127.0.0.1:6379> scard set1
(integer) 2

6、SINTER, SUNION, SDIFF — 分别用于计算多个集合的交集、并集和差集
交集:选择一个集合作为基准集合(通常是第一个提供的集合),然后初始化一个空的交集结果,然后遍历基准集合中的每一个元素,检查该元素是否也存在于其他所有提供的集合中,所以如果集合元素较多,交集会比较慢,一般选元素少的放在第一个位置。

差集:会遍历第一个集合中的所有元素,并检查这些元素是否也存在于其他的集合中。如果一个元素只存在于第一个集合中,那么它就被认为是差集的一部分
127.0.0.1:6379> smembers set1
1) "b"
2) "a"
127.0.0.1:6379> smembers set2
1) "b"
2) "c"
3) "d"
127.0.0.1:6379> sdiff set1 set2
1) "a"
127.0.0.1:6379> sdiff set2 set1
1) "c"
2) "d"


7、SINTERSTORE, SUNIONSTORE, SDIFFSTORE — 这些命令类似于上述的集合运算,但是结果会被存储到一个新的集合中
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]
SDIFFSTORE  destination key [key ...]

8、SPOP key   移除并返回集合中的一个随机元素  
127.0.0.1:6379> spop set1
"a"

9、SSCAN key cursor [MATCH pattern] [COUNT count]  
迭代集合中的元素 。它允许你逐步遍历一个集合中的元素,而不需要一次性加载整个集合到内存中,这对于大型集合特别有用,因为它可以避免因为一次性加载所有元素而导致的内存消耗过大。

参数说明
key: 需要遍历的集合键。
cursor: 游标,用于追踪迭代的位置。初始时应设置为 0。
MATCH pattern: 可选参数,用于限制返回结果中的元素,使其符合给定的模式。
    常用的匹配模式:
        *(星号):匹配零个或多个字符。
        ?(问号):匹配单个字符。
        [set]:匹配括号内的任何一个字符。例如,[abc] 可以匹配 a、b 或 c。
        [!set] 或 [^set]:匹配不在括号内的任何一个字符。例如,[!abc] 或 [^abc] 可以匹配除了 a、b 或 c 之外的任何单个字符。
    例如:
    匹配以特定前缀开始的元素:
    模式:user*
    解释:匹配以 user 开头的任何键。
    示例:user1, user2, user100

eg:
如果你想只返回以 item 开头的元素,可以使用模式 item*:
SSCAN myset 0 MATCH item*


COUNT count: 可选参数,用于指定每次迭代返回的最大元素数量。请注意,Redis 实际返回的元素数量可能小于或等于这个值。

返回值
SSCAN 命令返回一个包含两个元素的数组:
  1、下一次迭代时应该使用的游标。
  2、匹配模式的元素列表(如果没有匹配模式,则返回集合中的元素)。
如果游标返回 0,则表示迭代完成。否则,应使用返回的新游标继续迭代

例如:
不带count参数
> SSCAN myset 0
1) "0"
2) 1) "item1"
   2) "item2"
   3) "item3"
   4) "item4"
这里返回的游标是 0,意味着扫描完成,并且返回了集合中的所有元素。

使用 COUNT 参数,如果我们想要每次只返回两个元素,可以使用 COUNT 参数:
> SSCAN myset 0 COUNT 2
1) "2"
2) 1) "item1"
   2) "item2"
这里返回的游标是 2,意味着还需要继续扫描。我们可以使用返回的游标继续迭代:
> SSCAN myset 2 COUNT 2
1) "4"
2) 1) "item3"
   2) "item4"
现在返回的游标是 4,我们继续使用它:
> SSCAN myset 4 COUNT 2
1) "0"
2) (empty list or set)
这次返回的游标是 0,表示扫描完成,没有更多的元素了。
1.5、zset(sorted set)
Redis 的有序集合(ZSet)是一种集合数据类型,其中的每个成员都关联了一个分数(score)。这个分数用于对集合中的成员进行排序,使得有序集合不仅能够存储不重复的元素,还能根据分数对元素进行排序。有序集合非常适合用于排行榜、任务队列等场景。
1、ZADD key score1 member1 [score2 member2]  向有序集合添加一个或多个成员及其分数,如果指定添加的成员已经是有序集合里面的成员,则会更新改成员的分数(scrore)并更新到正确的排序位置
127.0.0.1:6379> zadd zset1 2 b 3 c
(integer) 2
127.0.0.1:6379> 

2、ZRANGE/ZREVRANGE:获取有序集合中指定范围内的成员。ZRANGE 按照升序排列,ZREVRANGE 按照降序排列。
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]

127.0.0.1:6379> zrange zset2 0 -1
1) "c"
2) "b"

ZREVRANGE key start stop [WITHSCORES]:返回有序集中指定区间内的成员,通过索引,分数从高到低
ZREVRANGEBYSCORE key max min [WITHSCORES]:返回有序集中指定分数区间内的成员,分数从高到低排序



3、ZSCORE key member:获取集合中指定成员的分数
127.0.0.1:6379> zscore zset1 b
"2"

4、ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
根据分数范围获取元素,可选择是否返回分数
127.0.0.1:6379> zrangebyscore zset1 0 4 
1) "b"
2) "c"
127.0.0.1:6379> zrangebyscore zset1 0 4 withscores
1) "b"
2) "2"
3) "c"
4) "3"
127.0.0.1:6379> zrangebyscore zset1 0 4 withscores limit 0 1
1) "b"
2) "2"
127.0.0.1:6379> zrangebyscore zset1 0 4 withscores limit 1 2
1) "c"
2) "3"

5、ZREM key member [member ...]
移除一个或多个元素
127.0.0.1:6379> zadd zset1 4 d 5 e
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> zrem zset1 d e 
(integer) 2

ZREMRANGEBYLEX key min max:移除有序集合中给定的字典区间的所有成员
ZREMRANGEBYRANK key start stop:移除有序集合中给定的排名区间的所有成员
ZREMRANGEBYSCORE key min max:移除有序集合中给定的分数区间的所有成员



6、ZCARD key
获取集合中的元素数量
127.0.0.1:6379> zcard zset1
(integer) 2

7、ZRANK key member
获取指定成员在有序集合中的排名(基于分数,从 0 开始)
127.0.0.1:6379> zrank zset1 b
(integer) 0
127.0.0.1:6379> zrank zset1 c
(integer) 1

8、ZUNIONSTORE destination numkeys key [key ...]	
计算给定的一个或多个有序集的并集,并存储在新的 key 中


1.6、bitmap
在日常开发过程中会有一些 bool 类型数据需要存取。例如:记录用户一年内签到的次数,签了则是1,没签则是 0。如果使用 key-value 来存储,那么每个用户都要记录 365 次,当用户成百上亿时,需要的存储空间将非常巨大。为了解决这个问题,Redis 提供了位图结构。

Redis 的 Bitmaps(位图)是一种非常高效的数据结构,用于存储二进制位(bits)。每个位都可以设置为 0 或 1,并且 Redis 位图中的每个位对应一个字节中的一个比特。Bitmaps 可以用于多种用途,如统计网站访问量、跟踪用户行为、管理权限位等。

在 Redis 中,位图是以字符串的形式存储的,每个字符串可以包含多个位,位图中的每个位都可以通过索引来访问,索引从 0 开始。

1、SETBIT key offset value:设置位图中的bit值
offset:指定要操作的位的位置。
value:可以是 0 或 1。
示例:SETBIT visits 0 1 将键 visits 的第 0 位设置为 1。

2、GETBIT key offset: 获取位图中某个位上的值
返回 键key 在位置 offset 处的位值。
示例:GETBIT visits 0 将返回键 visits 的第 0 位的值

3、BITCOUNT key [start end]
统计 键 key 中值为 1 的位的数量。
可选参数 start 和 end 用于指定统计的范围。
示例:BITCOUNT visits 将返回键 visits 中所有位为 1 的数量。
二、关于key的常用命令
1、DEL key
该命令用于在 key 存在时删除 key。

2、DUMP key
序列化给定 key ,并返回被序列化的值。序列化:把对象转化为可传输的字节序列过程称为序列化。反序列化:把字节序列还原为对象的过程称为反序列化。

3、EXISTS key
检查给定 key 是否存在。
4、EXPIRE key seconds
设置 key 的过期时间,key 过期后将不再可用。单位以秒计。

5、EXPIREAT key timestamp
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。

6、PEXPIRE key milliseconds
设置 key 的过期时间以毫秒计。

7、PEXPIREAT key milliseconds-timestamp
设置 key 过期时间的时间戳(unix timestamp) 以毫秒计

8、KEYS pattern
查找所有符合给定模式( pattern)的 key 。

9、MOVE key db
将当前数据库的 key 移动到给定的数据库 db 当中。

10、PERSIST key
移除 key 的过期时间,key 将持久保持。

11 、PTTL key
以毫秒为单位返回 key 的剩余的过期时间。

12、TTL key
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。-1表示永不过期,-2表示已过期

13、RANDOMKEY
从当前数据库中随机返回一个 key

14、RENAME key newkey
修改 key 的名称

15、RENAMENX key newkey
仅当 newkey 不存在时,将 key 改名为 newkey

16、SCAN cursor [MATCH pattern] [COUNT count]
遍历输出数据库中的数据库键。可以具体指定哪个库

17、TYPE key
返回 key 所储存的值的类型。

18、select dbindex 用于切换数据库,共有16个库,索引是从0到15,默认为0

19、dbsize 查看当前数据库key的数量

20 、flushdb 清空当前库

21 、flushall 清空全部库

参考文献:
https://redis.io/
https://www.cnblogs.com/auguse/articles/17151950.html

标签:127.0,0.1,数据类型,redis,6379,key,常用命令,集合,integer
From: https://www.cnblogs.com/sunjiwei/p/18398658

相关文章

  • redis常用知识汇总(包括 jedis 和 springboot 整合 redis)
    介绍Redis是一个开源的内存数据库,它支持多种数据结构,并且常用于高速缓存、会话管理、消息队列等场景。Redis的全称是RemoteDictionaryServer,是一种key-value(键值对)存储系统,能够以极高的性能处理大量数据的读写操作。Redis的主要特点:基于内存:数据存储在内存中,具有极高的......
  • redis常用知识汇总(包括 jedis 和 springboot 整合 redis)
    介绍Redis是一个开源的内存数据库,它支持多种数据结构,并且常用于高速缓存、会话管理、消息队列等场景。Redis的全称是RemoteDictionaryServer,是一种key-value(键值对)存储系统,能够以极高的性能处理大量数据的读写操作。Redis的主要特点:基于内存:数据存储在内存中,具有......
  • Redis分布式锁
    线程安全->锁,多线程并发执行的时候,执行先后的顺序,不确定,随机性->需要保证程序在任意执行顺序下,执行逻辑都是ok的,之前学过的锁,mutex,synchronized本质上只能在一个进程内部生效,分布式系统中,是有很多进程的(每个服务器,都是独立的进程)因此,之前的锁,就难以对现在的分布式系统中......
  • 【Redis】redis5种数据类型(哈希)
    目录基本介绍命令HSETHGETHEXISTSHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOATHSTRLEN内部编码原生字符串类型、哈希类型、序列化字符串json作缓存的区别基本介绍哈希类型中的映射关系是field-value,用于区分redis整体的键值对(key-value)命令H......
  • 数据结构与算法(三)线性表的定义与抽象数据类型
    目录一、感受线性表的存在二、线性表的定义三、考题模拟1、请问公司的组织架构是否属于线性关系?2、那么班级同学的友谊呢?3、那么班级的点名册是不是线性表?四、抽象数据类型1、数据类型的定义:2、抽象数据类型一、感受线性表的存在    从这一篇开始,我们将介......
  • Redis缓存和Mysql数据一致性问题
            在高并发环境下,保持Redis缓存和MySQL数据库的数据一致性是一个复杂但至关重要的任务。下面是对这一问题的详细讲解,并结合PHP代码示例来展示如何解决这些一致性问题。问题背景Redis缓存和MySQL数据库的主要挑战在于:缓存和数据库之间的延迟:在缓存更......
  • Redis分布式锁查看机制与实现解析
    分布式系统中,锁的使用是保证资源一致性与并发控制的重要手段。Redis作为一个高效的内存存储工具,通过其简单的命令操作和快速响应机制,被广泛用于实现分布式锁。本文将深入探讨Redis中查看分布式锁的机制,包括如何查询锁的状态、使用何种命令进行锁操作,以及如何确保锁的有效性和正确性......
  • redis入门
    redis入门Nosql与sqlNosql是什么NoSQL,指的是非关系型的数据库。NoSQL有时也称作NotOnlySQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。sql是什么sql指的是关系型数据库。关系型数据库要满足4大特征,也就是我们常提的ACID原则(A原子性、C一致性、I独立性、D......
  • redis订阅者和进阶
    Redis进阶redis订阅者模式简介redis存在订阅者模式。就像是一个广播系统。存在三种角色:订阅者、发布者、频道。在redis当中,它们表示为subscriber(订阅者)、publisher(发布者)、channel(频道)其中的行为大抵是:订阅者订阅频道-->发布者针对于特定频道发布信息-->特定订阅者......
  • redis主从备份
    redis主从备份主从复制介绍redis主从复制原理:从服务器向主服务器发送SYNC命令。接到SYNC命令的主服务器会调用BGSAVE命令,创建一个RDB文件,并使用缓冲区记录接下来执行的所有写命令。当主服务器执行完BGSAVE命令时,它会向从服务器发送RDB文件,而从服务器则会接收并载......