文章目录

  • 1. string(字符串)
    • 1.1相关命令
    • 1.2 相关实践
  • 2 hash(哈希)
    • 2.1 相关命令
    • 2.2 相关实践
  • 3 list(列表)
    • 3.1 相关命令
    • 3.2 相关实践
  • 4 set(无序集合)
    • 4.1 相关命令
    • 4.2 相关实践
  • 5 sortedset(有序集合)
    • 5.1 相关命令
    • 5.2 相关实践

1. string(字符串)

字符串就是由多个字符组成的,用双引号引起来。它是有序的,不会自动去重。字符串中的每个字符是有相应下标的【从左往右是从0开始,没有从右往左(python中的string有这种操作方式)】。字符串是可以更改的、字符串的字符是可更改的、也可往字符串的尾部追加字符或字符串。最大容量512M。

1.1相关命令

##### 通过(不只是针对string)
exists   # 判断单个key或多个key是否存在,结果返回要么是0,要么是正整数,0表示全不存在,若是正整数,下整数是几就表示存在几个;
type     # 判断单个key对应的value的数据类型,如果key不存在则返回结果none,若存在,则返回是什么类型(例如:string)
del      # 删除单个key或多个key,结果反回要么是0,要么是正整数,0表示key不存在,正整数是几就表示成功删除了几个key;##### 与string数据类型相关的命令
--------------------------------------------------------------------------------------------------------------------
set         # 设置单个key-value对,或key存在,会对其源value的值进行更改;
setnx       # 设置单个key-value对,或key存在,不会成功(返回结果0),其key的value也不会被更改;
get         # 获取单个key对应的value,一次只能查看某一个key对应的value
getset      # 查看key对应的value,并更改其value,不管key是否存在;
--------------------------------------------------------------------------------------------------------------------
mset        # 设置多个key-value对,若某一个key存在,那么key对应的value也会被更改;
msetnx      # 设置多个key-value对,若某一个key存在,那么整个操作不会成功;
mget        # 获取多个key对应的value,key存在,返回相应的value,key不存在,返回nil
--------------------------------------------------------------------------------------------------------------------
incr        # 每次自增1,前提是key对应的value得是整数,若key不存在,则创建key且在0的基础上自增1;
incrby      # 指定自增多少(整数),前提是key对应的value得是整数,若key不存在,则创建并在0的其它上自增;
incrbyfloat # 我们可以指定自增整数或自增小数,前提是key对应的value是整数或者是小数,若key不存在,则创建,且在0的基础上自增
--------------------------------------------------------------------------------------------------------------------
decr        # 每次自减1,前提是key对应的value得是整数,若key不存在,则创建key且在0的基础上自减1;
decrby      # 指定自减多少(整数),前提是key对应的value得是整数,若key不存在,则创建key且在0的基础上进行自减;
--------------------------------------------------------------------------------------------------------------------
getrange    # 获取字符串中单个或多个字符的下标,格式:getrange keyname startindex endindex
setrange    # 修改字符串的字符,以字符串中字符的下标为准则,格式:setrange keyname offsetindex value
--------------------------------------------------------------------------------------------------------------------
strlen      # 计算key对应的value的长度(有多少个字符)
append      # 往key对应的value尾部追加字符或字符串

1.2 相关实践

基本的实践一(添加单个key-value对)

#### 添加单个key-value对(若key存在,对value进行替换)
172.16.1.21:6379> exists key1                  # 判断key1键是否存在,0表示不存在,1表示存在
(integer) 0
172.16.1.21:6379> set key1 "lili"                # 设置key1键的值是"lili"
OK
172.16.1.21:6379> get key1                     # 查看key1键的value
"lili"
172.16.1.21:6379> type key1                    # 查看key1键value的类型,string表示字符串
string#### 添加单个key-value对(若key存在,则不允许创建)
172.16.1.21:6379> exists key1                 # 判断key1键是否存在
(integer) 1
172.16.1.21:6379> get key1                    # 查看key1键对应的value
"lili"
172.16.1.21:6379> setnx key1 "lanlan"         # 设置key1键的value等于lanlan,非ok失败
(integer) 0
172.16.1.21:6379> get key1                    # 查看key1键对应的value,其结果还是lilii
"lili"#### 查看key对应的value值,并同时给其设置新的value
172.16.1.21:6379> exists key1                 # 判断key1键是否存在
(integer) 1
172.16.1.21:6379> get key1                    # 获取key1键对应的value
"lili"
172.16.1.21:6379> getset key1 "binbin"        # 获取key1键对应的value,并设置新value
"lili"
172.16.1.21:6379> get key1                    # 获取key1键对应的value
"binbin"

基本的实践二(添加多个key-value对)

#### 添加多个key-value对(若key存在,对value进行替换)
172.16.1.21:6379> exists key2 key3            # 判断key2和key3键是否都都存在,0表示都不存在
(integer) 0
172.16.1.21:6379> mset key2 "2" key3 "3"      # 设置key2键的value等于2,key3键的value=3
OK
172.16.1.21:6379> mget key2 key3              # 查看key2和key3对应的value
1) "2"
2) "3"##### 添加多个key-value对(若某个key存在,则全部失败)
172.16.1.21:6379> exists key3 key4             # 我判断的是两个key,结果是1,表示有一个key存在
(integer) 1
172.16.1.21:6379> exists key3                  # 判断key3键是否存在,结果是1表示存在
(integer) 1
172.16.1.21:6379> exists key4                  # 判断key4键是否存在,结果是0表示不存在
(integer) 0
172.16.1.21:6379> get key3                     # 查看key3键对应的值
"3"
172.16.1.21:6379> msetnx key3 "33" key4 "44"   # 返回结果0,表示失败
(integer) 0
172.16.1.21:6379> get key3                     # key3对应的value还是3
"3"
172.16.1.21:6379> exists key4                  # 而key4则不存在
(integer) 0

基本的实践三(自增 incr)

