Redis基础-笔记

启动服务

进入redis安装目录, 启动redis-server.exe

命令启动redis服务

方式1.

命令行进入redis安装目录, 这里我是通过phpstudy安装的redis

 通过命令, 启动服务

redis-server redis.windows.conf

方式2.

  1. 命令行进入redis安装目录
  2. 注册redis服务
redis-server --service-install redis.windows.conf --loglevel verbose

win+R 输入services.msc查看注册结果, 找到redis服务

  1. 启动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数据类型

        Redis支持五种数据类型: stirng(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合 sorted set)

String(字符串)

        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"

Hash(哈希)

        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"

List(列表)

        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"

Set(集合)

        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"

ZSet(有序集合)

        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"

Redis键

语法

>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>

基本命令

Del

        删除指定key

语法:

>del key_name

返回: 

        被删除key的数量

实例: 

127.0.0.1:6379> del key1 #删除键key1
(integer) 1

Dump

        序列化指定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>

Exists

        检查指定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>

Expire

        设置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>

ExpireAt

        设置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>

PExpire

        以毫秒为单位设置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>

PExpireAt

        设置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>

TTL key

        返回指定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

PTTL key

        返回指定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

Persist

        移除指定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

Keys pattern

        查询所有符合给定模式的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"

Move key db

        将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

ReName

        将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)

ReNameNx

        重命名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>

Type

        返回key所存储值的类型

语法:

>key key_name

返回:

none,  string,  list,  set,  zset,  hash

Redis字符串

语法

>command key_name

用于字符串相关存取

实例

设置键key0314 的值为 test, 再获取, 查看设置结果

>set key0314 test

以上实例, 使用了set 和 get命令, 键名 key0314

常用命令

Set

        设置指定key的值

语法:

>set key value

实例: 

127.0.0.1:6379> set key0314 test
OK

Get

        获取指定key的值

语法:

>get key

实例:
 

127.0.0.1:6379> get key0314
"test"

GetRange

        获取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>

GetSet

        设置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>

GetBit

        对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>

Mget

        获取所有(一个/多个)给的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>

SetBit

        对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>

SetEx

        为指定的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>

PSetEx

        与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

SetNx

        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"

SetRange

        用字符串覆盖指定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"

Strlen

        获取key存储字符串的长度

语法:

>strlen key

实例:

127.0.0.1:6379> set key1 123456789 #准备字符串
OK
127.0.0.1:6379> strlen key1
(integer) 9

Append

        将字符串追加到指定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

MSet

        设置一组或多组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

MSetNx

        所有给的的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是一个原子性操作, 要么设置成功, 要么都不设置.

Incr

        将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

IncrBy

        同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

IncrByFloat

        同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"

Decr

        将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

DecrBy

        同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哈希

        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各属性值, 并获取

常用命令

HMset

        将多对field-value(字段-值)设置到指定的哈希表

哈希表存在, 覆盖; 不存在, 创建空的哈希表, 在执行hmset

语法:

>hmset key_name field1 value1 [field2 value2....]

返回值:

        命令执行成功, 返回OK

Hset

        为指定哈希表中字段进行赋值.

语法:

>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

HsetNx

        只有在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

        删除指定哈希表中的字段.

语法:

>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

        判断指定哈希表中某字段是否存在.

语法:

>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

        返回指定哈希表的所有字段和值

语法:

>hgetall key_name

返回值:

        紧跟每个字段名之后的是字段的值

HGet

        指定哈希表, 返回所有字段和值

语法:

>hget key_name field

HMGet

        指定哈希表, 返回所有给定字段的值

语法:

>hmget key_name field1 field2...

HKeys

        指定哈希表, 返回所有字段

语法:

>hkeys key_name

HLen

        指定哈希表, 返回字段的数量

语法:

>hlen key_name

HVals

        指定哈希表, 返回所有值

语法:

>hvals key_name

HIncrBy

        指定哈希表, 将给定字段的整数值加上增量

