赞
踩
进入redis安装目录, 启动redis-server.exe
命令启动redis服务
命令行进入redis安装目录, 这里我是通过phpstudy安装的redis
通过命令, 启动服务
redis-server redis.windows.conf
redis-server --service-install redis.windows.conf --loglevel verbose
win+R 输入services.msc查看注册结果, 找到redis服务
- redis-server --service-start // 启动
-
- redis-server --service-stop // 关闭
注: redis.server 配置环境变量, 启动服务就不需要进入安装目录了
将安装路径 配置到系统变量-path
系统属性->环境变量->系统变量(path)
>redis-cli
执行redis-cli并使用ping命令检测redis是否启动
redis-cli -h host -p port -a password
连接到本地主机127.0.0.1, 端口 6379, 密码 123465
Redis支持五种数据类型: stirng(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合 sorted set)
string是redis最基础的数据类型, key-value可以理解成一对对键值对, 值value最大存储512M。
string类型是二进制安全的, 即可以用于包含任何数据, 比如jpg图片或序列化的对象。
- 127.0.0.1:6379> set my_key redis
- OK
- 127.0.0.1:6379> get my_key
- "redis"
Redis Hash是一个键值对(key-value)的集合。
Redis Hash是一个string类型的field和value的映射表, 适用于存储对象
例如:苹果: 颜色:红色, 大小:12cm 种类:红富士
apple: color=>red size=>12cm type=>homes
- 127.0.0.1:6379> hmset apple color red size 12cm type homes
- OK
- 127.0.0.1:6379> hgetall apple
- 1) "color"
- 2) "red"
- 3) "size"
- 4) "12cm"
- 5) "type"
- 6) "homes"
Redis List是简单的字符串列表, 按照插入顺序排序。可以从头部(左边L)或尾部(右边R)添加元素。
- 127.0.0.1:6379> del list
- (integer) 1
- 127.0.0.1:6379> lpush list 1 // 头部插入1
- (integer) 1
- 127.0.0.1:6379> lpush list 2 // 头部插入2
- (integer) 2
- 127.0.0.1:6379> rpush list 3 // 尾部插入3
- (integer) 3
- 127.0.0.1:6379> lrange list 0 -1 // 获取list全部元素
- 1) "2"
- 2) "1"
- 3) "3"
Redis Set是string类型的无序集合, 集合成员唯一。
>sadd key_name member1....member
使用sadd添加元素到集合, 成功返回被添加成功的成员数
- 127.0.0.1:6379> del set
- (integer) 0
- 127.0.0.1:6379> sadd set redis
- (integer) 1
- 127.0.0.1:6379> sadd set mongodb mysql
- (integer) 2
- 127.0.0.1:6379> sadd set mysql // 重复添加
- (integer) 0
- 127.0.0.1:6379> smembers set
- 1) "mysql"
- 2) "redis"
- 3) "mongodb"
Redis ZSet和Set一样,也是string类型的集合,集合成员唯一。不同的是每个元素都会关联一个double类型的分数, redis正式通过分数来为集合中的成员进行从大到小的排序。
zset的成员唯一, 但分数(score)可以重复
>zadd key_name score1 member1 ... score member
使用zadd添加元素到集合, 成功返回被添加成功的成员数
- 127.0.0.1:6379> zadd myKey 1 one
- (integer) 1
- 127.0.0.1:6379> zadd myKey 2 two 3 three
- (integer) 2
- 127.0.0.1:6379> zrange myKey 0 -1 // 返回所有成员
- 1) "one"
- 2) "two"
- 3) "three"
- 127.0.0.1:6379> zrange myKey 0 -1 withscores // 返回所有成员(包含分数)
- 1) "one"
- 2) "1"
- 3) "two"
- 4) "2"
- 5) "three"
- 6) "3"
>command key_name
- 127.0.0.1:6379> set key1 value1 # 设置key1的值为value1
- OK
- 127.0.0.1:6379> get key1 # 获取键key1
- "value1"
- 127.0.0.1:6379> del key1 #删除键key1
- (integer) 1
- 127.0.0.1:6379>
删除指定key
语法:
>del key_name
返回:
被删除key的数量
实例:
- 127.0.0.1:6379> del key1 #删除键key1
- (integer) 1
序列化指定key, 并返回序列化的值
语法:
>dump key_name
返回:
如果key不存在, 返回 nil ; 否则, 返回序列化后的值
实例:
- 127.0.0.1:6379> set key1024 "hello world"
- OK
- 127.0.0.1:6379> dump key1024
- "\x00\x0bhello world\x06\x00\x9d\x11!9S\x92\x9c\xa7"
- 127.0.0.1:6379>
检查指定key是否存在
语法:
>exists key_name
返回:
如果key存在, 返回 1 ; 否则, 返回0
实例:
- 127.0.0.1:6379> set key1024 "hello world" # 设置key
- OK
- 127.0.0.1:6379> exists key1024 # 判断key存在
- (integer) 1
- 127.0.0.1:6379> del key1024 # 删除key再次判断key存在
- (integer) 1
- 127.0.0.1:6379> exists key1024
- (integer) 0
- 127.0.0.1:6379>
设置key的过期时长, key过期后不再可用。单位 秒
语法:
>expire key_name seconds
返回:
设置成功, 返回 1 ; key不存在或设置失败, 返回0
实例:
- 127.0.0.1:6379> set key1024 "hello world"
- OK
- 127.0.0.1:6379> expire key1024 60
- (integer) 1
- 127.0.0.1:6379>
设置key的过期时间(时间戳-秒), key过期后不再可用。
语法:
>expireAt key_name timestamp
返回:
设置成功, 返回 1 ; key不存在或设置失败, 返回0
实例:
- 127.0.0.1:6379> set key1024 "hello world"
- OK
- 127.0.0.1:6379> expireAt key1024 1710406553
- (integer) 1
- 127.0.0.1:6379>
以毫秒为单位设置key的过期时长, key过期后不再可用。单位 毫秒
语法:
>PExpire key_name millseconds
返回:
设置成功, 返回 1 ; key不存在或设置失败, 返回0
实例:
- 127.0.0.1:6379> set key1024 "hello world"
- OK
- 127.0.0.1:6379> pexpire key1024 1500
- (integer) 1
- 127.0.0.1:6379>
设置key的过期时间(时间戳-毫秒), key过期后不再可用。
语法:
>PExpireAt key_name timestampMill
返回:
设置成功, 返回 1 ; key不存在或设置失败, 返回0
实例:
- 127.0.0.1:6379> set key1024 "hello world"
- OK
- 127.0.0.1:6379> pExpireAt key1024 1710406553000
- (integer) 1
- 127.0.0.1:6379>
返回指定key的剩余过期时间, 以秒为单位。
语法:
>ttl key_name
返回:
key不存在时, 返回-2; key存在但没有设置过期时间, 返回-1; 否则以秒为单位返回key的剩余时长
实例:
- // 不存在的key
- 127.0.0.1:6379> ttl key
- (integer) -2
-
- // key存在, 未设置过期时间
- 127.0.0.1:6379> set key1 1
- OK
- 127.0.0.1:6379> ttl key1
- (integer) -1
-
- 127.0.0.1:6379> expire key1 60
- (integer) 1
- 127.0.0.1:6379> ttl key1
- (integer) 58
返回指定key的剩余过期时间, 以毫秒为单位。
语法:
>pttl key_name
返回:
key不存在时, 返回-2; key存在但没有设置过期时间, 返回-1; 否则以毫秒为单位返回key的剩余时长
实例:
- // 不存在的key
- 127.0.0.1:6379> pttl key
- (integer) -2
-
- // key存在, 未设置过期时间
- 127.0.0.1:6379> set key1 1
- OK
- 127.0.0.1:6379> pttl key1
- (integer) -1
-
- 127.0.0.1:6379> expire key1 60
- (integer) 1
- 127.0.0.1:6379> pttl key1
- (integer) 56951
移除指定key的剩余过期时间, 使key永不过期。
语法:
>persist key_name
返回:
移除成功, 返回1; key不存在, 或没有设置过期时间, 返回0
实例:
- // key不存在
- 127.0.0.1:6379> persist key
- (integer) 0
-
- // 设置key1的值为value1, 60s过期
- 127.0.0.1:6379> setex key1 60 value1
- OK
- 127.0.0.1:6379> ttl key1
- (integer) 47
- 127.0.0.1:6379> persist key1 # 移除过期时间
- (integer) 1
查询所有符合给定模式的key。
语法:
>keys pattern
实例:
- // 准备几条数据
- 127.0.0.1:6379> set key1 1
- OK
- 127.0.0.1:6379> set key2 2
- OK
- 127.0.0.1:6379> set key3 3
- OK
-
- // 查找以 key开头的所有键
- 127.0.0.1:6379> keys key*
- 1) "key1"
- 2) "key2"
- 3) "key3"
将key移动到指定的库
语法:
>move key_name database
实例:
- 127.0.0.1:6379> select 1 #redis默认db为0, 为了清晰, 这里指定数据库为1
- OK
- 127.0.0.1:6379[1]> set key1 1
- OK
- 127.0.0.1:6379[1]> move key1 2 #key1移动到db2
- (integer) 1
- 127.0.0.1:6379[1]> exists key1
- (integer) 0
-
- # 在db2查看移动结果
- 127.0.0.1:6379[1]> select 2
- OK
- 127.0.0.1:6379[2]> exists key1
- (integer) 1
将key重命名
语法:
>rename key_name new_name
返回:
修改成功,返回OK; 失败时, 返回错误。
当old_key_name == new_key_name 或 old_key_name不存在时, 返回错误。new_key_name已存在时, 覆盖旧值
实例:
- 127.0.0.1:6379> rename mess_key mess_key1 # key不存在
- (error) ERR no such key
-
- // 写入数据
- 127.0.0.1:6379> set mess1 "hello"
- OK
- 127.0.0.1:6379> rename mess1 mess # 重命名mess1 为mess
- OK
-
- 127.0.0.1:6379> set mess2 "hi"
- OK
- 127.0.0.1:6379> rename mess2 mess # mess存在, mess的值覆盖为原mess2的值
- OK
- 127.0.0.1:6379> get mess
- "hi"
- 127.0.0.1:6379> get mess2
- (nil)