#### 特别说明
要想进行自增,key对应的value对应的只能整数(正整数或负整数)#### 每次自增1
172.16.1.21:6379> exists key4                   # 判断key4是否存在
(integer) 0
172.16.1.21:6379> set key4 "chenliang1"         # 设置key4的value等于chenliang1
OK
172.16.1.21:6379> get key4                      # 获取key4键对应的value
"chenliang1"
172.16.1.21:6379> type key4                     # 查看key4对应value的数据类型
string
172.16.1.21:6379> incr key4                     # 让其key4对应的value自增,报错(因为key4对应的value不是整数)
(error) ERR value is not an integer or out of range172.16.1.21:6379> exists key5                   # 判断key5键是否存在
(integer) 0
172.16.1.21:6379> set key5 "1.1"                # 设置key5键对应的value是1.1
OK
172.16.1.21:6379> get key5                      # 获取key5对应的value
"1.1"
172.16.1.21:6379> incr key5                     # 让key5对应的value自增,报错(因为key5对应的value不是整数)
(error) ERR value is not an integer or out of range172.16.1.21:6379> exists key6                   # 判断key6键是否存在
(integer) 0
172.16.1.21:6379> set key6 "1"                  # 设置key6键的值是1
OK
172.16.1.21:6379> get key6                      # 获取key6的value
"1"
172.16.1.21:6379> type key6                     # 查看key6对应value的数据类型
string
172.16.1.21:6379> incr key6                     # 让key6的值自增,结果显示的是自增结果后的value
(integer) 2
172.16.1.21:6379> get key6                      # 获取key6对应的value
"2"172.16.1.21:6379> exists key7                   # 判断key7是否存在
(integer) 0
172.16.1.21:6379> set key7 "-1"                 # 设置key7对应的value是-1
OK
172.16.1.21:6379> get key7                      # 获取key7的value
"-1"
172.16.1.21:6379> incr key7                     # 让key7对应的value自增,0表示自增后的结果
(integer) 0
172.16.1.21:6379> get key7                      # 获取key7对应的value
"0"
172.16.1.21:6379> incr key7                     # 让key7对应的value自增
(integer) 1
172.16.1.21:6379> get key7                      # 获取key7对应的value
"1"172.16.1.21:6379> exists key8                   # 判断key8键是否存在,0表示不存在
(integer) 0
172.16.1.21:6379> incr key8                     # 创建key8键,源本没有,就是0,然后自增1,结果就是1
(integer) 1
172.16.1.21:6379> get key8                      # 获取key8对应的value
"1"
172.16.1.21:6379> incr key8                     # 让key8对应的value自增,2表示自增后的结果
(integer) 2
172.16.1.21:6379> get key8                      # 获取key8对应的value
"2"
172.16.1.21:6379> type key8                     # 查看key8对应value的数据类型
string

基本的实践四(指定自增多少整数 incrby)

#### 特别说明
要想进行指定自增多少,key对应的value对应的只能整数(正整数或负整数)#### 指定自增多少整数(incrby)
172.16.1.21:6379> exists key9                   # 判断key9是否存在,0表示不存在
(integer) 0
172.16.1.21:6379> set key9 "1.1"                # 设置key9键对应的value等于1.1
OK
172.16.1.21:6379> get key9                      # 获取key9对应的value
"1.1"
172.16.1.21:6379> incrby key9 2                 # 让key9键对应的value自增2个数,报错(因为key9对应的value不是整数)
(error) ERR value is not an integer or out of range172.16.1.21:6379> set key9 "1"                  # 设置key9键的value等于1
OK
172.16.1.21:6379> get key9                      # 获取key9键对应的value
"1"
172.16.1.21:6379> incrby key9 2                 # 指定key9对应的value自增两个数
(integer) 3
172.16.1.21:6379> get key9                       # 获取key9键对应的value
"3"
172.16.1.21:6379> incrby key9 1.1                # 让key9键对应的value自增1.1,报错(因为你指定自增的是小数,只能自增整数)
(error) ERR value is not an integer or out of range172.16.1.21:6379> exists key10                # 判断key10键是否存在
(integer) 0
172.16.1.21:6379> incrby key10 5                 # 创建key10,并指定value自增5个数
(integer) 5
172.16.1.21:6379> get key10                      # 获取key10键对应的value
"5"
172.16.1.21:6379> type key10                     # 查看key10对应value的数据类型
string

基本实践五(指定自增incrbyfloat,指定的自增可以指定整数或者小数)

#### 特别说明
要想进行指定自增多少,key对应的value可以是整数(下/负)和小数(正/负)## 指定自自增整数或自增小数
172.16.1.21:6379> exists key11                   # 判断key11是否存在
(integer) 0
172.16.1.21:6379> set key11 "1"                # 设置key11的value等于1
OK
172.16.1.21:6379> get key11                      # 获取key11键对应的value
"1"
172.16.1.21:6379> incrbyfloat key11 1.1          # 让key11对应的value自增1.1
"2.1"
172.16.1.21:6379> get key11                      # 获取key11键对应的value
"2.1"
172.16.1.21:6379> incrbyfloat key11 2            # 让key11对应的value自增2
"4.1"
172.16.1.21:6379> get key11                      # 获取key11键对应的value
"4.1"

基本实践六(自减decr和指定自减decrby多少)

## 特别说明
要想进行自减和指定自减多少,key对应的value只可以是整数(正整数/负整数)172.16.1.21:6379> exists key12                   # 判断key12键是否存在
(integer) 0
172.16.1.21:6379> decr key12                     # 创建key12键,并在0的基础上自减1
(integer) -1
172.16.1.21:6379> get key12                      # 获取key12键对应的value
"-1"
172.16.1.21:6379> decrby key12 3                 # 指定key12键对应的value减3个
(integer) -4
172.16.1.21:6379> get key12                      # 获取key12键对应的value
"-4"

基本实践七(获取字符串中单/多个字符的下标)

172.16.1.21:6379> set key12 "chen liang"        # 设置key12键对应的value等于"chen liang"
OK
172.16.1.21:6379> get key12                      # 获取key12键对应的value
"chen liang"
172.16.1.21:6379> getrange key12 0 0             # 获取下标为0的字符
"c"
172.16.1.21:6379> getrange key12 0 1             # 获取下标为0和1的字符
"ch"
172.16.1.21:6379> getrange key12 0 3             # 获取下标为0、1、2、3的字符
"chen"

基本实践八(对字符串中的字符进行修改)

172.16.1.21:6379> get key12                       # 获取key12键对应的value
"chen liang"
172.16.1.21:6379> setrange key12 0 C             # 修改key12的value下标为0的字符为C
(integer) 10
172.16.1.21:6379> get key12                      # 获取key12键对应的value
"Chen liang"

基本实践九(统计字符串的长度)

172.16.1.21:6379> get key12                       # 获取key12键对应的value
"Chen liang"
172.16.1.21:6379> strlen key12                   # 统计key12键对应value的长度
(integer) 10

基本实践十(往字符串的尾部追加字符)

172.16.1.21:6379> get key12                       # 获取key12键对应的value
"Chen liang"
172.16.1.21:6379> append key12 " lili"         # 往key12键的value尾部追加" lili"
(integer) 15
172.16.1.21:6379> get key12                      # 获取key12键对应的value
"Chen liang lili"

2 hash(哈希)

哈希数据类型的格式和示例如下所示:

2.1 相关命令

##### 通过(不只是针对hash)
exists             # 判断单个key或多个key是否存在,结果返回要么是0,要么是正整数,0表示全不存在,若是正整数,下整数是几就表示存在几个;
type               # 判断单个key对应的value的数据类型,如果key不存在则返回结果none,若存在,则返回是什么类型(例如:string)
del                # 删除单个key或多个key,结果反回要么是0,要么是正整数,0表示key不存在,正整数是几就表示成功删除了几个key;##### 与value是hash数据类型相关的命令
--------------------------------------------------------------------------------------------------------------------
hmset              # 设置key的value时指定单个或多个file:value对,若file存在,则会覆盖其file对应的value;
hkeys              # 获取key中所有的file名称,不列出file对应的value;
hvals              # 获取key中所有file对应的value,不列出file的名称;
hlen               # 统计key中总共有几个file
hexists            # 判断key中file是否存在,存在返回1,不存在返回0,注意:只能判断单个file;
hget               # 获取key中单个字段的value
hmget              # 获取key中多个字段的value
hgetall            # 获取key中所有file以及对应的value
--------------------------------------------------------------------------------------------------------------------
hset               # 往key中添加单个file-value,若file存在,则会将其源有值进行覆盖;
hsetnx             # 往key中添加单个file-value,若file存在,则失败;
hdel               # 删除key中的file
--------------------------------------------------------------------------------------------------------------------
hstrlen            # 统计key中某个field 对应value的长度;
hincrby            # 指定某个file对应的value自增多少(整数),其file对应的value只能是整数(正整数或负整数)
hincrbyfloat       # 指定某个file对应的value自增多少(整数或小数),其file对应的value只能是整数或小数[正/负]

