Redis学习3

  • 7 Redis 数据类型操作命令
  • 7.1 字符串类型
  • 7.1.1 设置和获取
  • 7.1.2 递增和递减
  • 7.1.3 追加
  • 7.1.4 计算长度
  • 7.1.5 替换覆盖
  • 7.1.6 同时设置获取多个值
  • 7.2 哈希类型
  • 7.2.1 设置和赋值
  • 7.2.2 同时设置/获取多个值
  • 7.2.3 获取哈希表中所有的域和值
  • 7.2.4 删除哈希表中一个或多个指定域
  • 7.2.5 返回所有的域名称/值名称/域是否存在
  • 7.3 列表 list
  • 7.3.1 左边右边插入
  • 7.3.2 获取列表指定区间内的元素
  • 7.3.3 获取指定下标的元素
  • 7.3.4 获取列表的长度
  • 7.3.5 从左从右移除元素
  • 7.3.6 设定指定下标元素
  • 7.3.6 指定位置插入元素
  • 7.4 集合类型 set
  • 7.4.1 添加元素
  • 7.4.2 获取集合中的所有元素
  • 7.4.3 判断元素是否是集合 key 的成员
  • 7.4.3 获取集合中元素的个数
  • 7.4.4 删除集合 key 中的一个或多个 元素
  • 7.4.6 随机返回集合中一个元素
  • 7.4.6 随机删除集合中一个元素
  • 7.5 有序集合类型 zset (sorted set)
  • 7.5.1 增加元素
  • 7.5.2 查询有序集合,指定区间的内的元素
  • 7.5.3 查询有序集合,(从大到小)
  • 7.5.4 删除有序集合 key 中的一个或多个成员
  • 7.5.4 获取有序集 key 的元素成员的个数
  • 7.5.5 范围内排序
  • 7.5.6 从大到小
  • 7.5.7 数量



  

7 Redis 数据类型操作命令

7.1 字符串类型

字符串类型是 Redis 中最基本的数据类型,它能存储任何形式的字符串,包括二进制数 据,序列化后的数据,JSON 化的对象甚至是一张图片。

7.1.1 设置和获取

向已经存在的 key 设置新的 value,会覆盖原来的值

127.0.0.1:6379> keys *
1) "username"
2) "woood"
3) "word"
4) "wood"
127.0.0.1:6379> get username
"zhangsan"
127.0.0.1:6379> set username lisi
OK
127.0.0.1:6379> get username
"lisi"
127.0.0.1:6379> get not-exist
(nil)
127.0.0.1:6379>

7.1.2 递增和递减

将 key 中储存的数字值加 1,如果 key 不存在,则 key 的值先被初始化为 0 再执行 incr 操作(只能对数字类型的数据操作) 
语法:incr key 
注意:对非数字的值操作是不行的 
应用:incr ,decr 在实现关注人数上,文章的点击数上
127.0.0.1:6379> incr index
(integer) 1
127.0.0.1:6379> incr index
(integer) 2
127.0.0.1:6379> get index
"2"
127.0.0.1:6379> incr username
(error) ERR value is not an integer or out of range
127.0.0.1:6379>
将 key 中储存的数字值减1,如果 key 不存在,则么 key 的值先被初始化为 0 再执 行 decr  操作(只能对数字类型的数据操作)
127.0.0.1:6379> keys *
1) "index"
2) "woood"
3) "word"
4) "wood"
5) "username"
127.0.0.1:6379> decr myindex
(integer) -1
127.0.0.1:6379> get index
"2"
127.0.0.1:6379> decr index
(integer) 1
127.0.0.1:6379> decr myindex
(integer) -2
127.0.0.1:6379> get myindex
"-2"
127.0.0.1:6379>

7.1.3 追加

语法:append key value 
说明:如果 key 存在, 则将 value 追加到 key 原来旧值的末尾 如果 key 不存在, 则将 key 设置值为 value
返回值:追加字符串之后的总长度
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> append k3 v3
(integer) 4
127.0.0.1:6379> get k3
"v3v3"
127.0.0.1:6379> get k4
(nil)
127.0.0.1:6379> append k4 v4
(integer) 2
127.0.0.1:6379> get k4
"v4"
127.0.0.1:6379>

7.1.4 计算长度

语法:strlen key 
说明:返回 key 所储存的字符串值的长度 
返回值:  ①:如果key存在,返回字符串值的长度  ②:key不存在,返回0
127.0.0.1:6379> strlen k3
(integer) 4
127.0.0.1:6379> strlen k5
(integer) 0
127.0.0.1:6379> get k5
(nil)
127.0.0.1:6379>
语法:getrange key start end 
作用:获取 key 中字符串值从 start 开始 到 end 结束 的子字符串,包括 start 和 end, 负数 表示从字符串的末尾开始,
	 -1 表示最后一个字符 
