首页 > 数据库 >Redis常用命令

Redis常用命令

时间:2024-03-27 18:04:51浏览次数:33  
标签:salary Redis SMEMBERS redis key 常用命令 integer com

1.String

SET

将字符串值 value 关联到 key 。

如果 key 已经持有其他值, SET 就覆写旧值,无视类型。

> set key01 value01
"OK"

> get key01
"value01"
#设置value,同时设置key过期时间,单位秒> SET key02 value02 EX 60
"OK"

> TTL key02
(integer) 43

SETEX

将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。

如果 key 已经存在, SETEX 命令将覆写旧值。

备注:

 SETEX 是一个原子性(atomic)操作,关联值和设置生存时间两个动作会在同一时间内完成,该命令在 Redis 用作缓存时,非常实用。

> setex key03 60 value03
"OK"

> ttl key03
(integer) 51

SETNX(场景:锁的竞争)

将 key 的值设为 value ,当且仅当 key 不存在。

若给定的 key 已经存在,则 SETNX 不做任何动作。

> EXISTS job                # job 不存在
(integer) 0

> SETNX job "chengxuyuan"    # job 设置成功
(integer) 1

> SETNX job "paotui"   # 尝试覆盖 job ,失败
(integer) 0

> GET job                   # 没有被覆盖
"chengxuyuan"

APPEND

# 对不存在的 key 执行 APPEND

> EXISTS myphone               # 确保 myphone 不存在
(integer) 0

> APPEND myphone "nokia"       # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
(integer) 5                         # 字符长度


# 对已存在的字符串进行 APPEND

> APPEND myphone " - 1110"     # 长度从 5 个字符增加到 12 个字符
(integer) 12

> GET myphone
"nokia - 1110"

INCR

将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

> SET product1 20
OK

> INCR product1
(integer) 21

> GET product1    # 数字值在 Redis 中以字符串的形式保存
"21"

INCRBY

将 key 所储存的值加上增量 increment 。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。

> SET rank 50
OK

> INCRBY rank 20
(integer) 70

> GET rank
"70"

DECR

将 key 中储存的数字值减一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。

> SET failure_times 10OK
> DECR failure_times(integer) 9

DECRBY

将 key 所储存的值减去减量 decrement 。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。

> SET count 100OK
> DECRBY count 20(integer) 80

2.Hash

HSET

redis> HSET website google "www.g.cn"       # 设置一个新域
(integer) 1

redis> HSET website google "www.google.com" # 覆盖一个旧域
(integer) 0

 HGET

# 域存在

redis> HSET site redis redis.com
(integer) 1

redis> HGET site redis
"redis.com"


# 域不存在

redis> HGET site mysql
(nil)

HKEYS 

# 哈希表非空

redis> HMSET website google www.google.com yahoo www.yahoo.com
OK

redis> HKEYS website
1) "google"
2) "yahoo"


# 空哈希表/key不存在

redis> EXISTS fake_key
(integer) 0

redis> HKEYS fake_key
(empty list or set)

HEXISTS

redis> HEXISTS phone myphone
(integer) 0

redis> HSET phone myphone nokia-1110
(integer) 1

redis> HEXISTS phone myphone
(integer) 1

HLEN

redis> HSET db redis redis.com
(integer) 1

redis> HSET db mysql mysql.com
(integer) 1

redis> HLEN db
(integer) 2

redis> HSET db mongodb mongodb.org
(integer) 1

redis> HLEN db
(integer) 3

HSETNX

redis> HSETNX nosql key-value-store redis
(integer) 1

redis> HSETNX nosql key-value-store redis       # 操作无效,域 key-value-store 已存在
(integer) 0

HDEL

# 测试数据

redis> HGETALL abbr
1) "a"
2) "apple"
3) "b"
4) "banana"
5) "c"
6) "cat"
7) "d"
8) "dog"


# 删除单个域

redis> HDEL abbr a
(integer) 1


# 删除不存在的域

redis> HDEL abbr not-exists-field
(integer) 0


# 删除多个域

redis> HDEL abbr b c
(integer) 2