2.2 相关实践

基本实践一(认识一下value数据类型为hash的key)

## 判断info1键是否存在
172.16.1.21:6379> exists info1
(integer) 0## 创建info1键,并添加name和sex字段
## name字段对应值是chenliang,lili,sex字段对应值是man,female
172.16.1.21:6379> hmset info1 name "chenliang,lili" sex "man,female"
OK## 查看info1键中所有的字段,不查看所有file对应的value
172.16.1.21:6379> hkeys info1
1) "name"
2) "sex"## 查看info1键中所有file对应的value,不查看file名称
172.16.1.21:6379> hvals info1
1) "chenliang,lili"
2) "man,female"## 统计info1键中总共有多少个file
172.16.1.21:6379> hlen info1
(integer) 2## 判断某个file在info1键中是否存在
172.16.1.21:6379> hexists info1 name
(integer) 1
172.16.1.21:6379> hexists info1 age
(integer) 0## 获取info1键中某个file对应的value
172.16.1.21:6379> hexists info1 name
(integer) 1
172.16.1.21:6379> hget info1 name
"chenliang,lili"## 获取info1键中多个file对应的value
172.16.1.21:6379> hexists info1 name
(integer) 1
172.16.1.21:6379> hexists info1 sex
(integer) 1
172.16.1.21:6379> hmget info1 name sex
1) "chenliang,lili"
2) "man,female"## 获取info1键中所有file的名称以及对应的value
172.16.1.21:6379> hgetall info1
1) "name"                   <== 这是file
2) "chenliang,lili"         <== 这是name字段对应的value
3) "sex"                    <== 这是file
4) "man,female"             <== 这是sex字段对应的value

基本实践二(往key中添加file:value,若file存在,则会覆盖其源有的value)

## 查看info1键中所有的file
172.16.1.21:6379> hkeys info1
1) "name"
2) "sex"## 向info1键中添加file:value,内容为:age "23,23"
172.16.1.21:6379> hexists info1 age
(integer) 0
172.16.1.21:6379> hset info1 age "23,23"
(integer) 1
172.16.1.21:6379> hget info1 age
"23,23"## 查看info1键中所有的file
172.16.1.21:6379> hkeys info1
1) "name"
2) "sex"
3) "age"## 查看info1键的所有file以及对应的value
172.16.1.21:6379> hgetall info1
1) "name"
2) "chenliang,lili"
3) "sex"
4) "man,female"
5) "age"
6) "23,23"## 看一看往info1键中添加字段(字段存在),其值是否会被覆盖
172.16.1.21:6379> hexists info1 age       # 判断age字段在info1键中是否存在
(integer) 1
172.16.1.21:6379> hget info1 age          # 获取info1键中age字段对应的value
"23,23"
172.16.1.21:6379> hset info1 age "24,24"  # 添加age字段,其值是24,24
(integer) 0
172.16.1.21:6379> hget info1 age          # 查看info1键中age字段的value
"24,24"

基本实践三(往key中添加file:value,若file存在,则不会覆盖其源有的value)

172.16.1.21:6379> hexists info1 age        # 判断age字段在info1键中是否存在
(integer) 1
172.16.1.21:6379> hget info1 age           # 获取info1键中age字段对应的value
"24,24"
172.16.1.21:6379> hsetnx info1 age "25,25" # 添加age字段,其值是25,25
(integer) 0
172.16.1.21:6379> hget info1 age           # 查看info1键中age字段的value
"24,24"

基本实践四(删除key中对应的file)

## 查看info1键中有几个字段
172.16.1.21:6379> hlen info1
(integer) 3## 获取info1键中所有file的名称
172.16.1.21:6379> hkeys info1
1) "name"
2) "sex"
3) "age"## 删除info1键中的sex字段
172.16.1.21:6379> hexists info1 sex
(integer) 1
172.16.1.21:6379> hdel info1 sex
(integer) 1
172.16.1.21:6379> hexists info1 sex
(integer) 0## 获取info1键中所有file的名称
172.16.1.21:6379> hkeys info1
1) "name"
2) "age"

基本实践五(key中file对应的value相关操作)

## 查看info1键中所有的file
172.16.1.21:6379> hkeys info1
1) "name"
2) "age"## 统计info1键中name字段对应value的长度
172.16.1.21:6379> hstrlen info1 name
(integer) 14
172.16.1.21:6379> hget info1 name
"chenliang,lili"## 指定file对应的value自增(整数,incrby)
172.16.1.21:6379> hget info1 age          # 查看age字段在info1键中的value
"24,24"
172.16.1.21:6379> hincrby info1 age 1     # 指定age字段的value自增1,报错
(error) ERR hash value is not an integer172.16.1.21:6379> hset info1 age1 "24"    # 向info1键中添加age1字段,其值是24
(integer) 1
172.16.1.21:6379> hget info1 age1         # 查看info1键中age1字段对应的value
"24"
172.16.1.21:6379> hincrby info1 age1 2    # 指定age1字段的value自增2
(integer) 26
172.16.1.21:6379> hget info1 age1         # 查看age1字段的value
"26"172.16.1.21:6379> hincrby info1 age1 1.1  # 指定age1字段自增1.1,报错
(error) ERR value is not an integer or out of range
172.16.1.21:6379> hget info1 age1         # 查看age1字段对应的value
"26"## 指定file对应的value自增(整数或小数,incrbyfloat)
172.16.1.21:6379> hget info1 age              # 查看age字段对应的value
"24,24"
172.16.1.21:6379> hincrbyfloat info1 age 1    # 指定age字段自增1,报错
(error) ERR hash value is not a float
172.16.1.21:6379> hincrbyfloat info1 age 1.1  # 指定age字段自增1.1,报错
(error) ERR hash value is not a float172.16.1.21:6379> hget info1 age1              # 查看age1字段对应的value
"26"
172.16.1.21:6379> hincrbyfloat info1 age1 1.1  # 让age1字段自增1.1,成功
"27.1"
172.16.1.21:6379> hincrbyfloat info1 age1 2    # 让age1字段自增2,成功
"29.1"

3 list(列表)

列表概念图:

当我让chenliang和lili这两个元素从【左边】进去:

01:chenliang先进行
02:lili再进行
03:最后在列表中的结果是:lili chenliang

当我让chenliang和lili这两个元素从【右边】进去:

01:chenliang先进行
02:lili再进行
03:最后在列表中的结果是:chenliang lili