语法:

>hincrby key_name field incr_num

HIncrByFloat

        指定哈希表, 将给定字段的浮点数值加上增量

语法:

>hincrbyfloat key_name field incr_float

Redis列表

        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

        从头部移除并获取列表第一个元素, 若列表没有元素会阻塞直到超时或发现元素为止

语法:

>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

        从尾部移除并获取列表第一个元素, 若列表没有元素会阻塞直到超时或发现元素为止

语法:

>BRPop key1 [key2] timeout

BRPopLPush

        从列表尾部取出第一个元素, 并插入到另一个列表的头部, 若列表没有元素会阻塞直到超时或发现可弹出元素为止

语法:

>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

        获取列表的长度。

语法:

>LLen key_name

返回值:

        返回列表的长度。列表不存在, 则key被解释为一个空列表, 返回0; 若key不是列表类型,返回一个错误

LRange

        返回列表指定区间内的元素。区间由偏移量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 实例说明

LRem

        根据参数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"

LTrim

        对一个列表进行修剪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

        通过索引获取列表中的元素。

语法:

>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

        通过索引设置元素。

语法:

>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

        将元素插入到列表指定元素前|后。

语法:

>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

        从列表头部, 移除并返回列表的第一个元素。

语法:

>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>

LPush

        将一个或多个值插入到列表头部。 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

        将一个值插入到已存在的列表头部, 列表不存在时操作无效

语法:

>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

        从列表尾部, 移除并返回列表的第一个元素。

语法:

>RPop key_name

RPopLPush

        从列表尾部取出第一个元素, 并插入到另一个列表的头部

语法:

>RPopLPush sourceKey targetKey

返回值:

        被弹出的元素

RPush

        将一个或多个值插入到列表尾部。 key不存在, 会创建一个空列表并执行RPush操作; key存在但不是列表类型时, 返回一个错误

注意: 在Redis2.4版本前, 只接受单个value值

语法:

>RPush key_name value1 [value2]

返回值:

        执行命令后, 列表的长度

RPushX

        将一个值插入到已存在的列表尾部, 列表不存在时操作无效

语法:

>RPushX key_name value

Redis集合

        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>

常用命令

SAdd

        将一个或多个元素添加到集合中, 忽略已存在的元素。

集合不存在, 则会创建集合并添加;

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

        获取集合元素数量

语法:

>scard key_name

返回值:

        集合元素的数量,key不存在时, 返回0。

SDiff

        返回第一个集合与其他集合之间的差异。可以认定为,第一个集合中独有的元素

语法:

>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"

SDiffStore

        返回给定所有集合的差集并存储到指定集合中。若指定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

        返回给定所有集合的交集。

语法:

>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"

SInterStore

        返回给定所有集合的交集并存储到指定集合中。指定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

        判断元素是否集合的成员。

语法:

>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

SMembers

        返回集合中的所有成员。不存在的集合key, 视为空集合

语法:

>smembers key_name

SMove

        将元素从一个集合移动到另一个集合。

将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

        移除并返回集合中的一个或多个随机元素。

语法:

>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         // 查看版本

SRandMember

        返回集合中一个或多个随机数。

1.count > 0, 并 count <= 集合的size, 则返回一个包含count个元素的数组, 且元素各不相同;若count > size, 则返回整个集合

2.count < 0, 返回一个数组, size是count的绝对值, 数组中元素会出现多次

注: 与SPop操作相似, 但SRandMember不会将元素从集合中移除

语法:

>SRandMember key_name [count]

注意: count参数在2.6+可用

返回值:

  1. 无count参数, 返回被移除的随机元素。
  2. 有count参数, 返回一个数组。

实例:

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

        移除集合中一个或多个成员,不存在的成员元素会被忽略

语法:

>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

SUnion

        获取给定集合的并集。不存在的集合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

        获取给定集合的并集并存储到指定集合中。若指定的集合已存在, 则覆盖

语法:

>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"

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值