重命名key, 要求新键名不存在
语法:
>renamenx key_name new_name
实例:
- 127.0.0.1:6379> renamenx test1 test #key不存在
- (error) ERR no such key
-
- 127.0.0.1:6379> set test1 1
- OK
- 127.0.0.1:6379> renamenx test1 test #重命名为test, 并且new_key不存在
- (integer) 1
- 127.0.0.1:6379> set test2 2
- OK
- 127.0.0.1:6379> renamenx test2 test #重命名为test, new_key已存在
- (integer) 0
- 127.0.0.1:6379>
返回key所存储值的类型
语法:
>key key_name
返回:
none, string, list, set, zset, hash
>command key_name
用于字符串相关存取
设置键key0314 的值为 test, 再获取, 查看设置结果
>set key0314 test
以上实例, 使用了set 和 get命令, 键名 key0314
设置指定key的值
语法:
>set key value
实例:
- 127.0.0.1:6379> set key0314 test
- OK
获取指定key的值
语法:
>get key
实例:
- 127.0.0.1:6379> get key0314
- "test"
获取key的子字符串, 截取范围由start 和 end决定
语法:
>Getrange key start end
实例:
- 127.0.0.1:6379> set key0314 "this is my world"
- OK
- 127.0.0.1:6379> getrange key0314 0 3
- "this"
- 127.0.0.1:6379> getrange key0314 0 -1
- "this is my world"
- 127.0.0.1:6379> getrange key0314 4 -1
- " is my world"
- 127.0.0.1:6379>
设置key的值, 并返回key的旧值
语法:
>GetSet key_name value
返回:
当key没有旧值, 即key不存在时, 返回 nil
实例:
- 127.0.0.1:6379> getset db mongodb
- (nil)
- 127.0.0.1:6379> getset db mysql
- "mongodb"
- 127.0.0.1:6379>
对key所存储的字符串值, 获取指定偏移量上的位(bit)
语法:
>getBit key_name offset
返回值:
字符串值指定偏移量上的位。
当偏移量offset比字符串长, 或key不存在时, 返回0
实例:
- // 获取偏移量比字符串长, 或key不存在
- 127.0.0.1:6379> getBit db 50
- (integer) 0
- 127.0.0.1:6379> getbit db_1 10
- (integer) 0
-
- // 对已存在offset 进行getbit
- 127.0.0.1:6379> setbit bit 10086 1
- (integer) 0
- 127.0.0.1:6379> getbit bit 10086
- (integer) 1
- 127.0.0.1:6379>
获取所有(一个/多个)给的key的值
语法:
>Mget key1 [key2...]
实例:
- 127.0.0.1:6379> set key1 hello
- OK
- 127.0.0.1:6379> set key2 hi
- OK
- 127.0.0.1:6379> set key3 sedo
- OK
- 127.0.0.1:6379> mget key1
- 1) "hello"
- 127.0.0.1:6379> mget key1 key2 key3
- 1) "hello"
- 2) "hi"
- 3) "sedo"
- 127.0.0.1:6379>
对key所存储的字符串值, 设置或清除指定偏移量上的位(bit)
语法:
>setBit key_name offset
返回值:
指定偏移量原来存储的位
实例:
- 127.0.0.1:6379> setbit bit 10001 1
- (integer) 0
- 127.0.0.1:6379> getbit bit 10001
- (integer) 1
- 127.0.0.1:6379>
-
- // bit 被默认初始化为0
- 127.0.0.1:6379> getbit bit 100
- (integer) 0
- 127.0.0.1:6379>
为指定的key设置值及过期时间。如果key存在,会替换值
语法:
>setex key_name seconds value
返回值:
设置成功时返回OK
实例:
- // 设置keyTest 值为1, 60s后过期
- 127.0.0.1:6379> setex keyTest 60 1
- OK
-
- // 返回剩余时间
- 127.0.0.1:6379> ttl keyTest
- (integer) 52
- 127.0.0.1:6379> get keyTest
- "1"
- 127.0.0.1:6379>
与setex类似, 生存时间以毫秒计算
语法:
>setex key_name millSeconds value
返回值:
设置成功时返回OK
实例:
- // 设置ex_key 值为hello, 60000ms(60s)后过期
- 127.0.0.1:6379> psetex ex_key 60000 hello
- OK
-
- // 返回剩余时间
- 127.0.0.1:6379> pttl ex_key
- (integer) 57560
key不存在时, 设置key的值
语法:
>setnx key_name value
返回值:
设置成功时返回1, 失败返回0
实例:
- 127.0.0.1:6379> keys key*
- (empty list or set)
- 127.0.0.1:6379> setnx key1 1 # key1不存在, 设置key1=1
- (integer) 1
- 127.0.0.1:6379> setnx key1 2 #再次设置 key1=2
- (integer) 0
- 127.0.0.1:6379> get key1 #获取key1
- "1"
用字符串覆盖指定key所存储的字符串的值, 覆盖位置从偏移量开始
语法:
>setrange key_name offset value
返回值:
被修改后字符串的值
实例:
- 127.0.0.1:6379> set key1 123456789 #准备字符串
- OK
- 127.0.0.1:6379> setrange key1 4 abcde #从第四位开始覆盖
- (integer) 9
- 127.0.0.1:6379> get key1
- "1234abcde"
获取key存储字符串的长度
语法:
>strlen key
实例:
- 127.0.0.1:6379> set key1 123456789 #准备字符串
- OK
- 127.0.0.1:6379> strlen key1
- (integer) 9
将字符串追加到指定key的末尾
1.key存在, 追加到原来值的末尾
2.不存在, 设置key的值
语法:
>append key str
返回:
追加过后, key的长度
实例:
- 127.0.0.1:6379> set key1 123456 #准备字符串
- OK
- 127.0.0.1:6379> append key1 abcde #追加到key1 末尾
- (integer) 11
- 127.0.0.1:6379> get key1
- "123456abcde"
-
- 127.0.0.1:6379> append key abcdef #追加到不存在的key末尾
- (integer) 6
设置一组或多组key-value
语法:
>mset key value [key value...]
实例:
- 127.0.0.1:6379> mset key1 1 key2 2 key3 3
- OK
- 127.0.0.1:6379> mset key4 4
- OK
所有给的的key不存在时, 设置一组或多组key-value
语法:
>msetnx key value [key value...]
返回值:
所有key-value设置成功, 返回1; 否则, 返回0
实例:
- 127.0.0.1:6379[1]> mset key1 1 key2 2 key3 3 #设置一些键值对
- OK
- 127.0.0.1:6379[1]> msetnx key3 test3 key4 test4 #key3已存在, 操作失败
- (integer) 0
- 127.0.0.1:6379[1]> exists key4
- (integer) 0
- 127.0.0.1:6379[1]> get key3
- "3"
注:msetnx是一个原子性操作, 要么设置成功, 要么都不设置.
将key中存储的数值+1
1.key不存在, 则初始值为0, 再进行incr
2.值包含错误的类型, 或字符串类型的值不能表示为数字, 返回错误
语法:
>incr key_name
返回值:
执行incr后的值
实例:
- 127.0.0.1:6379> incr age
- (integer) 1
- 127.0.0.1:6379> incr age
- (integer) 2
同incr, 将key中存储的数值, 加上指定增加量
语法:
>incrby key_name incr_num
返回值:
执行命令后, key的值
实例:
- 127.0.0.1:6379> incrby age 18
- (integer) 18
- 127.0.0.1:6379> incrby age 2
- (integer) 20
同inrby, 增加量可以是浮点数
语法:
>incrbyfloat key_name float
返回值:
执行命令后, key的值
实例:
- 127.0.0.1:6379> set price 5.5
- OK
- 127.0.0.1:6379> get price
- "5.5"
- 127.0.0.1:6379> incrbyfloat price 2.58
- "8.08"
将key中存储的数值-1
1.key不存在, 则初始值为0, 再进行decr
2.值包含错误的类型, 或字符串类型的值不能表示为数字, 返回错误
语法:
>decr key_name
返回值:
执行decr后的值
实例:
- 127.0.0.1:6379> decr num
- (integer) -1
-
- 127.0.0.1:6379> set num 20
- OK
- 127.0.0.1:6379> decr num
- (integer) 19
同decr, 将key中存储的数值, 减去指定数值
语法:
>decrby key_name decr_num
返回值:
执行命令后, key的值
实例:
- 127.0.0.1:6379> decrby init 5 #初始值-5
- (integer) -5
- 127.0.0.1:6379> decrby init 2
- (integer) -7
- 127.0.0.1:6379> decrby init -2 #减去负值
- (integer) -5
redis hash是字段与值的键值对映射表, 适合于存储对象
- 127.0.0.1:6379> hmset student name "amber" age "18" sex "male" desc "this is just a ordinary people."
- OK
- 127.0.0.1:6379> hgetall student
- 1) "name"
- 2) "amber"
- 3) "age"
- 4) "18"
- 5) "sex"
- 6) "male"
- 7) "desc"
- 8) "this is just a ordinary people."
- 127.0.0.1:6379> hmget student name
- "amber"
设置student各属性值, 并获取
将多对field-value(字段-值)设置到指定的哈希表
哈希表存在, 覆盖; 不存在, 创建空的哈希表, 在执行hmset
语法:
>hmset key_name field1 value1 [field2 value2....]
返回值:
命令执行成功, 返回OK
为指定哈希表中字段进行赋值.
语法:
>hset key_name field value
返回值:
field是新字段, 并赋值成功, 返回1;
field存在, 覆盖成功, 返回0
实例:
- 127.0.0.1:6379> hset student like "game" #新field
- (integer) 1
- 127.0.0.1:6379> hset student like "box-game" #已存在的field
- (integer) 0
只有在field不存在时, 为指定哈希表中字段进行赋值.
语法:
>hsetnx key_name field value
返回值:
设置成功, 返回1; 字段已存在且没有被执行, 返回0
实例:
- 127.0.0.1:6379> hsetnx student grade 1 #设置年级为 1年级
- (integer) 1
- 127.0.0.1:6379> hsetnx student grade 2 #再次设置
- (integer) 0
- 127.0.0.1:6379> hget student grade
- "1"
删除指定哈希表中的字段.
语法:
>hdel key_name field1 [field2 field3...]
返回值:
被删除字段的数量, 不包括被忽略的字段
实例:
- 127.0.0.1:6379> hset student class a
- (integer) 1
- 127.0.0.1:6379> hdel student class
- (integer) 1
- 127.0.0.1:6379> hdel student class
- (integer) 0
判断指定哈希表中某字段是否存在.
语法:
>hexists key_name field
返回值:
存在返回1, 不存在返回0
实例:
- 127.0.0.1:6379> hexists student class
- (integer) 0
- 127.0.0.1:6379> hexists student grade
- (integer) 1
返回指定哈希表的所有字段和值
语法:
>hgetall key_name
返回值:
紧跟每个字段名之后的是字段的值
指定哈希表, 返回所有字段和值
语法:
>hget key_name field
指定哈希表, 返回所有给定字段的值
语法:
>hmget key_name field1 field2...
指定哈希表, 返回所有字段
语法:
>hkeys key_name
指定哈希表, 返回字段的数量
语法:
>hlen key_name
指定哈希表, 返回所有值
语法:
>hvals key_name
指定哈希表, 将给定字段的整数值加上增量
语法:
>hincrby key_name field incr_num
指定哈希表, 将给定字段的浮点数值加上增量
语法:
>hincrbyfloat key_name field incr_float
redis 列表是简单的字符串列表, 按照插入的顺序排序。可以添加一个元素到列表的头部(左边)或尾部(右边)。
- 127.0.0.1:6379> lpush my_key redis // 头部插入
- (integer) 1
- 127.0.0.1:6379> rpush my_key mongodb // 尾部插入
- (integer) 2
- 127.0.0.1:6379> rpush my_key mysql // 尾部插入
- (integer) 3
- 127.0.0.1:6379> lrange my_key 0 -1 // 查询列表0 -1范围的元素
- 1) "redis"
- 2) "mongodb"
- 3) "mysql"
- 127.0.0.1:6379>
从头部移除并获取列表第一个元素, 若列表没有元素会阻塞直到超时或发现元素为止
语法:
>BLPop key1 [key2] timeout
返回值:
列表为空, 返回nil。 否则, 返回一个含有两个元素的列表, 第一个元素是弹出元素的key, 第二个元素是弹出元素的值。
实例:
- 127.0.0.1:6379> BLPop my_key 60 // 移除并弹出第一个元素, 阻塞60s
- 1) "my_key"
- 2) "redis"
- 127.0.0.1:6379> lrange my_key 0 -1 // 再次查看列表
- 1) "mongodb"
- 2) "mysql"
-
- 127.0.0.1:6379> BLPop lastest 10 // 空列表移除并弹出第一个元素, 等待10s
- (nil)
- (10.03s)
从尾部移除并获取列表第一个元素, 若列表没有元素会阻塞直到超时或发现元素为止
语法:
>BRPop key1 [key2] timeout
从列表尾部取出第一个元素, 并插入到另一个列表的头部, 若列表没有元素会阻塞直到超时或发现可弹出元素为止
语法:
>BRPopLPush sourceKey targetKey timeout
实例:
- 127.0.0.1:6379> lrange my_key 0 -1
- 1) "mongodb"
- 2) "mysql"
- 127.0.0.1:6379> BRPopLPush my_key list 10
- "mysql"
- 127.0.0.1:6379> lrange my_key 0 -1
- 1) "mongodb"
- 127.0.0.1:6379> lrange list 0 -1
- 1) "mysql"
- 127.0.0.1:6379>
获取列表的长度。
语法:
>LLen key_name
返回值:
返回列表的长度。列表不存在, 则key被解释为一个空列表, 返回0; 若key不是列表类型,返回一个错误
返回列表指定区间内的元素。区间由偏移量start/end指定, 0表示第一个元素。若使用负数下标, -1表示列表最后一个元素
语法:
>LRange key_name start end
实例:
- 127.0.0.1:6379> lpush listDemo2 1 2 3 4 5 6
- (integer) 6
- 127.0.0.1:6379> lrange listDemo2 0 3
- 1) "6"
- 2) "5"
- 3) "4"
- 4) "3"
-
# 顺序问题参考 lpush 实例说明
根据参数count, 移除列表中与value相等的元素。
语法:
- >LRem key_name count value
-
- count > 0 : 从头部开始, 移除与value相等的元素, 数量为count
- count < 0 : 从尾部开始, 移除与value相等的元素, 数量为count的绝对值
- count = 0 : 移除列表中与value相等的值
实例:
- 127.0.0.1:6379> lrange listDemo2 0 -1 // 准备的数据
- 1) "3"
- 2) "2"
- 3) "1"
- 4) "6"
- 5) "5"
- 6) "4"
- 7) "3"
- 8) "2"
- 9) "1"
-
- 127.0.0.1:6379> lrem listDemo2 1 3 // 从头部开始, 删除1个3
- (integer) 1
- 127.0.0.1:6379> lrange listDemo2 0 -1 // 查看结果
- 1) "2"
- 2) "1"
- 3) "6"
- 4) "5"
- 5) "4"
- 6) "3"
- 7) "2"
- 8) "1"
-
- 127.0.0.1:6379> lrem listDemo2 -2 1 // 从尾部开始, 删除2个1
- (integer) 2
- 127.0.0.1:6379> lrange listDemo2 0 -1 // 结果
- 1) "2"
- 2) "6"
- 3) "5"
- 4) "4"
- 5) "3"
- 6) "2"
-
- 127.0.0.1:6379> lrem listDemo2 0 2 // 删除全部与2相等的元素
- (integer) 2
- 127.0.0.1:6379> lrange listDemo2 0 -1
- 1) "6"
- 2) "5"
- 3) "4"
- 4) "3"

