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
- GET 获取某个键的值
GET job // 获取job的值
- GETSET 为键赋值,并返回键之前的旧值, 没有旧值则返回nil, 如果旧值存在但不是字符串类型则返回错误
GETSET job "newjob"
6.STRLEN 返回键 储存的的字符串的长度, 当键不存在时返回0,当键储存的不是字符串时返回错误
SET mykey "hello world"
STRLEN mykey
- 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
- INCR 为key 储存的数值+1. 如果key不存在,会将值初始化为0再执行+1,如果key的值不是数字会返回错误
INCR mykey
11.INCRBY 为key储存的数值加上增量,如果key不存在,会将值初始化为0再执行相加,如果key的值不是数值会返回错误
INCRBY mykey 20
- INCRBYFLOAT 为key储存的数值加上浮点数增量
INCRBYFLOAT mykey 3.14
- DECR 为key储存的数值-1
DECR mykey
- DECRBY 为key储存的数值减去增量
DECRBY mykey 18
- MSET 同时为多个key 赋值, 当key存在时会覆盖原来的值 (若不想覆盖原来的值可以用 MSETNX)
MSET key1 "hello" key2 "world"
- MSETNX 同时为多个key赋值,如果key已存在,则不进行操作
SET key2 "redis"
MSETNX key1 "hello" key2 "world" // key2已存在,不进行赋值操作,key2的值还是"redis"
- MGET 获取多个key的值
MGET key1 key2
二。LIst(列表)
- LPUSH 将一个或多个值 从左边插入列表 (RPUSH 右边)
LPUSH mylist a b c
- LPUSHX 当key存在且是列表时,将值从左边插入到列表,不存在时不执行操作 (RPUSHX 右边)
LPUSHX mylist "hello"
- 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
- LREM 删除列表中某个或某些元素
LREM list count value
a. count = 0 : 删除列表中所有与value相等的值
b. count > 0 : 从列表头部(左)开始搜索,移除与value相等的值,数量为count
c. count < 0 : 从表的尾部(右)开始搜索,移除与value相等的值,数量为count的绝对值
LREM mylist 2 "hello"
- LLEN 返回列表的长度
LLEN mylist
- LINDEX 返回列表中指定下标的元素
LINDEX mylist 0 // 返回mylist 中的下标为0的元素(第一个元素)
- LINSERT 在列表的某个元素 之前/之后 插入元素
LINSERT mylist BEFORE "value1" "value5" // 在mylist中的value1之前插入value5,若value1不存在则不执行任何操作
LINSERT mylist AFTER "value2" "value6" // 在mylist 中的value2 之后插入value6
- LSET 设置列表中对应下标的元素的值,如果下标不存在则返回错误
LSET mylist 0 "value1"
- LRANGE 获取列表中指定下标区间的元素
LRANGE mylist 0 0 // 第一个元素
LRANGE mylist -3 -1 // 倒数第三 到最后
- LTRIM 移除指定区间以外的元素
LTRIM mylist 2 -1 //移除 除了下标从2 到最后的元素,即移除了 下标为0,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) # 等待的秒数
- 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" # 被弹出的元素
- 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"
- SISMEMBER 判断元素是否是集合的成员,是返回1, 不是返回0
SISMEMBER php "oop"
- SPOP 移除并返回集合中的一个随机元素
SPOP php
- 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)
- SREM key member [member...]
移除集合key中的一个或多个member元素,不存在的member元素会被忽略,当key不是集合类型,返回一个错误
SREM php "oop"
- SMOVE source destination member
将member元素从source集合移动到destination集合
SMOVE php java "oop"
- SCARD key
返回集合key的基数(集合中元素的个数)
SCARD php
- SMEMBERS key
返回集合key中所有的成员
SMEMBERS php
- 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"
- 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"
- 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"
- 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"
- 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"
- 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"
- 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(哈希)
- HSET hash field value
将哈希表hash中域 field 的值设置为 value
redis> HSET website google "www.g.cn"
(integer) 1
redis> HGET website google
"www.g.cn"
- 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"
- HGET hash field
返回哈希表中给定域的值
redis> HSET homepage redis redis.com
(integer) 1
redis> HGET homepage redis
"redis.com"
- HEXISTS hash field
检查给定域field是否存在于哈希表hash中
HEXISTS phone myphone
- 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"
- HLEN key
返回哈希表key中域的数量
HLEN myphone
- 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
- 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"
- 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"
- 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"
- 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)
- 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)
- 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"
- HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的域值对