redis> HGETALL abbr
1) "d"
2) "dog"

HINCRBY

redis> HSET zhouxingxing english 20    # 对空域进行设置
(integer) 0

redis> HINCRBY zhouxingxing english 50
(integer) 70

redis> HGET zhouxingxing english

"70"

HVALS

redis> HMSET website google www.google.com yahoo www.yahoo.com
OK

redis> HVALS website
1) "www.google.com"
2) "www.yahoo.com"

3.List

LPUSH

# 加入单个元素

redis> LPUSH languages python
(integer) 1


# 加入重复元素

redis> LPUSH languages python
(integer) 2

redis> LRANGE languages 0 -1     # 列表允许重复元素
1) "python"
2) "python"


# 加入多个元素

redis> LPUSH mylist a b c
(integer) 3

redis> LRANGE mylist 0 -1
1) "c"
2) "b"
3) "a"

LRANGE

redis> RPUSH fp-language lisp
(integer) 1

redis> LRANGE fp-language 0 0
1) "lisp"

redis> RPUSH fp-language scheme
(integer) 2

redis> LRANGE fp-language 0 1
1) "lisp"
2) "scheme"

RPUSH

# 添加单个元素

redis> RPUSH languages c
(integer) 1


# 添加重复元素

redis> RPUSH languages c
(integer) 2

redis> LRANGE languages 0 -1 # 列表允许重复元素
1) "c"
2) "c"


# 添加多个元素

redis> RPUSH mylist a b c
(integer) 3

redis> LRANGE mylist 0 -1
1) "a"
2) "b"
3) "c"

RPOP

redis> RPUSH mylist "one"
(integer) 1

redis> RPUSH mylist "two"
(integer) 2

redis> RPUSH mylist "three"
(integer) 3

redis> RPOP mylist           # 返回被弹出的元素
"three"

redis> LRANGE mylist 0 -1    # 列表剩下的元素
1) "one"
2) "two"

RPUSHX

# key不存在

redis> LLEN greet
(integer) 0

redis> RPUSHX greet "hello"     # 对不存在的 key 进行 RPUSHX,PUSH 失败。
(integer) 0


# key 存在且是一个非空列表

redis> RPUSH greet "hi"         # 先用 RPUSH 插入一个元素
(integer) 1

redis> RPUSHX greet "hello"     # greet 现在是一个列表类型,RPUSHX 操作成功。
(integer) 2

redis> LRANGE greet 0 -1
1) "hi"
2) "hello"

LINDEX

redis> LPUSH mylist "World"
(integer) 1

redis> LPUSH mylist "Hello"
(integer) 2

redis> LINDEX mylist 0
"Hello"

redis> LINDEX mylist -1
"World"

redis> LINDEX mylist 3        # index不在 mylist 的区间范围内
(nil)

LSET

# 对空列表(key 不存在)进行 LSET

redis> EXISTS list
(integer) 0

redis> LSET list 0 item
(error) ERR no such key


# 对非空列表进行 LSET

redis> LPUSH job "cook food"
(integer) 1

redis> LRANGE job 0 0
1) "cook food"

redis> LSET job 0 "play game"
OK

redis> LRANGE job  0 0
1) "play game"


# index 超出范围

redis> LLEN list                    # 列表长度为 1
(integer) 1

redis> LSET list 3 'out of range'
(error) ERR index out of range

LLEN

# 空列表

redis> LLEN job
(integer) 0


# 非空列表

redis> LPUSH job "cook food"
(integer) 1

redis> LPUSH job "have lunch"
(integer) 2

redis> LLEN job
(integer) 2

4.Set

SADD

# 添加单个元素

redis> SADD bbs "discuz.net"
(integer) 1


# 添加重复元素

redis> SADD bbs "discuz.net"
(integer) 0


# 添加多个元素

redis> SADD bbs "tianya.cn" "groups.google.com"
(integer) 2

redis> SMEMBERS bbs
1) "discuz.net"
2) "groups.google.com"
3) "tianya.cn"

SCARD

redis> SADD tool pc printer phone
(integer) 3