对一个列表进行修剪trim, 只保留指定区间内的元素。
语法:
>LTrim key_name start end
返回值:
命令执行成功返回OK
实例:
- 127.0.0.1:6379> rpush list 1 2 3 4 5 // 准备数据
- (integer) 5
- 127.0.0.1:6379> lrange list 0 -1
- 1) "1"
- 2) "2"
- 3) "3"
- 4) "4"
- 5) "5
- 127.0.0.1:6379> ltrim list 1 3 // 保留index 1~3, index是从0开始
- OK
- 127.0.0.1:6379> lrange list 0 -1
- 1) "2"
- 2) "3"
- 3) "4"
- 127.0.0.1:6379>
通过索引获取列表中的元素。
语法:
>LIndex key_name index
返回值:
列表下标为指定索引的元素。指定index不在列表区间范围内, 返回nil
实例:
- 127.0.0.1:6379> lrange list 0 -1
- 1) "2"
- 2) "3"
- 3) "4"
- 127.0.0.1:6379> lindex list 0
- "2"
通过索引设置元素。
语法:
>LSet key_name index value
返回值:
成功返回OK, 否则返回错误信息
实例:
- 127.0.0.1:6379> lrange list 0 -1 // 准备的数据
- 1) "2"
- 2) "3"
- 3) "4"
- 127.0.0.1:6379> lset list 1 6 // 设置index=1的元素为6
- OK
- 127.0.0.1:6379> lrange list 0 -1
- 1) "2"
- 2) "6"
- 3) "4"
将元素插入到列表指定元素前|后。
语法:
- >LInsert key_name BEFORE|AFTER pivot value
-
- 将value插入到pivot前|后
返回值:
成功返回操作后列表的长度。没有找到指定元素, 返回-1;key不存在或为空列表, 返回0
实例:
- 127.0.0.1:6379> del list
-
- (integer) 1
-
- 127.0.0.1:6379> linsert list before a 1 // key不存在时插入
-
- (integer) 0
-
- 127.0.0.1:6379> rpush list a b c d e // 准备数据
- (integer) 5
- 127.0.0.1:6379> lrange list 0 -1
- 1) "a"
- 2) "b"
- 3) "c"
- 4) "d"
- 5) "e"
- 127.0.0.1:6379> linsert list before f 1 // 在f前面插入1, 元素f不存在
- (integer) -1
- 127.0.0.1:6379> linsert list before a 1 // 在a前面插入1
- (integer) 6
- 127.0.0.1:6379> lrange list 0 -1
- 1) "1"
- 2) "a"
- 3) "b"
- 4) "c"
- 5) "d"
- 6) "e"
- 127.0.0.1:6379> linsert list after c 2 // 在c后面插入2
- (integer) 7
- 127.0.0.1:6379> lrange list 0 -1
- 1) "1"
- 2) "a"
- 3) "b"
- 4) "c"
- 5) "2"
- 6) "d"
- 7) "e"
- 127.0.0.1:6379>

