px之Redis见解(二)

redis的数据类型#

redis中包含了五种常见的数据类型:字符串,散列表,列表,集合,有序集合

px之Redis见解(二)_第1张图片

1. 字符串String###

Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512兆字节的任何内容

px之Redis见解(二)_第2张图片px之Redis见解(二)_第3张图片

示例:

> 127.0.0.1:6379> keys *
> (empty list or set)
> 127.0.0.1:6379> set name zhangsan
> OK
> 127.0.0.1:6379> set age 20
> OK
> 127.0.0.1:6379> get name
> "zhangsan"
> 127.0.0.1:6379> get age
> "20"
> 127.0.0.1:6379> keys *
> 1) "age"
> 2) "name"
> 127.0.0.1:6379> getset sex boy  #先获取再设值

在上面的示例中,setget是Redis命令,name是Redis中使用的键,zhangsan是存储在Redis中的字符串的值。

注 - Redis命令不区分大小写,如SET,Setset都是同一个命令。字符串值的最大长度为 512MB

针对字符串,还有其他命令:

> append key value  
> #如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾
> #如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一样
> incr key
> incr key 1000

将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内

> decr key

将 key 中储存的数字值减一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 decr 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内

> incrby key increment
> #将 key 所储存的值加上增量 increment 。
> #如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
> #如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
> #本操作的值限制在 64(bit)有符号数字表示之内
> decrby key increment

将 key 所储存的值加上减去 increment 。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 decrby 命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内

> mset key value [key value ...]

同时设置一个或多个 key-value 对。
如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 msetnx 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。
mset 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。

> setex key seconds value
> #将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)> #如果 key 已经存在, setex 命令将覆写旧值
> setnx key value
> #将 key 的值设为 value ,当且仅当 key 不存在。
> #若给定的 key 已经存在,则 SETNX 不做任何动作
> 
> setrange key offset value #用来替换子字符串
> #用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。
> #不存在的 key 当作空白字符串处理
> 
> strlen key
> #返回 key 所储存的字符串值的长度。
> #当 key 储存的不是字符串值时,返回一个错误
> 

2. 散列表(hash)###

Redis散列/哈希(Hashes)是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。

示例:

> 127.0.0.1:6379> hset user loginname zhangsan #设置user对象的loginname属性的值为zhangsan
> (integer) 1 #如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 
> 127.0.0.1:6379> hget user loginname #获取用户user对象的loginname属性的值
> "zhangsan"
> 127.0.0.1:6379> hset user loginname lisi #再次设定user对象的loginname属性的值为lisi
> (integer) 0 #如果哈希表中的域 field 已经存在且旧值已被新值覆盖,返回 0 
> 127.0.0.1:6379> hget user loginname #再次获取user对象的loginname属性的值
> "lisi"
> 127.0.0.1:6379> 
> hmset key field value [field value ...]
> #同时将多个 field-value (-)对设置到哈希表 key 中。
> #此命令会覆盖哈希表中已存在的域。
> #如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作
> hmget key field [field ...]
> #返回哈希表 key 中,一个或多个给定域的值。
> #如果给定的域不存在于哈希表,那么返回一个 nil 值。
> #因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表
> hlen key
> #返回哈希表 key 中域的数量
> hkeys key
> #返回哈希表 key 中的所有域。
> hincrby key field increment

为哈希表 key 中的域 field 的值加上增量 increment 。
增量也可以为负数,相当于对给定域进行减法操作。
如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。
对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
本操作的值被限制在 64 位(bit)有符号数字表示之内

> hgetall key
> #返回哈希表 key 中,所有的域和值。
> #在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍
> hexists key field
> #查看哈希表 key 中,给定域 field 是否存在
> hdel key field [field ...]
> #删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略
> del key
> #删除整个哈希表
> hvals key
> #返回哈希表 key 中所有域的值

3. 列表(list)###

Redis列表只是字符串列表,按插入顺序排序。您可以向Redis列表的头部或尾部添加元素

> 127.0.0.1:6379> lpush subject java html5 android ios #从左到右的顺序在subject中依次插入四个元素到subject的表头部分
> (integer) 4 #返回subject 列表的长度
> 127.0.0.1:6379> llen subject # 返回列表 subject 的长度
> (integer) 4
> 127.0.0.1:6379> lpop subject #移除并返回列表 subject 的头元素
> "ios"
> 127.0.0.1:6379> llen subject #再次获取列表subject 的长度
> (integer) 3 #弹出一个元素后,subject里面只剩下三个元素
> 127.0.0.1:6379> lrange subject 0 -1 #返回列表 key 中指定区间内的元素,0表示从收元素开始,-1表示最后一个元素
> 1) "android"
> 2) "html5"
> 3) "java"
> 127.0.0.1:6379> 
> 