列表中的元素是有序的、允许重复的、是有下标的;
列表中添加元素:可以从左边、右边或者指定添加到什么位置(某个元素的前面或后面);
列表中删除元素:从左边或右边依次弹出、把某个下标范围外的删除;
列表中更改元素:可以根据元素的下标进行元素的更改;

3.1 相关命令

##### 通过(不只是针对list)
exists             # 判断单个key或多个key是否存在,结果返回要么是0,要么是正整数,0表示全不存在,若是正整数,下整数是几就表示存在几个;
type               # 判断单个key对应的value的数据类型,如果key不存在则返回结果none,若存在,则返回是什么类型(例如:string)
del                # 删除单个key或多个key,结果反回要么是0,要么是正整数,0表示key不存在,正整数是几就表示成功删除了几个key;##### 与value是list数据类型相关的命令
--------------------------------------------------------------------------------------------------------------------
lpush              # 从列表的左侧添加单个或多个元素, key若不存在,则创建后再添加元素,结果是整数,整数是几就表示添加了几;
lpushx             # 从列表的左侧添加元素,可以一次添加单个元素,也可以一次添加多个元素,key若不存在,则失败;
rpush              # 从列表的右侧添加元素,可以一次添加单个元素,也可以一次添加多个元素; key若不存在,则创建;
rpushx             # 从列表的右侧添加元素,可以一次添加单个元素,也可以一次添加多个元素; key若不存在,则失败;
llen               # 统计列表中有几个元素(重复的也算);
lindex             # 根据元素的下标来取元素,从左至右是从0开始,从右至左是从-1开始,只能指定单个下标(只能取一个元素)
lrange             # 根据元素的下标来取元素,取多个元素只能从左边开始来指定下标,取单个元素没有左右之分;
--------------------------------------------------------------------------------------------------------------------
lpop               # 从列表的左侧弹出一元素,每次只能弹出一个元素,当key中的所有数据被弹出完后,key就会消失;
rpop               # 从列表的右侧弹出一个元素,每次只弹出一个元素,当key中的所有数据弹完后,key就会消失;
lrem               # 从列表的左侧移除指定的元素,若元素有重复,根据你的指定来。格式:lrem key count 元素# 当count等于0表示把列表中指定的元素全部移除掉# 当count等于1表示移除重复元素左侧的第一个;
--------------------------------------------------------------------------------------------------------------------
linsert           # 指定元素到列表中的某个位置# 格式:linsert key before|after  标杆元素  添加的元素# 示例:linsert L6 after chenliang minmin# 示例说明:在L6列表的每一个chenliang元素后面添加minmin元素lset              # 更改列表中某个元素(第几个)值;# 格式:lset key index newvalue# 示例:leet L7 0 chenliang    # 将L7列表中下标为0的元素修改成chenliangltrim             # 移除列表中没有在某个下标范围以外的元素# 格式: ltrim key startindex endindex# 示例:ltrim L8  1 4       # 移除L8列表中除下标除了是1~4以外的元素# 示例:ltrim L8  1 -2      # 移除L8列表中最左边和最右边的每一个元素

3.2 相关实践

实践一(从列表左边添加元素)

## 列表不存在,用lpushx来从左往右添加元素
172.16.1.21:6379> exists L1                 # 判断L1键是否存在
(integer) 0
172.16.1.21:6379> lpushx L1 chenliang lili  # 从左边添加chenliang和lili元素,失败
(integer) 0
172.16.1.21:6379> exists L1                 # 判断L1键是否存在,0表示不存在
(integer) 0## 列表不存在,用lpush来从左往右添加元素
172.16.1.21:6379> lpush L1 chenliang lili   # 从左边添加chenliang和lili元素,成功
(integer) 2
172.16.1.21:6379> type L1                   # 查看L1键对应的value的类型
list
172.16.1.21:6379> llen L1                   # 查看L1列表中有几个元素
(integer) 2
172.16.1.21:6379> lrange L1 0 -1            # 查看L1列表中的所有元素(根据下标)
1) "lili"                    <== 这是左
2) "chenliang"               <== 这是右
172.16.1.21:6379> lindex L1 0               # 查看L1列表中下标为0的元素
"lili"
172.16.1.21:6379> lindex L1 1               # 查看L1列表中下标为1的元素
"chenliang"
172.16.1.21:6379> lindex L1 -1              # 查看L1列表中下标为-1的元素
"chenliang"
172.16.1.21:6379> lindex L1 -2              # 查看L1列表中下标为-2的元素
"lili"

实践二(从列表右边添加元素)

## 列表不存在,用rpushx来从右往左添加元素
172.16.1.21:6379> exists L2                 # 判断L2键是否存在
(integer) 0
172.16.1.21:6379> rpushx L2 chenliang lili  # 往L2列表右边追加两个元素,失败
(integer) 0
172.16.1.21:6379> exists L2                 # 判断L2列表/键是否存在
(integer) 0## 列表不存在,用rpush来从右往左添加元素
172.16.1.21:6379> rpush L2 chenliang lili   # 往L2列表的右边添加两个元素
(integer) 2
172.16.1.21:6379> type L2                   # 查看L2键对应value的数据类型
list
172.16.1.21:6379> llen L2                   # 查看L2列表中共有几个元素
(integer) 2
172.16.1.21:6379> lrange L2 0 -1            # 查看L2列表中的所有元素(根据元素)
1) "chenliang"               <== 这是左
2) "lili"                    <== 这是右
172.16.1.21:6379> lindex L2 0               # 查看L2列表中下标为0的元素
"chenliang"
172.16.1.21:6379> lindex L2 1               # 查看L2列表中下标为1的元素
"lili"
172.16.1.21:6379> lindex L2 -1              # 查看L2列表中下标为-1的元素
"lili"
172.16.1.21:6379> lindex L2 -2              # 查看L2列表中下标为-2的元素
"chenliang"

实践三(根据元素的下标取单个或多个元素,lrange)

## 准备L3列表,并添加元素
172.16.1.21:6379> lpush L3 chenliang lili chenliang   # 创建L3列表并添加元素
(integer) 3
172.16.1.21:6379> type L3                             # 查看L3键对应value的类型
list
172.16.1.21:6379> lrange L3 0 -1                      # 查看L3列表中所有元素
1) "chenliang"          <== 这是左
2) "lili"
3) "chenliang"          <== 这是右## 从左往右取多个元素
172.16.1.21:6379> lrange L3 0 -1                      # 取L3列表中所有元素
1) "chenliang"
2) "lili"
3) "chenliang"
172.16.1.21:6379> lrange L3 0 1                       # 取L3列表中左边的两个元素
1) "chenliang"
2) "lili"## 从右往左取多个元素(不支持)
172.16.1.21:6379> lrange L3 -1 -2
(empty list or set)
172.16.1.21:6379> lrange L3 -1 -3
(empty list or set)## 取单个元素(可从左往右或从右往左)
172.16.1.21:6379> lrange L3 0 -1                   # L3列表中的所有元素
1) "chenliang"          <== 这是左
2) "lili"
3) "chenliang"          <== 这是右172.16.1.21:6379> lrange L3 0 0                    # 取L3列表中下标为0的元素
1) "chenliang"
172.16.1.21:6379> lrange L3 1 1                    # 取L3列表中下标为1的元素
1) "lili"
172.16.1.21:6379> lrange L3 -1 -1                  # 取L3列表中下标为-1的元素
1) "chenliang"
172.16.1.21:6379> lrange L3 -2 -2                  # 取L3列表中下标为-2的元素
1) "lili"