redis> SCARD tool   # 非空集合
(integer) 3

redis> DEL tool
(integer) 1

redis> SCARD tool   # 空集合
(integer) 0

SMEMBERS

# key 不存在或集合为空

redis> EXISTS not_exists_key
(integer) 0

redis> SMEMBERS not_exists_key
(empty list or set)


# 非空集合

redis> SADD language Ruby Python Clojure
(integer) 3

redis> SMEMBERS language
1) "Python"
2) "Ruby"
3) "Clojure"

SISMEMBER

redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"

redis> SISMEMBER joe's_movies "bet man"
(integer) 0

redis> SISMEMBER joe's_movies "Fast Five"
(integer) 1

SDIFF 命令返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元

redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SDIFF key1 key2
1) "a"
2) "b"
redis> 

SDIFFSTORE

这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。

如果 destination 集合已经存在,则将其覆盖。

destination 可以是 key 本身。

redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"

redis> SMEMBERS peter's_movies
1) "bet man"
2) "start war"
3) "2012"

redis> SDIFFSTORE joe_diff_peter joe's_movies peter's_movies
(integer) 2

redis> SMEMBERS joe_diff_peter
1) "hi, lady"
2) "Fast Five"

SINTER

redis> SMEMBERS group_11) "LI LEI"2) "TOM"3) "JACK"
redis> SMEMBERS group_21) "HAN MEIMEI"2) "JACK"
redis> SINTER group_1 group_21) "JACK"

SINTERSTORE

redis> SMEMBERS songs
1) "good bye joe"
2) "hello,peter"

redis> SMEMBERS my_songs
1) "good bye joe"
2) "falling"

redis> SINTERSTORE song_interset songs my_songs
(integer) 1

redis> SMEMBERS song_interset
1) "good bye joe"

SMOVE

redis> SMEMBERS songs
1) "Billie Jean"
2) "Believe Me"

redis> SMEMBERS my_songs
(empty list or set)

redis> SMOVE songs my_songs "Believe Me"
(integer) 1

redis> SMEMBERS songs
1) "Billie Jean"

redis> SMEMBERS my_songs
1) "Believe Me"

SPOP

redis> SMEMBERS db
1) "MySQL"
2) "MongoDB"
3) "Redis"

redis> SPOP db
"Redis"

redis> SMEMBERS db
1) "MySQL"
2) "MongoDB"

redis> SPOP db
"MySQL"

redis> SMEMBERS db
1) "MongoDB"

SREM

# 测试数据
redis> SMEMBERS languages1) "c"2) "lisp"3) "python"4) "ruby"

# 移除单个元素
redis> SREM languages ruby(integer) 1

# 移除不存在元素
redis> SREM languages non-exists-language(integer) 0

# 移除多个元素
redis> SREM languages lisp python c(integer) 3
redis> SMEMBERS languages(empty list or set)

SUNION

redis> SMEMBERS songs
1) "Billie Jean"

redis> SMEMBERS my_songs
1) "Believe Me"

redis> SUNION songs my_songs
1) "Billie Jean"
2) "Believe Me"

SUNIONSTORE

redis> SMEMBERS NoSQL
1) "MongoDB"
2) "Redis"

redis> SMEMBERS SQL
1) "sqlite"
2) "MySQL"

redis> SUNIONSTORE db NoSQL SQL
(integer) 4

redis> SMEMBERS db
1) "MySQL"
2) "sqlite"
3) "MongoDB"
4) "Redis"

5.SortedSet

ZADD

# 添加单个元素

redis> ZADD page_rank 10 google.com
(integer) 1


# 添加多个元素

redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2

redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"


# 添加已存在元素,且 score 值不变

redis> ZADD page_rank 10 google.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES  # 没有改变
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"


# 添加已存在元素,但是改变 score 值

redis> ZADD page_rank 6 bing.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES  # bing.com 元素的 score 值被改变
1) "bing.com"
2) "6"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

ZCARD

redis > ZADD salary 2000 tom    # 添加一个成员
(integer) 1

redis > ZCARD salary
(integer) 1