返回值:截取的子字符串。 使用的字符串 key: name, value: zhangsan
注意:超出字符串范围的截取 ,获取合理的子串
127.0.0.1:6379> getrange name -5 -2
"ngsa"
127.0.0.1:6379> getrange name 2 5
"angs"
127.0.0.1:6379> getrange name 2 1000
"angsan"
127.0.0.1:6379>

7.1.5 替换覆盖

语法:setrange key offset value 
说明:用 value 覆盖(替换)key 的存储的值从 offset 开始,不存在的 key 做空白字符串。 
返回值:修改后的字符串的长度
127.0.0.1:6379> set item java-tmocat
OK
127.0.0.1:6379> setrange item 5 tom
(integer) 11
127.0.0.1:6379> get item
"java-tomcat"
127.0.0.1:6379> get phone
(nil)
127.0.0.1:6379> setrange phone 5 18392631488
(integer) 16
127.0.0.1:6379> get phone
"\x00\x00\x00\x00\x0018392631488"
127.0.0.1:6379>

7.1.6 同时设置获取多个值

语法:mset key value [key value…] 
说明:同时设置一个或多个 key-value 对 返回值: OK
语法:mget key [key …] 
作用:获取所有(一个或多个)给定 key 的值 
返回值:包含所有 key 的列表
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k4"
3) "k2"
4) "k1"
127.0.0.1:6379> mget k1 k2 k3 k4
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379>

7.2 哈希类型

redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象

7.2.1 设置和赋值

语法:hset  hash 表的 key  field  value 
作用:将哈希表 key 中的域 field 的值设为 value ,如果 key 不存在,则新建 hash 表,执 行赋值,如果有 field ,则覆盖值。 
返回值: 
		①如果 field 是 hash 表中新 field,且设置值成功,返回 1 
		②如果 field 已经存在,旧值覆盖新值,返回 0
127.0.0.1:6379> hset website baidu www.baidu.com
(integer) 1
127.0.0.1:6379> hset website baidu http://www.baidu.com
(integer) 0
127.0.0.1:6379>
语法:hget key field 
作用:获取哈希表 key 中给定域 field 的值  
返回值:field 域的值,如果 key 不存在或者 field 不存在返回 nil
127.0.0.1:6379> hget website baidu
"http://www.baidu.com"
127.0.0.1:6379> hget website google
(nil)
127.0.0.1:6379>

7.2.2 同时设置/获取多个值

语法:hmset key  field value [field value…] 
说明:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的 field, 
	 hash 表 key 不存在,创建空的 hash 表,执行 hmset. 
返回值:设置成功返回 ok, 如果失败返回一个错误
语法:hmget key field [field…] 
作用:获取哈希表 key 中一个或多个给定域的值 
返回值:返回和 field 顺序对应的值,如果 field 不存在,返回 nil
127.0.0.1:6379> hmset website baidu https://www.baidu.com google www.google.com
OK
127.0.0.1:6379> type website
hash
127.0.0.1:6379> hmget website baidu taobao
1) "https://www.baidu.com"
2) (nil)
127.0.0.1:6379> hmget website baidu google taobao
1) "https://www.baidu.com"
2) "www.google.com"
3) (nil)
127.0.0.1:6379>

7.2.3 获取哈希表中所有的域和值

Redis6数据类型_Redis6数据类型

语法:hgetall key 
作用:获取哈希表 key 中所有的域和值 
返回值:以列表形式返回 hash 中域和域的值 ,key 不存在,返回空 hash
127.0.0.1:6379> hgetall website
1) "baidu"
2) "https://www.baidu.com"
3) "google"
4) "www.google.com"
127.0.0.1:6379> hgetall class
(empty list or set)
127.0.0.1:6379>

7.2.4 删除哈希表中一个或多个指定域

语法:hdel key field [field…] 
作用:删除哈希表 key 中的一个或多个指定域 field,不存在 field 直接忽略 
返回值:成功删除的 field 的数量
127.0.0.1:6379> hgetall website
1) "baidu"
2) "www.baidu.com"
3) "google"
4) "www.google.com"
5) "taobao"
6) "www.taobao.com"
127.0.0.1:6379> hdel website google taobao
(integer) 2
127.0.0.1:6379> hgetall website
1) "baidu"
2) "www.baidu.com"
127.0.0.1:6379>