实践四(从列表的左侧或从右侧依次且每次弹出一个元素)

## 准备L4列表,并添加元素
172.16.1.21:6379> lpush L4 chenliang lili chenliang binbin
(integer) 4
172.16.1.21:6379> lrange L4 0 -1
1) "binbin"          <== 这是左
2) "chenliang"
3) "lili"
4) "chenliang"       <== 这是右## 从L4列表中弹出一个元素
172.16.1.21:6379> lrange L4 0 -1
1) "binbin"          <== 这是左
2) "chenliang"
3) "lili"
4) "chenliang"       <== 这是右
172.16.1.21:6379> lpop L4
"binbin"
172.16.1.21:6379> lrange L4 0 -1
1) "chenliang"
2) "lili"
3) "chenliang"## 从L4列表中弹出一个元素
172.16.1.21:6379> lrange L4 0 -1
1) "chenliang"          <== 这是左
2) "lili"
3) "chenliang           <== 这是右
172.16.1.21:6379> rpop L4
"chenliang"
172.16.1.21:6379> lrange L4 0 -1
1) "chenliang"          <== 这是左
2) "lili"               <== 这是右## 列表中的元素全被移除后,key也不存在了
172.16.1.21:6379> lrange L4 0 -1
1) "chenliang"
2) "lili"
172.16.1.21:6379> lpop L4
"chenliang"
172.16.1.21:6379> lpop L4
"lili"
172.16.1.21:6379> exists L4
(integer) 0

实践五(指定从列表中移除指定的元素)

## 准备L5列表,并添加元素(有重复的哈)
172.16.1.21:6379> rpush L5 lili chenliang binbin chenliang lanlan chenliang chenliang
(integer) 5
172.16.1.21:6379> lrange L5 0 -1
1) "lili"           <== 这是左
2) "chenliang"
3) "binbin"
4) "chenliang"
5) "lanlan"
6) "chenliang"
7) "chenliang"      <== 这是右## 移除chenliang元素(有重复的),移除左边的第1个
172.16.1.21:6379> lrange L5 0 -1
1) "lili"           <== 这是左
2) "chenliang"      # 它会被移除
3) "binbin"
4) "chenliang"
5) "lanlan"
6) "chenliang"
7) "chenliang"      <== 这是右172.16.1.21:6379> lrem L5 1 chenliang
(integer) 1
172.16.1.21:6379> lrange L5 0 -1
1) "lili"
2) "binbin"
3) "chenliang"
4) "lanlan"
5) "chenliang"
6) "chenliang"## 移除chenliang元素(有重复的),移除左边的2个
172.16.1.21:6379> lrange L5 0 -1
1) "lili"           <== 这是左
2) "binbin"
3) "chenliang"      # 它会被移除
4) "lanlan"
5) "chenliang"      # 它会被移除
6) "chenliang"     <== 这是右
172.16.1.21:6379> lrem L5 2 chenliang
(integer) 2
172.16.1.21:6379> lrange L5 0 -1
1) "lili"
2) "binbin"
3) "lanlan"
4) "chenliang"## 移除列表中某个元素(若有重复,则全部移除)
172.16.1.21:6379> lrange L5 0 -1
1) "lili"
2) "binbin"
3) "lanlan"
4) "chenliang"
172.16.1.21:6379> rpush L5 chenliang
(integer) 5
172.16.1.21:6379> lrange L5 0 -1
1) "lili"
2) "binbin"
3) "lanlan"
4) "chenliang"    # 它会被移除
5) "chenliang"    # 它会被移除
172.16.1.21:6379> lrem L5 0 chenliang
(integer) 2
172.16.1.21:6379> lrange L5 0 -1
1) "lili"
2) "binbin"
3) "lanlan"

实践六(插入元素到指定位置,我不从左或从右插入了)

## 准备L6列表,并添加元素
172.16.1.21:6379> rpush L6 chenliang binbin lili lanlan
(integer) 4
172.16.1.21:6379> lrange L6 0 -1
1) "chenliang"
2) "binbin"
3) "lili"
4) "lanlan"## 添加minmin元素L6列表中,其下标让其为1
172.16.1.21:6379> linsert L6 after chenliang minmin
(integer) 5
172.16.1.21:6379> lrange L6 0 -1
1) "chenliang"     <== 这是左
2) "minmin"
3) "binbin"
4) "lili"
5) "lanlan"        <== 这是右

实践七(根据下标修改某个元素)

## 准备L7列表,并添加元素
172.16.1.21:6379> rpush L7 chenliang lili chenliang
(integer) 3
172.16.1.21:6379> lrange L7 0 -1
1) "chenliang"   <== 这是左
2) "lili"
3) "chenliang"   <== 这是右## 将L7列表中下标为0的元素修改成CHENliang
172.16.1.21:6379> lindex L7 0
"chenliang"
172.16.1.21:6379> lset L7 0 CHENliang
OK
172.16.1.21:6379> lindex L7 0
"CHENliang"
172.16.1.21:6379> lrange L7 0 -1
1) "CHENliang"   <== 这是左
2) "lili"
3) "chenliang"   <== 这是右## 将L7列表中下标为-1的元素修改成CHENLIANG
172.16.1.21:6379> lindex L7 -1
"chenliang
172.16.1.21:6379> lset L7 -1 CHENLIANG
OK
172.16.1.21:6379> lrange L7 0 -1
1) "CHENliang"
2) "lili"
3) "CHENLIANG"

实践八(移除没有在某个下标范围内以外的所有元素)

## 准备L8列表,添加多个元素
172.16.1.21:6379> rpush L8 chenliang lili binbin lanlan minmin
(integer) 5
172.16.1.21:6379> lrange L8 0 -1
1) "chenliang"
2) "lili"
3) "binbin"
4) "lanlan"
5) "minmin"## 移除左边第一个元素和右边第一个元素(一条命令)
172.16.1.21:6379> lrange L8 0 -1
1) "chenliang"     <== 这是左,该元素要移除
2) "lili"          # 要保留
3) "binbin"        # 要保留
4) "lanlan"        # 要保留
5) "minmin"        <== 这是右,该元素要移除172.16.1.21:6379> lrange L8 1 -2    # 这些是要保留的
1) "lili"
2) "binbin"
3) "lanlan"
172.16.1.21:6379> ltrim L8 1 -2
OK
172.16.1.21:6379> lrange L8 0 -1
1) "lili"
2) "binbin"
3) "lanlan"

4 set(无序集合)

redis中的无序集合(set)图解:

redis中的无序集合(set)说明:

01:集合中存放的东西我们称之为元素;
02:重复元素会自动去重,你添加的元素在集合中若存在,是不会添加到集合中的;
03:集合中的元素是无序的。例如:1 2 3 显示结果可能是:3 1 2 ,会不断的变化;
04:集合中的元素是没下标的,因为它是无序的嘛;
05:两个集合之间是可以进行交集、并集、差集运算的;
06:两个集合间的各种集的运算结果是可以赋值给另一个集合的。

