Redis命令行

Windows 命令行运行redis ,cd 到redis安装目录, 运行

redis-server.exe redis.windows.conf

再另外开启一个cmd窗口,切换到redis目录下,

redis-cli.exe -h 127.0.0.1 -p 6379

Windows 下安装php的redis扩展: https://blog.csdn.net/q810391679/article/details/80812578

一 。String(字符串)
1.SET 给键赋值

SET mykey "hello world"  // 赋值
GET mykey  // 取值

2.SETNX 只在键存在的情况下 进行赋值, 若键已存在,则不做任何操作

EXISTS job    // 返回0表示  job 不存在
SETNX job "programmer"    //=>(integer) 1  // 赋值成功
SETNX job "bose"              // =>(integer) 0  // 已经存在,赋值失败

3.SETEX 赋值时 设置生存时间 (秒)

SETEX job "programmer" 60 
  1. GET 获取某个键的值
GET job  // 获取job的值
  1. GETSET 为键赋值,并返回键之前的旧值, 没有旧值则返回nil, 如果旧值存在但不是字符串类型则返回错误
 GETSET job "newjob"

6.STRLEN 返回键 储存的的字符串的长度, 当键不存在时返回0,当键储存的不是字符串时返回错误

SET mykey "hello world"
STRLEN mykey
  1. APPEND 当key 的值是字符串时, 在key的末尾追加内容,返回追加后字符串的长度
APPEND mykey "lalala"

8.SETRANGE 从字符串的某个位置开始覆盖原来的内容

SET mykey "hello world"
SETRANGE mykey 6 "redis"  // 返回 "hello redis"

9.GETRANGE 获取字符串指定位置的内容

SET mykey "hello world"
GETRANGE mykey 0 4  // 返回"hello"  索引0-4 包含4
GETRANGE myke 0 -1  // 返回 "hello world"  从0 到最后
GETRANGE mykey -5 -2 //  返回"worl"  从倒数第5 到 倒数第2 
  1. INCR 为key 储存的数值+1. 如果key不存在,会将值初始化为0再执行+1,如果key的值不是数字会返回错误
INCR mykey

11.INCRBY 为key储存的数值加上增量,如果key不存在,会将值初始化为0再执行相加,如果key的值不是数值会返回错误

INCRBY mykey 20
  1. INCRBYFLOAT 为key储存的数值加上浮点数增量
INCRBYFLOAT mykey 3.14
  1. DECR 为key储存的数值-1
DECR mykey
  1. DECRBY 为key储存的数值减去增量
DECRBY mykey 18
  1. MSET 同时为多个key 赋值, 当key存在时会覆盖原来的值 (若不想覆盖原来的值可以用 MSETNX)
MSET key1 "hello" key2 "world"
  1. MSETNX 同时为多个key赋值,如果key已存在,则不进行操作
SET key2 "redis"
MSETNX key1 "hello" key2 "world"  // key2已存在,不进行赋值操作,key2的值还是"redis"
  1. MGET 获取多个key的值
MGET key1 key2

二。LIst(列表)

  1. LPUSH 将一个或多个值 从左边插入列表 (RPUSH 右边)
LPUSH mylist a b c
  1. LPUSHX 当key存在且是列表时,将值从左边插入到列表,不存在时不执行操作 (RPUSHX 右边)
LPUSHX mylist "hello"
  1. LPOP 移除并返回列表的头部元素 (RPOP 尾部元素)
LPOP mylist

4.RPOPLPUSH 取出第一列表的尾部元素,添加到第二个列表的头部

RPOPLPUSH mylist1 mylist2  // mylist1 = a b c , mylist2 = x y z , 执行后  mylist1 = a b , mylist2 = c x y z
  1. LREM 删除列表中某个或某些元素
    LREM list count value
    a. count = 0 : 删除列表中所有与value相等的值
    b. count > 0 : 从列表头部(左)开始搜索,移除与value相等的值,数量为count
    c. count < 0 : 从表的尾部(右)开始搜索,移除与value相等的值,数量为count的绝对值
LREM mylist 2 "hello" 
  1. LLEN 返回列表的长度