从列表头部, 移除并返回列表的第一个元素。
语法:
>LPop key_name
返回值:
列表的第一个元素。当列表key不存在时, 返回nil
实例:
- 127.0.0.1:6379> del list
- (integer) 1
- 127.0.0.1:6379> lpop list // key不存在
- (nil)
- 127.0.0.1:6379> rpush list 1 2 3 4
- (integer) 4
- 127.0.0.1:6379> lpop list // 移除并返回第一个元素
- "1"
- 127.0.0.1:6379> lrange list 0 -1 // 列表剩余元素
- 1) "2"
- 2) "3"
- 3) "4"
- 127.0.0.1:6379>
将一个或多个值插入到列表头部。 key不存在, 会创建一个空列表并执行LPush操作; key存在但不是列表类型时, 返回一个错误
注意: 在Redis2.4版本前, 只接受单个value值
语法:
>LPush key_name value1 [value2]
返回值:
执行命令后, 列表的长度
实例:
- 127.0.0.1:6379> lpush listDemo redis mongo mysql
- (integer) 3
- 127.0.0.1:6379> lrange listDemo 0 -1
- 1) "mysql"
- 2) "mongo"
- 3) "redis"
注意: 每次都是将元素依次插入到列表的头部, 导致整体顺序与输入顺序相反
将一个值插入到已存在的列表头部, 列表不存在时操作无效
语法:
>LPushX key_name value
返回值:
执行命令后, 列表的长度
实例:
- 127.0.0.1:6379> exists listDemo1 // listDemo1不存在
- (integer) 0
- 127.0.0.1:6379> lpushx listDemo1 math // 往不存在的列表插入
- (integer) 0
- 127.0.0.1:6379> lpushx listDemo oracle // 往已存在的列表插入
- (integer) 4
- 127.0.0.1:6379>
从列表尾部, 移除并返回列表的第一个元素。
语法:
>RPop key_name
从列表尾部取出第一个元素, 并插入到另一个列表的头部
语法:
>RPopLPush sourceKey targetKey
返回值:
被弹出的元素
将一个或多个值插入到列表尾部。 key不存在, 会创建一个空列表并执行RPush操作; key存在但不是列表类型时, 返回一个错误
注意: 在Redis2.4版本前, 只接受单个value值
语法:
>RPush key_name value1 [value2]
返回值:
执行命令后, 列表的长度
将一个值插入到已存在的列表尾部, 列表不存在时操作无效
语法:
>RPushX key_name value
Redis的集合是String类型的无序集合, 集合成员是唯一的。
sadd命令向集合set添加元素 redis、mysql、mongodb
- 127.0.0.1:6379> sadd set redis
- (integer) 1
- 127.0.0.1:6379> sadd set mysql
- (integer) 1
- 127.0.0.1:6379> sadd set mongodb
- (integer) 1
- 127.0.0.1:6379> smembers set
- 1) "mysql"
- 2) "redis"
- 3) "mongodb"
- 127.0.0.1:6379>
将一个或多个元素添加到集合中, 忽略已存在的元素。
集合不存在, 则会创建集合并添加;
key不是集合类型时, 返回一个错误
注意: Redis版本<2.4, 只接受单个元素添加
语法:
>sadd key_name value1...valueN
返回值:
被添加到集合中新元素的数量, 不包括被忽略的元素。
实例:
- 127.0.0.1:6379> del set
- (integer) 1
- 127.0.0.1:6379> sadd set a b c d
- (integer) 4
- 127.0.0.1:6379> sadd set a b e // 忽略重复元素a、b
- (integer) 1
- 127.0.0.1:6379>
获取集合元素数量
语法:
>scard key_name
返回值:
集合元素的数量,key不存在时, 返回0。
返回第一个集合与其他集合之间的差异。可以认定为,第一个集合中独有的元素
语法:
>sdiff set1 set2...setN
返回值:
包含差集元素的列表。
实例:
- 127.0.0.1:6379> sadd set1 a b c d e 1 2 3
- (integer) 5
- 127.0.0.1:6379> sadd set2 a b c
- (integer) 3
- 127.0.0.1:6379> sadd set3 b d f
- (integer) 3
- 127.0.0.1:6379> sdiff set1 set2 set3
- 1) "3"
- 2) "2"
- 3) "1"
- 4) "e"
返回给定所有集合的差集并存储到指定集合中。若指定key已存在,则会被覆盖。
语法:
>sdiffstore key_name set1 set2...setN
返回值:
包含差集元素的列表。
实例:
- 127.0.0.1:6379> sadd set1 a b c d e
- (integer) 5
- 127.0.0.1:6379> sadd set2 a b c
- (integer) 3
- 127.0.0.1:6379> smembers set
- (empty list or set)
- 127.0.0.1:6379> sdiffstore set set1 set2 // set1与set2差集, 存入set
- (integer) 2
- 127.0.0.1:6379> smembers set
- 1) "d"
- 2) "e"
-
-
- // 将差集存入的key非集合
- 127.0.0.1:6379> lrange list 0 -1
- 1) "2"
- 2) "3"
- 3) "4"
- 127.0.0.1:6379> sdiffstore list set1 set2
- (integer) 2
- 127.0.0.1:6379> smembers list // list类型的key被覆盖成set类型
- 1) "d"
- 2) "e"