redis > ZADD salary 5000 jack   # 再添加一个成员
(integer) 1

redis > ZCARD salary
(integer) 2

redis > EXISTS non_exists_key   # 对不存在的 key 进行 ZCARD 操作
(integer) 0

redis > ZCARD non_exists_key
(integer) 0

ZCOUNT

redis> ZRANGE salary 0 -1 WITHSCORES    # 测试数据
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"

redis> ZCOUNT salary 2000 5000          # 计算薪水在 2000-5000 之间的人数
(integer) 3

redis> ZCOUNT salary 3000 5000          # 计算薪水在 3000-5000 之间的人数
(integer) 2

ZINCRBY

redis> ZSCORE salary tom"2000"
redis> ZINCRBY salary 2000 tom   # tom 加薪啦!"4000"

ZRANGE

redis > ZRANGE salary 0 -1 WITHSCORES             # 显示整个有序集成员
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

redis > ZRANGE salary 1 2 WITHSCORES              # 显示有序集下标区间 1 至 2 的成员
1) "tom"
2) "5000"
3) "boss"
4) "10086"

redis > ZRANGE salary 0 200000 WITHSCORES         # 测试 end 下标超出最大下标时的情况
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

redis > ZRANGE salary 200000 3000000 WITHSCORES   # 测试当给定区间不存在于有序集时的情况
(empty list or set)

ZRANGEBYSCORE

redis> ZADD salary 2500 jack                        # 测试数据
(integer) 0
redis> ZADD salary 5000 tom
(integer) 0
redis> ZADD salary 12000 peter
(integer) 0

redis> ZRANGEBYSCORE salary -inf +inf               # 显示整个有序集
1) "jack"
2) "tom"
3) "peter"

redis> ZRANGEBYSCORE salary -inf +inf WITHSCORES    # 显示整个有序集及成员的 score 值
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"

redis> ZRANGEBYSCORE salary -inf 5000 WITHSCORES    # 显示工资 <=5000 的所有成员
1) "jack"
2) "2500"
3) "tom"
4) "5000"

redis> ZRANGEBYSCORE salary (5000 400000            # 显示工资大于 5000 小于等于 400000 的成员
1) "peter"

ZSCORE

redis> ZRANGE salary 0 -1 WITHSCORES    # 测试数据
1) "tom"
2) "2000"
3) "peter"
4) "3500"
5) "jack"
6) "5000"

redis> ZSCORE salary peter              # 注意返回值是字符串
"3500"

6.BitMap签到:

https://kdocs.cn/l/cingC3b19Taj

6.1 签到

问题:某个具体学生今年签到天数?

offset= dayofYear 今年的第几天

setbit  2023.UserId.6    5  1 setbit  2023.UserId.6    168  1 setbit  2023.UserId.13   256  1
bitcount 2023.UserId.6  0  -1   获取某人的具体登录天数

366天/8 ≈ 46 byte ≈ 0.0449219(kb) *10万 ≈ 4492.19 (kb)/1024 ≈ 4.3869(mb)

6.2促销活动

问题:

1.三天一共来了多少人

2.这三天每天都来的人数(活跃用户)

setbit  20200601    6  1 setbit  20200602    6  1setbit  20200602   13  1bitop  and  jieguo1  20200601  20200602    一直在线人数统计bitop  or   jieguo2  20200601  20200602    时间段总的活跃用户数bitcount jieguo1

bitop 参与的运算有

and与

全1出1,有一个0就出0

or 或

全0出0,有一个1就出1

not 非

有1出0;有0出1。

xor 异或

相同得0;相异得1

7.EVAL

从 Redis 2.6.0 版本开始,通过内置的 Lua 解释器,可以使用 EVAL 命令对 Lua 脚本进行求值。

 

eval "return redis.call('set',KEYS[1],ARGV[1])" 1 name 张三

 

标签:salary,Redis,SMEMBERS,redis,key,常用命令,integer,com
From: https://blog.csdn.net/m0_64107427/article/details/137024938