列表的最大长度为2^32 - 1个元素(4294967295,每个列表可容纳超过40亿个元素)。

> rpush key value [value ...]
> #将一个或多个值 value 插入到列表 key 的表尾(最右边)> #如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
> #如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。
> #当 key 存在但不是列表类型时,返回一个错误
> 
> rpop key
> #移除并返回列表 key 的尾元素。
> 
> lindex key index
> #返回列表 key 中,下标为 index 的元素。
> #下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
> #你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
> #如果 key 不是列表类型,返回一个错误。
> linsert key BEFORE|AFTER pivot value
> #将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
> #当 pivot 不存在于列表 key 时,不执行任何操作。
> #当 key 不存在时, key 被视为空列表,不执行任何操作。
> #如果 key 不是列表类型,返回一个错误。
> 
> lrem key count value
> #根据参数 count 的值,移除列表中与参数 value 相等的元素。
> #count 的值可以是以下几种:
> 	#count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
> 	#count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
> 	#count = 0 : 移除表中所有与 value 相等的值
> 

4. 集合(set)###

Redis集合是字符串的无序集合

示例:

> 127.0.0.1:6379> sadd student zhangsan lisi wangwu #多个元素(名字)加入到集合 student 当中
> (integer) 3 #被添加到集合中的新元素的数量,不包括被忽略的元素
> 127.0.0.1:6379> scard student # 返回集合 student 的基数(集合中元素的数量)
> (integer) 3
> 127.0.0.1:6379> smembers student #返回集合 student 中的所有成员
> 1) "wangwu"
> 2) "lisi"
> 3) "zhangsan"
> 127.0.0.1:6379> spop student # 移除并返回集合中的一个随机元素
> "wangwu"
> 127.0.0.1:6379> scard student #移除之后再看集合student的长度
> (integer) 2
> 127.0.0.1:6379> smembers student #移除之后再观察集合student的所有元素
> 1) "lisi"
> 2) "zhangsan"
> 127.0.0.1:6379> 
> 
> sdiff key [key ...]
> #返回一个集合的全部成员,该集合是所有给定集合之间的差集。
> #不存在的 key 被视为空集
> 
> sinter key [key ...]
> #返回一个集合的全部成员,该集合是所有给定集合的交集。
> #不存在的 key 被视为空集。
> #当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)
> 
> sismember key member
> #判断 member 元素是否集合 key 的成员
> 
> srem key member [member ...]
> #移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。
> #当 key 不是集合类型,返回一个错误
> 
> sunion key [key ...]
> #返回一个集合的全部成员,该集合是所有给定集合的并集。
> #不存在的 key 被视为空集。
> 

5. 有序集合(sorted-set)###

Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复

示例:

> # 将一个元素(java)及其 score 值(5)加入到有序集 language 当中
> 127.0.0.1:6379> zadd language 5 java 
> (integer) 1
> #将多个元素(ios,android,html5,sql)及其score值(7,3,8,10)加入到有序集language中
> 127.0.0.1:6379> zadd language 7 ios 3 android 8 html5 10 sql
> (integer) 4 #共添加成功4条数据
> #返回有序集 language 的基数(成员的数量)
> 127.0.0.1:6379> zcard language
> (integer) 5
> #返回有序集 lanuage 中, score 值在 26 之间(默认包括 score 值等于 26 )的成员的数量
> 127.0.0.1:6379> zcount language 2 6
> (integer) 2
> #返回有序集 lanuage 中,指定区间内的成员,并按score从小到大排序
> 127.0.0.1:6379> zrange language 0 -1 withscores
> 1) "android"
> 2) "3"
> 3) "java"
> 4) "5"
> 5) "ios"
> 6) "7"
> 7) "html5"
> 8) "8"
> 9) "sql"
> 10) "10"
> #返回有序集 language 中,成员 java 的 score 值
> 127.0.0.1:6379> zscore language java
> "5"
> 127.0.0.1:6379> 
> 

6. 其他命令###

del key [key ...]
#删除给定的一个或多个 key 

exists key
#检查给定 key 是否存在

expire key seconds
#为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除

keys pattern
#查找所有符合给定模式 pattern 的 key 。
	#KEYS * 匹配数据库中所有 key 。
	#KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
	#KEYS h*llo 匹配 hllo 和 heeeeello 等。
	#KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo

type key
#返回 key 所储存的值的类型

你可能感兴趣的:(px之Redis见解(二))