LLEN mylist
  1. LINDEX 返回列表中指定下标的元素
LINDEX mylist 0  // 返回mylist 中的下标为0的元素(第一个元素)
  1. LINSERT 在列表的某个元素 之前/之后 插入元素
LINSERT mylist BEFORE "value1" "value5"  // 在mylist中的value1之前插入value5,若value1不存在则不执行任何操作
LINSERT mylist AFTER "value2" "value6"  // 在mylist 中的value2 之后插入value6
  1. LSET 设置列表中对应下标的元素的值,如果下标不存在则返回错误
LSET mylist 0 "value1"
  1. LRANGE 获取列表中指定下标区间的元素
LRANGE mylist 0 0  // 第一个元素
LRANGE mylist -3 -1 // 倒数第三 到最后
  1. LTRIM 移除指定区间以外的元素
LTRIM mylist 2 -1  //移除 除了下标从2 到最后的元素,即移除了 下标为0,1的元素
  1. BLPOP
    a. 非阻塞行为,如果给定的key内至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,并和该列表组合一起返回
redis> DEL job command request           # 确保key都被删除
(integer) 0

redis> LPUSH command "update system..."  # 为command列表增加一个值
(integer) 1

redis> LPUSH request "visit page"        # 为request列表增加一个值
(integer) 1

redis> BLPOP job command request 0       # job 列表为空,被跳过,紧接着 command 列表的第一个元素被弹出。
1) "command"                             # 弹出元素所属的列表
2) "update system..."                    # 弹出元素所属的值

b. 阻塞行为 如果所有给定 key 都不存在或包含空列表,那么 BLPOP 命令将阻塞连接,直到等待超时,或有另一个客户端对给定 key 的任意一个执行 LPUSH key value [value …]RPUSH key value [value …] 命令为止。
超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。

redis> EXISTS job                # 确保两个 key 都不存在
(integer) 0
redis> EXISTS command
(integer) 0

redis> BLPOP job command 300     # 因为key一开始不存在,所以操作会被阻塞,直到另一客户端对 job 或者 command 列表进行 PUSH 操作。
1) "job"                         # 这里被 push 的是 job
2) "do my home work"             # 被弹出的值
(26.26s)                         # 等待的秒数

redis> BLPOP job command 5       # 等待超时的情况
(nil)
(5.66s)                          # 等待的秒数
  1. BRPOP 当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的尾部元素
    返回值: 假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值
redis> LLEN course
(integer) 0

redis> RPUSH course algorithm001
(integer) 1

redis> RPUSH course c++101
(integer) 2

redis> BRPOP course 30
1) "course"             # 被弹出元素所属的列表键
2) "c++101"             # 被弹出的元素
  1. BRPOPLPUSH 当列表 source 为空时, BRPOPLPUSH 命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行 LPUSH key value [value …]RPUSH key value [value …] 命令为止。

超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。
返回值: 假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长

# 非空列表

redis> BRPOPLPUSH msg reciver 500
"hello moto"                        # 弹出元素的值
(3.38s)                             # 等待时长

redis> LLEN reciver
(integer) 1

redis> LRANGE reciver 0 0
1) "hello moto"


# 空列表

redis> BRPOPLPUSH msg reciver 1
(nil)
(1.34s)

三。Set (集合)
1.SADD 将一个或多个元素加入到集合中,若元素已存在则该元素被忽略,如果集合不存在则创建一个集合

SADD php "oop"
  1. SISMEMBER 判断元素是否是集合的成员,是返回1, 不是返回0
SISMEMBER php "oop"
  1. SPOP 移除并返回集合中的一个随机元素
SPOP php
  1. SRANDMEMBER key [count]
    只提供key参数时,返回集合中的一个随机元素
    如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
    如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
# 添加元素

redis> SADD fruit apple banana cherry
(integer) 3

# 只给定 key 参数,返回一个随机元素

redis> SRANDMEMBER fruit
"cherry"

redis> SRANDMEMBER fruit
"apple"

# 给定 3 为 count 参数,返回 3 个随机元素
# 每个随机元素都不相同