7.2.5 返回所有的域名称/值名称/域是否存在

语法:hkeys key 
作用:查看哈希表 key 中的所有 field 域 
返回值:包含所有 field 的列表,key 不存在返回空列表
语法:hvals key 
作用:返回哈希表 中所有域的值 
返回值:包含哈希表所有域值的列表,key 不存在返回空列表
语法:hexists key field 
作用:查看哈希表 key 中,给定域 field 是否存在 
返回值:如果 field 存在,返回 1, 其他返回 0
127.0.0.1:6379> hkeys website
1) "baidu"
2) "google"
3) "taobao"
127.0.0.1:6379> hvals website
1) "www.baidu.com"
2) "www.google.com"
3) "www.taobao.com"
127.0.0.1:6379> hexists website google
(integer) 1
127.0.0.1:6379>

7.3 列表 list

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左 边)或者尾部(右边)

7.3.1 左边右边插入

语法:lpush key value [value…] 
作用:将一个或多个值 value 插入到列表 key 的表头(最左边),
	 从左边开始加入值,从左 到右的顺序依次插入到表头 
返回值:数字,新列表的长度 
例如:将 a,b,c 插入到 mylist 列表类型

Redis6数据类型_数据类型操作命令_02

127.0.0.1:6379> rpush mylist d
(integer) 4

Redis6数据类型_5种数据类型操作命令_03

7.3.2 获取列表指定区间内的元素

语法:lrange key start stop 
作用:获取列表 key 中指定区间内的元素,0 表示列表的第一个元素,
	 以 1 表示列表的第 二个元素;start , stop 是列表的下标值,也可以负数的下标,
	  -1 表示列表的最后一 个元素, -2 表示列表的倒数第二个元素,以此类推。 
	  start ,stop 超出列表的范围 不会出现错误。
  返回值:指定区间的列表
127.0.0.1:6379> lpush language Java C C++  php Python
(integer) 5
127.0.0.1:6379> lrange language 0 5
1) "Python"
2) "php"
3) "C++"
4) "C"
5) "Java"
127.0.0.1:6379> lrange language 1 1
1) "php"
127.0.0.1:6379>

7.3.3 获取指定下标的元素

语法:lindex key index 
作用:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。
	 0 表示列 表的第一个元素,以 1 表示列表的第二个元素;start , stop 是列表的下标值,
	 也可 以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以 此类推。 
返回值:指定下标的元素;index 不在列表范围,返回 nil
127.0.0.1:6379> lindex language 1
"php"
127.0.0.1:6379> lindex language 10
(nil)
127.0.0.1:6379>

7.3.4 获取列表的长度

语法:llen key 
作用:获取列表 key 的长度 
返回值:数值,列表的长度; key 不存在返回 0
127.0.0.1:6379> llen language
(integer) 5
127.0.0.1:6379>

7.3.5 从左从右移除元素

语法:lrem key count value 
作用:根据参数 count 的值,移除列表中与参数 value 相等的元素, count >0 ,
	 从列表的 左侧向右开始移除; count < 0 从列表的尾部开始移除;
	  count = 0 移除表中所有 与 value 相等的值。
返回值:数值,移除的元素个数
127.0.0.1:6379> lpush course java html java html mysql
(integer) 5
127.0.0.1:6379> lrange course 0 4
1) "mysql"
2) "html"
3) "java"
4) "html"
5) "java"
127.0.0.1:6379> lrem course 2 html
(integer) 2
127.0.0.1:6379> lrange course 0 4
1) "mysql"
2) "java"
3) "java"
127.0.0.1:6379> lrem course 0 java
(integer) 2
127.0.0.1:6379> lrange 0 4
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange course 0 4
1) "mysql"
127.0.0.1:6379>

7.3.6 设定指定下标元素

语法:lset key index value 
作用:将列表 key 下标为 index 的元素的值设置为 value。 
返回值:设置成功返回 ok ; key 不存在或者 index 超出范围返回错误信息
127.0.0.1:6379> lpush letter a b d d e
(integer) 5
127.0.0.1:6379> lrange letter  0  -1
1) "e"
2) "d"
3) "d"
4) "b"
5) "a"
127.0.0.1:6379> lset letter 2 c
OK
127.0.0.1:6379> lrange letter 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379>

7.3.6 指定位置插入元素

语法:linsert key BEFORE|ALFTER pivot value 
作用:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。
	 key 不存在,pivot 不在列表中,不执行任何操作。 
	 返回值:命令执行成功,返回新列表的长度。没有找到 pivot 返回 -1, key 不存在返回 0。