4.1 相关命令

##### 通过(不只是针对set)
exists             # 判断单个key或多个key是否存在,结果返回要么是0,要么是正整数,0表示全不存在,若是正整数,下整数是几就表示存在几个;
type               # 判断单个key对应的value的数据类型,如果key不存在则返回结果none,若存在,则返回是什么类型(例如:string)
del                # 删除单个key或多个key,结果反回要么是0,要么是正整数,0表示key不存在,正整数是几就表示成功删除了几个key;##### 与value是set数据类型相关的命令
--------------------------------------------------------------------------------------------------------------------
sadd               # 添加单个或多个元素到集合中。格式:sadd  key  member member   例如:sadd myset chenliang lili# 如果添加的某个元素在集合中已存在,是不会添加进去的,会自动去重嘛;# 返回的结果要么是0,要么是正整数,0表示没有没有添加(不代表你添加错误),正整数表示成功添加了几个;scard              # 统计集合中总共有多少个元素(没有重复的,因为集合会自动去重)# 格式:scard key   例如:scard mysetsmembers           # 获取集合中所有的元素,获取的元素排序是无序的;格式:smembers key  例如:smembers myset# 集合中的所有元素显示出来是无序的,例如: 1 2 3  显示的结果可能是: 3 1 2 每次都不同;# 相应的key得存在,若不存在,则返回:(empty list or set)srandmember        # 指定从集合中随机获取几个元素,不指定个数时默认是1个,返回的结果就是获取的元素# 格式:srandmember key count# 示例:srandmember myset    # 随机从myset集合中获取1个元素# 示例:srandmember myset 2  # 随机从myset信中获取2个元素sismember          # 判断某个元素是否存在于集合中,只能判断单个元素,无法判断多个元素;# 格式:sismember key 元素  # 示例:sismember myset chenliang  # 判断chenliang元素是否在myset集合中存在# 结果要么是0,要么是1,# 0表示不存在或key不存在,1表示元素存在于集合中;
--------------------------------------------------------------------------------------------------------------------
srem               # 删除集合中单个或多个元素;元素存在就删除,不存在就不删除(我给你结果让你知道删除了几个元素)# 格式:srem key 元素 元素# 示例:srem myset chenliang   # 删除myset集合中的chenliang元素# 结果要么是0,要么是正整数 # 0表示元素不存在或key不存在,正整数表示成功删除了几元素;spop            # 指定随机从集合中移除多少个元素,不指定个数时默认是1个,返回的结果就是移除的元素;# 格式:spop key count# 示例1: spop myset    # 没有指定随机从myset集合中移除多少个元素,默认是移除一个;# 示例2:spop myset  2  # 指定随机从myset集合中移除2个元素;# 当集合中的元素被全部移除中,那么集合也就不存在了(key也就没了);
--------------------------------------------------------------------------------------------------------------------
sinter             # 获得两个集合key之间有交集(两个集合中相同的元素拿出来)# 格式: sinter key key# 示例:sinter set1 set2 或者 sinter set2 set1  # 它们的结果是一样的# 说明:将set1 set2两个集合中相同元素给取出来sunion             # 获得两个集合key之间的并集(两个集合中所有元素放在一起,再将相同元素给去重)# 格式: sunion key key# 示例:sunion set1 set2 或者 sunion set2 set1  # 它位的的结果是一样的# 说明:将set1 set2两个集合中的所有元素放在一起后再进行去重sdiff              # 获得两个集合key之间的差集(以某个集合为比较对象,我和这个比对象差了什么)# 格式:sdiff key key# 示例1:sdiff set1 set2   # set2集合与set1集合去比较,看set2差什么元素# 示例2:sdiff set2 set1   # set1集合与set2集合去比较,看set1差什么元素
--------------------------------------------------------------------------------------------------------------------
sinterstore        # 将两个集合之间的交集结果赋值给另一个集合(可以不用存在);# 格式:sinterstore 目标集合  key key# 示例:sinterstore set12  set1 set2  等于 sinterstore set12  set2 set1# 说明:将set1与set2两个集合的交集结果添加到set12集合中(可以不用事行存在)sunionstore        # 将两个集合之间的并集结果赋值给另一个集合;# 格式:sunionstore 目标集合  key key# 示例:sunionstore set12  set1 set2  等于 sunionstore set12  set2 set1# 说明:将set1与set2两个集合的并集结果添加到set12集合中(可以不用事行存在)sdiffstore         # 将现从此集合的差集结果赋值给另一个集合;# 将两个集合之间的并集结果赋值给另一个集合;# 格式:sdiffstore 目标集合  key key# 示例:sdiffstore set12  set1 set2  # 将set2与set1集合的差集结果赋值给set12# 示例:sdiffstore set12  set2 set1  # 将set1与set2集合的差集结果赋值给set12

4.2 相关实践

实践一(首次创建集合添加元素、对元素进行统计、查看和判断)

## 创建myset键,并往里面添加元素(有重复的哈)
172.16.1.21:6379> sadd myset 1 2 3 4 5 6 6 7 8 8 9 9         # 创建myset键并添加元素(有重复)
(integer) 9                                                 <== 最终有9个元素
172.16.1.21:6379> type myset                                 # 查看myset键对应value的数据类型
set## 统计myset有序集合中总共有多少个元素
172.16.1.21:6379> scard myset                            # 统计myset无序集合中共有几个元素
(integer) 9## 查看myset有序集合中的所有元素
172.16.1.21:6379> smembers myset                         # 查看myset无序集合中所有的元素
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"# 可以看出里面是没有重复的元素(集合会自动去重)# 可以看出是有序的,这是用redis-cli客户端连接的# 实际上集合是无序的,例如:你用python客户端连接来看,这里不示例## 指定从集合中随机获取多少个元素
172.16.1.21:6379> srandmember myset                      # 随机从myset集合中获取一个元素
"2"
172.16.1.21:6379> srandmember myset 2                    # 随机从myset集合中获取两个元素
1) "8"
2) "1"## 判断某个元素是否在集合中存在
172.16.1.21:6379> smembers myset                         # 获取myset集合中的所有元素
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
172.16.1.21:6379> sismember myset 4                      # 判断元素4是否在myset集合中
(integer) 1

实践二(集合中元素的删除)

## 从集合中删除指定元素(可以指定一个元素,也可指定多个元素)
172.16.1.21:6379> smembers myset     # 查看myset集合中的所有元素
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
172.16.1.21:6379> srem myset 2      # 从myset集合中删除元素2
(integer) 1
172.16.1.21:6379> srem myset 7 8    # 从myset集合中
(integer) 2
172.16.1.21:6379> smembers myset    # 查看myset集合中的所有元素
1) "1"
2) "3"
3) "4"
4) "5"
5) "6"
6) "9"## 指定从集合中随机移除多少个元素(这里不指定具体的元素,而指定移除的个数)
172.16.1.21:6379> smembers myset   # 查看myset集合中的所有元素
1) "1"
2) "3"
3) "4"
4) "5"
5) "6"
6) "9"
172.16.1.21:6379> spop myset      # 从myset集合中随机移除1个元素,移除了元素9
"9"
172.16.1.21:6379> smembers myset  # 查看myset集合中的所有元素
1) "1"
2) "3"
3) "4"
4) "5"
5) "6"
172.16.1.21:6379> spop myset 3    # 从myset集合中随机移除3个元素,移除了5 6 1元素
1) "5"
2) "6"
3) "1"
172.16.1.21:6379> smembers myset  # 查看myset集合中的所有元素
1) "3"
2) "4"