redis> SRANDMEMBER fruit 3
1) "apple"
2) "banana"
3) "cherry"

# 给定 -3 为 count 参数,返回 3 个随机元素
# 元素可能会重复出现多次

redis> SRANDMEMBER fruit -3
1) "banana"
2) "cherry"
3) "apple"

redis> SRANDMEMBER fruit -3
1) "apple"
2) "apple"
3) "cherry"

# 如果 count 是整数,且大于等于集合基数,那么返回整个集合

redis> SRANDMEMBER fruit 10
1) "apple"
2) "banana"
3) "cherry"

# 如果 count 是负数,且 count 的绝对值大于集合的基数
# 那么返回的数组的长度为 count 的绝对值

redis> SRANDMEMBER fruit -10
1) "banana"
2) "apple"
3) "banana"
4) "cherry"
5) "apple"
6) "apple"
7) "cherry"
8) "apple"
9) "apple"
10) "banana"

# SRANDMEMBER 并不会修改集合内容

redis> SMEMBERS fruit
1) "apple"
2) "cherry"
3) "banana"

# 集合为空时返回 nil 或者空数组

redis> SRANDMEMBER not-exists
(nil)

redis> SRANDMEMBER not-eixsts 10
(empty list or set)
  1. SREM key member [member...]
    移除集合key中的一个或多个member元素,不存在的member元素会被忽略,当key不是集合类型,返回一个错误
SREM php "oop"
  1. SMOVE source destination member
    将member元素从source集合移动到destination集合
SMOVE php java "oop"
  1. SCARD key
    返回集合key的基数(集合中元素的个数)
SCARD php
  1. SMEMBERS key
    返回集合key中所有的成员
SMEMBERS php
  1. SSCAN key cursor [MATCH pattern] [COUNT count]
    迭代集合中的元素
redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "hi"
(integer) 1
redis 127.0.0.1:6379> SADD myset1 "bar"
(integer) 1
redis 127.0.0.1:6379> sscan myset1 0 match h*
1) "0"
2) 1) "hello"
   2) "h1"
  1. SINTER key [key ...]
    返回集合的交集
redis> SMEMBERS group_1
1) "LI LEI"
2) "TOM"
3) "JACK"

redis> SMEMBERS group_2
1) "HAN MEIMEI"
2) "JACK"

redis> SINTER group_1 group_2
1) "JACK"
  1. SINTERSTORE destination key [key...]
    获取集合的交集,并将结果保存到 destination集合中,如果destination集合已存在,则将其覆盖
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"
  1. SUNION key[key...]
    返回集合的并集
redis> SMEMBERS songs
1) "Billie Jean"

redis> SMEMBERS my_songs
1) "Believe Me"

redis> SUNION songs my_songs
1) "Billie Jean"
2) "Believe Me"
  1. SUNIONSTORE destination key [key...]
    获取集合的并集,并将结果保存到 destination集合中,如果destination集合已存在,则将其覆盖
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"
  1. SDIFF key [key...]
    返回一个集合的全部成员,该集合是所有给定集合之间的差集。不存在的 key 被视为空集。
redis> SMEMBERS peter's_movies
1) "bet man"
2) "start war"
3) "2012"

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

redis> SDIFF peter's_movies joe's_movies
1) "bet man"
2) "start war"
  1. SDIFFSTORE destination key [key...]
    获取集合的差集,并将结果保存到 destination集合中,如果destination集合已存在,则将其覆盖
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"

四。 Hash(哈希)

  1. HSET hash field value
    将哈希表hash中域 field 的值设置为 value
redis> HSET website google "www.g.cn"
(integer) 1

redis> HGET website google
"www.g.cn"
  1. HSETNX hash field value
    当域field 尚未存在与hash表的情况下,将它的值设置为value,如果已存在则放弃执行
#域尚未存在, 设置成功:
redis> HSETNX database key-value-store Redis
(integer) 1

redis> HGET database key-value-store
"Redis"

# 域已经存在, 设置未成功, 域原有的值未被改变:
redis> HSETNX database key-value-store Riak
(integer) 0