127.0.0.1:6379> rpush class class1 class2
(integer) 2
127.0.0.1:6379> lrange class 0 -1
1) "class1"
2) "class2"
127.0.0.1:6379> linsert class BEFORE class2 class3
(integer) 3
127.0.0.1:6379> lrange class 0 -1
1) "class1"
2) "class3"
3) "class2"
127.0.0.1:6379>

7.4 集合类型 set

redis 的 Set 是 string 类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据

7.4.1 添加元素

语法:sadd key member [member…] 
作用:将一个或多个 member 元素加入到集合 key 当中,
	 已经存在于集合的 member 元 素将被忽略,不会再加入。 
返回值:加入到集合的新元素的个数。不包括被忽略的元素。
127.0.0.1:6379> sadd sql insert
(integer) 1
127.0.0.1:6379> sadd sql update
(integer) 1
127.0.0.1:6379> sadd sql delete select
(integer) 2
127.0.0.1:6379>

Redis6数据类型_Redis学习3_04

7.4.2 获取集合中的所有元素

语法:smembers key 
作用:获取集合 key 中的所有成员元素,不存在的 key 视为空集合
127.0.0.1:6379> smembers sql
1) "select"
2) "delete"
3) "update"
4) "insert"
127.0.0.1:6379> smembers not-exists
(empty list or set)
127.0.0.1:6379>

7.4.3 判断元素是否是集合 key 的成员

语法:sismember key member 
作用:判断 member 元素是否是集合 key 的成员 
返回值:member 是集合成员返回 1,其他返回 0 。
127.0.0.1:6379> sismember sql insert
(integer) 1
127.0.0.1:6379> sismember sql qq
(integer) 0
127.0.0.1:6379>

7.4.3 获取集合中元素的个数

语法:scard key 
作用:获取集合里面的元素个数 
返回值:数字,key 的元素个数。 其他情况返回 0 。
127.0.0.1:6379> scard sql
(integer) 4
127.0.0.1:6379>

7.4.4 删除集合 key 中的一个或多个 元素

语法:srem key member [member…] 
作用:删除集合 key 中的一个或多个 member 元素,不存在的元素被忽略。 
返回值:数字,成功删除的元素个数,不包括被忽略的元素
127.0.0.1:6379> srem sql insert
(integer) 1
127.0.0.1:6379> smembers sql
1) "select"
2) "delete"
3) "update"
127.0.0.1:6379> srem sql aaa
(integer) 0
127.0.0.1:6379>

7.4.6 随机返回集合中一个元素

语法:srandmember key [count] 
作用:只提供 key,随机返回集合中一个元素,元素不删除,依然在集合中;
	 提供了 count 时,count 正数, 返回包含 count 个数元素的集合, 
	 集合元素各不相同。count 是负 数,返回一个 count 绝对值的长度的集合, 
	 集合中元素可能会重复多次。 
返回值:一个元素;多个元素的集合
127.0.0.1:6379> sadd type byte short int lang fload double bollean char
(integer) 8
127.0.0.1:6379> srandmember type
"char"
127.0.0.1:6379> srandmember type
"byte"
127.0.0.1:6379> srandmember type 4
1) "lang"
2) "short"
3) "bollean"
4) "char"
127.0.0.1:6379> srandmember type 3
1) "fload"
2) "int"
3) "char"
127.0.0.1:6379> srandmember type -6
1) "lang"
2) "lang"
3) "int"
4) "int"
5) "short"
6) "char"
127.0.0.1:6379>

7.4.6 随机删除集合中一个元素

语法:spop key [count] 
作用:随机从集合中删除一个元素, count 是删除的元素个数。 
返回值:被删除的元素,key 不存在或空集合返回 nil
127.0.0.1:6379> spop type
"lang"
127.0.0.1:6379> spop type 3
1) "bollean"
2) "byte"
3) "fload"
127.0.0.1:6379> smembers type
1) "short"
2) "double"
3) "char"
4) "int"
127.0.0.1:6379>

7.5 有序集合类型 zset (sorted set)

redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。 不同的是 zset 的每个元素都会关联一个分数(分数可以重复),redis 通过分数来为集合中的 成员进行从小到大的排序。

7.5.1 增加元素

语法:zadd key score member [score member…] 
作用:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,
	 如果 member 存在集合中,则更新值;score 可以是整数或浮点数 
返回值:数字,新添加的元素个数
127.0.0.1:6379> zadd score 80 zhangsan 100 lisi 90 wangwu
(integer) 3
127.0.0.1:6379> zadd score zhaoliu 70.5
(error) ERR value is not a valid float
127.0.0.1:6379> zadd myscore 100.0 chinese 90.0 english 80.0 math
(integer) 3
127.0.0.1:6379>