相关文章

  • vim 常用命令集
    此文介绍了vim中常用的命令,用熟练后可以提高工作效率哦。1.多行注释:1.首先按esc进入命令行模式下,按下Ctrl+v,进入列(也叫区块)模式;2.在行首使用上下键选择需要注释的多行;3.按下键盘(大写)“I”键,进入插入模式;4.然后输入注释符(“//”、“#”等);5.最后按下“Esc”键。......
  • 掌握Node.js:常用命令及示例
    Node.js是一个流行的JavaScript运行时环境,广泛应用于服务器端开发、命令行工具和前端构建工具等方面。在Node.js中,有许多常用的命令可用于管理项目、安装依赖项以及运行脚本。本文将介绍一些常用的Node.js命令,并提供相应的示例,以帮助开发者更好地利用这些命令。1.node......
  • 新版Redis不再“开源”,对使用者都有哪些影响?
    2024年3月20日,RedisLabs宣布从Redis7.4开始,将原先比较宽松的BSD源码使用协议修改为RSAv2和SSPLv1协议。该变化意味着Redis在OSI(开放源代码促进会)定义下不再是严格的开源产品。该变化引发Redis使用者的广泛激烈讨论,那么对Redis使用者都有哪些影响呢?Redis协议变更之后,都有哪些......
  • 使用shell生成数据并插入到redis数据库中
    [root@snortredis]#catset.sh#!/bin/bash#Redis服务器地址和端口REDIS_HOST="localhost"REDIS_PORT="6379"REDIS_PASS="123456"#插入的键值对数量NUM_ENTRIES=1000000#插入的键的前缀KEY_PREFIX="testkey"#生成随机字符串的长度RANDOM_STRING_L......
  • Linux常用命令
    linux常用命令sh切换桌面cat/etc/shells看系统支持的shell类型bash是可以多开的,多开的bash相对是独立的操作系统:也是一种特殊的程序,调度硬件资源命令的本质是一个个程序内部命令:1.内部命令和bash软件是一体的,bash中集成了很多命令2.没有独立的文件3.不用独立......
  • 京东二面:Redis为什么快?我说Redis是纯内存访问的,然后他对我笑了笑。。。。。。
    引言Redis是一个高性能的开源内存数据库,以其快速的读写速度和丰富的数据结构支持而闻名。作为一个轻量级、灵活的键值存储系统,Redis在各种应用场景下都展现出了惊人的性能优势。无论是作为缓存工具、会话管理组件、消息传递媒介,还是在实时数据处理任务和复杂的分布式系统架构中,Re......
  • redis 数据库一致性策略
    参考常见的缓存更新策略共有3种:CacheAside(旁路缓存)策略;Read/WriteThrough(读穿/写穿)策略;WriteBack(写回)策略;CacheAside(旁路缓存)策略CacheAside(旁路缓存)策略是最常用的,应用程序直接与「数据库、缓存」交互,并负责对缓存的维护,该策略又可以细分为「读策略」和「写策略」......
  • Git 常用命令速查
    Git是一个分布式版本控制系统,用于管理代码和其他文件。它允许您跟踪代码的更改,并在必要时回滚到以前的版本。本文将介绍一些Git常用命令,帮助您快速上手Git。初始化Git仓库gitinit添加文件到暂存区gitadd<file_name>提交更改gitcommit-m"提交信息"查看......
  • 面试题:在百万keys的Redis里面,如何模糊查找某个key.
    面试题:在百万keys的Redis里面,如何模糊查找某个key.在百万级别的Redis数据库中,进行模糊查找某个key时,需要注意查询效率和对Redis服务器性能的影响。以下是一些建议和方法:1.使用SCAN命令代替KEYS由于KEYS命令在大规模数据集上执行时会阻塞Redis服务器,并可能导致严重......
  • C#ASP.Net Core 5.0 使用StackExchange.Redis
    一、前言日常开发中,我们常需要操作redis,本章节介绍ASP.NetCore使用StackExchange.RedisDocs:https://stackexchange.github.io/StackExchange.Redis/二、介绍StackExchange.Redis是适用于.NET语言(C#等)的高性能通用Redis客户端。它是BookSleeve的逻辑继承者,是由StackEx......