返回给定所有集合的交集。
语法:
>sinter set1 set2...setN
返回值:
交集元素的列表。
实例:
- 127.0.0.1:6379> sadd set1 a b c d e
- (integer) 5
- 127.0.0.1:6379> sadd set2 a b c
- (integer) 3
- 127.0.0.1:6379> sadd set3 b d f
- (integer) 3
- 127.0.0.1:6379> sinter set1 set2 set3
- 1) "b"
返回给定所有集合的交集并存储到指定集合中。指定key已存在, 则覆盖
语法:
>sinterstore key_name set1 set2...setN
返回值:
交集元素的列表。
实例:
- 127.0.0.1:6379> sadd set1 a b c d e
- (integer) 5
- 127.0.0.1:6379> sadd set2 a b c
- (integer) 3
- 127.0.0.1:6379> sadd set3 b d f
- (integer) 3
- 127.0.0.1:6379> sinterstore interSet set1 set2 set3 // 交集存储到interSet
- (integer) 1
- 127.0.0.1:6379> smembers interSet
- 1) "b"
判断元素是否集合的成员。
语法:
>SIsMember key_name value
返回值:
是集合的成员, 返回1; 非集合成员, 或key不存在, 返回0。
实例:
- 127.0.0.1:6379> del set1
- (integer) 1
- 127.0.0.1:6379> sismember set1 a // key不存在
- (integer) 0
- 127.0.0.1:6379> sadd set1 a b c d e
- (integer) 5
- 127.0.0.1:6379> sismember set1 a
- (integer) 1
返回集合中的所有成员。不存在的集合key, 视为空集合
语法:
>smembers key_name
将元素从一个集合移动到另一个集合。
将member从集合source移动到集合target, smove是原子性操作
1.若source集合不存在或不包含指定的member元素, 则smove命令不执行, 返回0; 否则, member从source中删除, 并添加到target集合
2.若target集合已包含member元素时, smove只会将member从source集合中删除
3.若source或target不是集合类型时, 返回一个错误
语法:
>smove source target member
返回值:
member元素碑成功移动, 返回1; member不是source的成员, 并且没有操作对target集合执行, 返回0。
实例:
- 127.0.0.1:6379> sadd set1 a b c d e
- (integer) 5
- 127.0.0.1:6379> sadd set2 a b c
- (integer) 3
- 127.0.0.1:6379> smove set1 set2 e // 元素e从set1移动到set2
- (integer) 1
- 127.0.0.1:6379> smove set1 set2 b // 元素b从set1移动到set2
- (integer) 1
- 127.0.0.1:6379> smembers set1
- 1) "a"
- 2) "c"
- 3) "d"
- 127.0.0.1:6379> smembers set2
- 1) "a"
- 2) "c"
- 3) "e"
- 4) "b"