7.5.2 查询有序集合,指定区间的内的元素

语法:zrange key start stop [WITHSCORES] 
作用:查询有序集合,指定区间的内的元素。集合成员按 score 值从小到大来排序。 
	 start,stop 都是从 0 开始。0 是第一个元素,1 是第二个元素,依次类推。
	  以 -1 表示最后一 个成员,-2 表示倒数第二个成员。
	  WITHSCORES 选项让 score 和 value 一同返回。
返回值:自定区间的成员集合
127.0.0.1:6379> zrange score 0 -1
1) "zhangsan"
2) "wangwu"
3) "lisi"
127.0.0.1:6379> zrange score 0  -1  withscores
1) "zhangsan"
2) "80"
3) "wangwu"
4) "90"
5) "lisi"
6) "100"
127.0.0.1:6379> zrange score 0 1
1) "zhangsan"
2) "wangwu"
127.0.0.1:6379>

7.5.3 查询有序集合,(从大到小)

语法:zrevrange key start stop [WITHSCORES] 
作用:返回有序集 key 中,指定区间内的成员。
	 其中成员的位置按 score 值递减(从大到小) 来排列。其它同 zrange 命令。 
返回值:自定区间的成员集合
127.0.0.1:6379> zrevrange score 0 -1 withscores
1) "lisi"
2) "100"
3) "wangwu"
4) "90"
5) "zhangsan"
6) "80"
127.0.0.1:6379>

7.5.4 删除有序集合 key 中的一个或多个成员

语法:zrem key member [member…] 
作用:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略 
返回值:被成功删除的成员数量,不包括被忽略的成员。
127.0.0.1:6379> zrem score zhangsan
(integer) 1
127.0.0.1:6379> zrange score 0 -1
1) "wangwu"
2) "lisi"
127.0.0.1:6379>

7.5.4 获取有序集 key 的元素成员的个数

语法:zcard key 
作用:获取有序集 key 的元素成员的个数 
返回值:key 存在返回集合元素的个数, key 不存在,返回 0
127.0.0.1:6379> zcard score
(integer) 2
127.0.0.1:6379>

7.5.5 范围内排序

语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count] 
作用:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括 min 和 max)的成 员,
	 有序成员是按递增(从小到大)排序。 min ,max 是包括在内 , 
	 使用符号 ( 表示不包括。 min , max 可以使用 -inf  , +inf 表示最小和最大   
	    limit 用来限制返回结果的数量和区间。      withscores 显示 score 和 value 
返回值:指定区间的集合数
127.0.0.1:6379> zadd salary 600 rose 500 jack 300 mike 700 rose 900 tom
(integer) 4
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> zrange salary 0 -1 withscores
1) "mike"
2) "300"
3) "jack"
4) "500"
5) "rose"
6) "700"
7) "tom"
8) "900"
127.0.0.1:6379> zrangebyscore salary 500 900 withscores
1) "jack"
2) "500"
3) "rose"
4) "700"
5) "tom"
6) "900"
127.0.0.1:6379> zrangebyscore salary (500 900 withscores
1) "rose"
2) "700"
3) "tom"
4) "900"
127.0.0.1:6379>
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
1) "mike"
2) "300"
3) "jack"
4) "500"
5) "rose"
6) "700"
7) "tom"
8) "900"
127.0.0.1:6379>  zrangebyscore salary 500 900 withscores limit 0 2
1) "jack"
2) "500"
3) "rose"
4) "700"

7.5.6 从大到小

语法:zrevrangebyscore key max min  [WITHSCORES ] [LIMIT offset count] 
作用:返回有序集 key 中, score 值介于 max 和 min 之间
	 (默认包括等于 max 或 min )的所有 的成员。
	 有序集成员按 score 值递减(从大到小)的次序排列。其他同 zrangebyscore
127.0.0.1:6379> zrevrangebyscore salary 900 500 withscores limit 0 2
1) "tom"
2) "900"
3) "rose"
4) "700"
127.0.0.1:6379>

7.5.7 数量

语法:zcount key min max 
作用:返回有序集 key 中, score 值在 min 和 max 之间
	 (默认包括 score 值等于 min 或 max ) 的成员的数量
127.0.0.1:6379> zrange salary 0 -1 withscores
1) "mike"
2) "300"
3) "jack"
4) "500"
5) "rose"
6) "700"
7) "tom"
8) "900"
127.0.0.1:6379> zcount salary 500 900
(integer) 3
127.0.0.1:6379>