redis的数据类型

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

1. 字符串

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

示例:


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>    在上面的示例中,`set`和`get`是Redis命令,`name`是Redis中使用的键,`yiibai.com`是存储在Redis中的字符串的值.

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

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


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

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

incrby key increment
#将 key 所储存的值加上增量 increment 
#如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
#如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
#本操作的值限制在 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. 散列表

​ 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 中的一个或多个指定域,不存在的域将被忽略

hvals key
#返回哈希表 key 中所有域的值

3. 列表

​ 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. 集合

​ 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. 有序集合

​ 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 值在 2  6 之间(默认包括 score 值等于 2  6 )的成员的数量
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 所储存的值的类型

你可能感兴趣的:(Redis)