实践三(往集合中添加元素)

172.16.1.21:6379> smembers myset   # 查看myset集合中的所有元素
1) "3"
2) "4"
172.16.1.21:6379> sadd myset 4 5   # 往myset集合添加元素4和5,结果1表示成功一个
(integer) 1                        # 因为添加的元素4与集合中的元素4重复
172.16.1.21:6379> smembers myset   # 查看myset集合中的所有元素
1) "3"
2) "4"
3) "5"

实践四(集合间的交集、并集、差集)

## 准备set1和set2两个集合
172.16.1.21:6379> sadd set1 4 5 6 7
(integer) 4
172.16.1.21:6379> sadd set2 6 7 8 9
(integer) 4
172.16.1.21:6379> smembers set1
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set2
1) "6"
2) "7"
3) "8"
4) "9"## 集合间的交集(把两个集合中相同的元素给取出来)
172.16.1.21:6379> smembers set1        # 查看set1集合中的所有元素
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set2        # 查看set2集合中的所有元素
1) "6"
2) "7"
3) "8"
4) "9"
172.16.1.21:6379> sinter set1 set2     # 让set1与set2两个集合进行交集
1) "6"
2) "7"
172.16.1.21:6379> sinter set2 set1     # 让set2和set1两个集合进行交集
1) "6"
2) "7"## 集合间的并集(把两个集合中的所有元素放在一起后再进行去重)
172.16.1.21:6379> smembers set1        # 查看set1集合中的所有元素
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set2        # 查看set2集合中的所有元素
1) "6"
2) "7"
3) "8"
4) "9"
172.16.1.21:6379> sunion set1 set2    # 将set1与set2两个集合进行并集
1) "4"
2) "5"
3) "6"
4) "7"
5) "8"
6) "9"
172.16.1.21:6379> sunion set2 set1    # 将set2与set1两个集合进行并集
1) "4"
2) "5"
3) "6"
4) "7"
5) "8"
6) "9"## 集合间的差集(以某个集合为比较对象,我与这个比较对象差什么)
172.16.1.21:6379> smembers set1
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set2
1) "6"
2) "7"
3) "8"
4) "9"
172.16.1.21:6379> sdiff set1 set2   # set2集合去跟set1集合比较,差了元素4和5
1) "4"
2) "5"
172.16.1.21:6379> sdiff set2 set1   # set1集合去跟set2集合比较,差了元素8和9
1) "8"
2) "9"

实践五(将集合间的交集、并集、差集结果赋值给另一个集合)

## 准备set11和set22两个集合
172.16.1.21:6379> sadd set11 4 5 6 7
(integer) 4
172.16.1.21:6379> sadd set22 6 7 8 9
(integer) 4
172.16.1.21:6379> smembers set11
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set22
1) "6"
2) "7"
3) "8"
4) "9"## 将set11与set22集合间的交集结果赋值给set11_inter_set22
172.16.1.21:6379> smembers set11
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set22
1) "6"
2) "7"
3) "8"
4) "9"
172.16.1.21:6379> sinterstore set11_inter_set22 set11 set12
(integer) 2
172.16.1.21:6379> smembers set11_inter_set22
1) "6"
2) "7"## 将set11与set22集合间的并集结果赋值给set11_union_set22
172.16.1.21:6379> smembers set11
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set22
1) "6"
2) "7"
3) "8"
4) "9"
172.16.1.21:6379> sunionstore set11_union_set22 set11 set22
(integer) 6
172.16.1.21:6379> smembers set11_union_set22
1) "4"
2) "5"
3) "6"
4) "7"
5) "8"
6) "9"## 将set11与set22集合间的差集结果赋值给set11_on_set22_diff
172.16.1.21:6379> smembers set11
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set22
1) "6"
2) "7"
3) "8"
4) "9"
172.16.1.21:6379> sdiffstore set11_on_set22_diff set22 set11
(integer) 2
172.16.1.21:6379> smembers set11_on_set22_diff
1) "8"
2) "9"## 将set22与set11集合间的差集结果赋值给set22_on_set11_diff
172.16.1.21:6379> smembers set11
1) "4"
2) "5"
3) "6"
4) "7"
172.16.1.21:6379> smembers set22
1) "6"
2) "7"
3) "8"
4) "9"
172.16.1.21:6379> sdiffstore set22_on_set11_diff set11 set22
(integer) 2
172.16.1.21:6379> smembers set22_on_set11_diff
1) "4"
2) "5"

5 sortedset(有序集合)

redis中有序集合数据类型的认识

redis中有序集合的说明:

01:有序集合中的元素当然是有序的(在添加每个元素时要为每个元素指定相应的分值),根据分值进行分类,然后再进行排序。
02:有序集合中的元素是自动去重的(即使你添加的元素的指定分值不一样);
03:有序集合中的元素是有下标的(下标和分值你要区分开哈),既然是有下标,就可以根据下标取单个元素和多个元素(根据下标范围),可从左往右,也可从右往左,但在取多个元素时,从右往左取时的方法要注意。
04:有序集合中的每个元素是有排行的哈,只有从左至右,没有从右至左,默认是从0开始,跟从左至右的下标是一样的。

5.1 相关命令