移除并返回集合中的一个或多个随机元素。
语法:
>spop key_name [count]
注意: count参数在3.2+可用
返回值:
被移除的随机元素。 集合不存在或为空时, 返回nil。
实例:
- 127.0.0.1:6379> sadd set1 a b c d e f
- (integer) 6
- 127.0.0.1:6379> spop set1
- "c"
- 127.0.0.1:6379> spop set1 2
- (error) ERR wrong number of arguments for 'spop' command
这里我的redis版本是3.0 所以指定返回2两个元素报错.
>redis-cli --version // 查看版本
返回集合中一个或多个随机数。
1.count > 0, 并 count <= 集合的size, 则返回一个包含count个元素的数组, 且元素各不相同;若count > size, 则返回整个集合
2.count < 0, 返回一个数组, size是count的绝对值, 数组中元素会出现多次
注: 与SPop操作相似, 但SRandMember不会将元素从集合中移除
语法:
>SRandMember key_name [count]
注意: count参数在2.6+可用
返回值:
实例:
- 127.0.0.1:6379> sadd my_set a b c d e f
- (integer) 6
- 127.0.0.1:6379> SRandMember my_set
- "a"
- 127.0.0.1:6379> SRandMember my_set 2
- 1) "a"
- 2) "e"
移除集合中一个或多个成员,不存在的成员元素会被忽略
语法:
>SRem key_name member1...member
注意: 2.4之前, 只接受单个成员值
返回值:
被移除元素的数量。不包括被忽略的成员
实例:
- 127.0.0.1:6379> sadd set_demo a b c d e f
- (integer) 6
- 127.0.0.1:6379> srem set_demo a z // 成员z不存在
- (integer) 1
- 127.0.0.1:6379> srem set_demo b c d
- (integer) 3
获取给定集合的并集。不存在的集合key视为空集合
语法:
>SUnion key1...keyN
返回值:
并集成员的列表。
实例:
- 127.0.0.1:6379> sadd set1 a b c d
- (integer) 4
- 127.0.0.1:6379> sadd set2 b d f
- (integer) 3
- 127.0.0.1:6379> sunion set1 set2 // set1 set2并集
- 1) "c"
- 2) "d"
- 3) "f"
- 4) "b"
- 5) "a"
获取给定集合的并集并存储到指定集合中。若指定的集合已存在, 则覆盖
语法:
>SUnionStore key_name key1...keyN
返回值:
结果集中的元素数量。
实例:
- 127.0.0.1:6379> sadd set1 a b c d
- (integer) 4
- 127.0.0.1:6379> sadd set2 b d f
- (integer) 3
- 127.0.0.1:6379> sunionstore result set1 set2 // 并集存入result中
- (integer) 5
- 127.0.0.1:6379> smembers result
- 1) "c"
- 2) "d"
- 3) "f"
- 4) "b"
- 5) "a"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。