redis> HGET database key-value-store
"Redis"
  1. HGET hash field
    返回哈希表中给定域的值
redis> HSET homepage redis redis.com
(integer) 1

redis> HGET homepage redis
"redis.com"
  1. HEXISTS hash field
    检查给定域field是否存在于哈希表hash中
HEXISTS phone myphone
  1. HDEL key field [field...]
    删除哈希表key中的一个或多个指定域,不存在的域将被忽略
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"
  1. HLEN key
    返回哈希表key中域的数量
HLEN myphone
  1. HSTRLEN key field
    返回哈希表key中 给定域相关的值的字符串的长度
redis> HMSET myhash f1 "HelloWorld" f2 "99" f3 "-256"
OK

redis> HSTRLEN myhash f1
(integer) 10

redis> HSTRLEN myhash f2
(integer) 2

redis> HSTRLEN myhash f3
(integer) 4
  1. HINCRBY key field increment
    为哈希表key中的域field的值加上增量 increment (可以为负数)
# increment 为正数

redis> HEXISTS counter page_view    # 对空域进行设置
(integer) 0

redis> HINCRBY counter page_view 200
(integer) 200

redis> HGET counter page_view
"200"


# increment 为负数

redis> HGET counter page_view
"200"

redis> HINCRBY counter page_view -50
(integer) 150

redis> HGET counter page_view
"150"


# 尝试对字符串值的域执行HINCRBY命令

redis> HSET myhash string hello,world       # 设定一个字符串值
(integer) 1

redis> HGET myhash string
"hello,world"

redis> HINCRBY myhash string 1              # 命令执行失败,错误。
(error) ERR hash value is not an integer

redis> HGET myhash string                   # 原值不变
"hello,world"
  1. HINCRBYFLOAT key field increment
    为哈希表key 中域field加上浮点数增量increment
# 值和增量都是普通小数

redis> HSET mykey field 10.50
(integer) 1
redis> HINCRBYFLOAT mykey field 0.1
"10.6"


# 值和增量都是指数符号

redis> HSET mykey field 5.0e3
(integer) 0
redis> HINCRBYFLOAT mykey field 2.0e2
"5200"


# 对不存在的键执行 HINCRBYFLOAT

redis> EXISTS price
(integer) 0
redis> HINCRBYFLOAT price milk 3.5
"3.5"
redis> HGETALL price
1) "milk"
2) "3.5"


# 对不存在的域进行 HINCRBYFLOAT

redis> HGETALL price
1) "milk"
2) "3.5"
redis> HINCRBYFLOAT price coffee 4.5   # 新增 coffee 域
"4.5"
redis> HGETALL price
1) "milk"
2) "3.5"
3) "coffee"
4) "4.5"
  1. HMSET key field value [field value ...]
    同时将多个field - value (域-值)对 设置到哈希表key中
redis> HMSET website google www.google.com yahoo www.yahoo.com
OK

redis> HGET website google
"www.google.com"

redis> HGET website yahoo
"www.yahoo.com"
  1. HMGET key field [field ...]
    返回哈希表key中 一个或多个给定域的值
redis> HMSET pet dog "doudou" cat "nounou"    # 一次设置多个域
OK

redis> HMGET pet dog cat fake_pet             # 返回值的顺序和传入参数的顺序一样
1) "doudou"
2) "nounou"
3) (nil)     

12 . HKEYS key
返回哈希表key中所有的域

# 哈希表非空

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)
  1. HVALS key
    返回哈希表key中所有域的值
# 非空哈希表

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

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


# 空哈希表/不存在的key

redis> EXISTS not_exists
(integer) 0

redis> HVALS not_exists
(empty list or set)
  1. HGETALL key
    返回哈希表key中 所有的域和值
redis> HSET people jack "Jack Sparrow"
(integer) 1

redis> HSET people gump "Forrest Gump"
(integer) 1

redis> HGETALL people
1) "jack"          # 域
2) "Jack Sparrow"  # 值
3) "gump"
4) "Forrest Gump"
  1. HSCAN key cursor [MATCH pattern] [COUNT count]
    迭代哈希表中的域值对
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容