##### 通过(针对所有key)
exists             # 判断单个key或多个key是否存在,结果返回要么是0,要么是正整数,0表示全不存在,若是正整数,下整数是几就表示存在几个;
type               # 判断单个key对应的value的数据类型,如果key不存在则返回结果none,若存在,则返回是什么类型(例如:string)
del                # 删除单个key或多个key,结果反回要么是0,要么是正整数,0表示key不存在,正整数是几就表示成功删除了几个key;##### 与value是zset数据类型相关的命令
--------------------------------------------------------------------------------------------------------------------
zadd                # 添加单个或多个元素到集合中,添加果要为每个元素指定分值,不同元素的分值是可以相同的;# 格式: zadd key  score member  score member          # score表示分值,member表示元素# 示例: zadd info  1 chenliang  0 binbin# 说明:chenliang元素的分数是1,binbin元素的分数是0# 当添加的元素重复(即使分值不同),那么是无法添加成功的哈;zcard             # 统计有序集合中有多少个元素(集合会自动去重),# 格式:zcard key   示例: zcard info # 结果要么是0,要么是正整数,0表示key不存在,正整数是几不表示有序集合中有多少个元素;zscan              # 查看有序集合中的所有元素以及分值(此时你就可以看到相同分值的元素在一起,且经过排序了的)# 格式: zscan key cursor(光标)   示例:zscan info 0(你随便指定) zscore             # 获取有序集合中单个元素对应的分值# 格式:zscore key member# 示例:zscore info chenliang    # 获取info有序集合中chenliang元素对应的分值# 返回的结果要么是元素对应的分值,要以是nil(表示元素不存在)
--------------------------------------------------------------------------------------------------------------------
zcount              # 根据分值的范围来统计在这个范围内的有多少个元素# 格式: zcount key min分值 max值# 示例:zcount info 1  2# 说明:统计info有序集合中分值大于等待1且小于等于2的元素有多少个 zincrby             # 指定有序集合中某个元素的分值自增多少整数(正整数或负整数)# 格式:zincrby key 指定自增的值  元素# 示例:zincrby info 4  binbin     # 指定info有序集合中的binbin元素的分值增加4个
--------------------------------------------------------------------------------------------------------------------
zrange              # 根据元素的下标取单个元素或多个元素# 格式: zrange key 开始下标 结束下标# 示例:zrange info 0 0       # 取info有序集合中下标为0的元素(第一个元素)# 示例:zrange info -1 -1     # 取info有序集合中下标为-1的元素(最后一个元素)# 示例:zrange info 0   1     # 取info有序集合中下标为0和1的元素(前两个元素)# 示例: zrange info 0   -1    # 取info有序集合中所有的元素(不显示分值,是有序的)
--------------------------------------------------------------------------------------------------------------------
zrank               # 有序集合中的元素在经过分值分类且排序后,每个元素是有序的,那么每个元素就有排行了,从0开# 始,该命令就是获取某个元素在有序集合中的排行# 格式:zrank key member# 示例:zrank info chenliang   # 获取info有序集合中chenliang元素的排行名次
--------------------------------------------------------------------------------------------------------------------
zrem                # 根据具体元素来删除元素,可删除单个元素或多个元素# 格式:zrem key member member# 示例:zrem info chenliang       # 删除info有序集合中的chenliang元素# 示例: zrem info binbin lanlan   # 删除info有序集合中的binbin和lanlan元素#  返回结果若是0表示元素不存在,若返回的是正整数,正整数是几就表示删除了几个zremrangebyrank     # 根据有序集合中元素的下标/排序范围来删除元素# 格式:zremrangebyrank key 开始下标   结束下标# 示例:zremrangebyrank info 0 0   # 删除下标为0的元素# 示例:zremrangebyrank info 0 1   # 删除下标为0和1的元素zremrangebyscore   # 根据有序集合中元素的分值范围来进行删除元素(不同元素是可以有相同分值的)# 格式:zremrangebyscore key  最小分值   最大分值# 示例:zremrangebyscore info 0    0    # 删除info有序集合中分值为0的所有元素# 示例:zremrangebyscore info 0 3       # 删除info有序集合中分值为0 1 2 3的所有元素
--------------------------------------------------------------------------------------------------------------------
zinterstore         #
zunionstore         #

5.2 相关实践

Redis中key-value对value的数据类型相关推荐

  1. redis查看某一个key的大小_redis查看某个key redis中key的操作命令 - Redis - 服务器之家...

    redis查看某个key redis中key的操作命令 发布时间:2017-04-02 来源:服务器之家 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List. ...

  2. 为什么我Redis中key惊现“乱码”?

    为什么Redis中key会惊现"乱码"? 最近在做一个秒杀项目,过程中大量应用到了redis. 而我在用ElasticJob进行数据化初始化到Redis数据库时发现这些key都出现 ...

  3. Redis中key的过期时间

    Redis中key的过期时间 背景 实际项目开发中,我们经常会用到redis进行缓存存储,那么redist中key设置与不设置缓存时间,会给我们日常开发中带来哪些影响呢? 场景1:设置了key但是没有 ...

  4. php redis命令大全,redis中key相关命令详解

    一.概述: 本文将主要讲述与Key相关的Redis命令.学习这些命令对于学习Redis是非常重要的基础,也是能够充分挖掘Redis潜力的利器.(推荐:redis视频教程) 二.相关命令列表: 命令原型 ...

  5. SpringBoot集成Redis报错链接超时以及无法识别的地址,存入redis中key乱码问题解决

    Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no furthe ...

  6. 统计redis中key的数量

    命令格式如下: 1 $ redis-cli -h IP地址 -p 端口 -a 密码 info keyspace 比如本机(默认端口6379) 1 2 3 4 5 6 $ redis-cli info ...

  7. redis中key的各种通用操作(六)

    命令示例 1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:(获取匹配的key/重新命名/删除key/判断是否存在/移动指定key/新值不存在才重新命名) 127.0.0 ...

  8. 解决Redis中Key值带有特殊字符问题

    通过修改RedisTemplate的序列化器来解决 import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterx ...

  9. redis中key和value的存储大小限制

    String类型:一个String类型的value最大可以存储512M List类型:list的元素个数最多为2^32-1个,也就是4294967295个. Set类型:元素个数最多为2^32-1个, ...

  10. Redis 中 BitMap 的使用场景

    BitMap# BitMap 原本的含义是用一个比特位来映射某个元素的状态.由于一个比特位只能表示 0 和 1 两种状态,所以 BitMap 能映射的状态有限,但是使用比特位的优势是能大量的节省内存空 ...

最新文章

  1. 对‘pthread_create’未定义的引用_深入浅出 C++ 11 右值引用
  2. 【微信小程序】:小程序,新场景
  3. Neuron:迄今为止最大的颗粒细胞数据,发现海马齿状回神经元可过滤并放大空间信息...
  4. 使用 CrossOver 在 Linux运行 Windows 软件(金测OK)
  5. visual studio 多行编辑 列编辑
  6. Windows XP \Windows 2003启动过程的学习及故障分析处理(四)
  7. 解决JavaFX报错缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
  8. Redis的 key 和 value大小限制
  9. Pycharm无法安装第三方模块(模块已存在/换源)
  10. [UVA - 11865]Stream My Contest(最小树形图+朱刘算法)
  11. python十个运维实战项目_干货 | 这4个Python实战项目,让你瞬间读懂Python!
  12. 一键清除 打印机内无法清除作业
  13. Spark MLlib之K-Means聚类算法
  14. 自动化运维--python_自动化-设计师的朋友还是敌人?
  15. python人脸识别代码实现
  16. mac中使用QuickTime Player看了移动硬盘里的视频,如何清除记录?
  17. 可以批量把Word文件转成JPG的软件工具
  18. 智能网联汽车云控系统第5部分:平台服务场景规范
  19. 一个有意思的需求——中文匹配度
  20. linux hwclock -r显示的HWC TIME(硬件时钟时间)与timedatectl结果中的RTC TIME(实时时钟时间)有什么区别?BIOS时钟源

热门文章

  1. Python中 os.sep 的作用
  2. 苏格拉底的最后日子――柏拉图对话集
  3. 16部趣味数学纪录片
  4. 微信 java抓取_【java】微信文章抓取
  5. 国家公祭日悼念:黑白网页背景设置教程
  6. centos7通过startx后进入图形界面,使用eog命令提示unable to open display
  7. 【EMC电磁兼容】01.12——差模与共模
  8. [中国近代史] 第四章测试
  9. K倍交叉验证配对t检验
  10. C# Environment