目录
Redis数据类型
redis是一种高级的key-value的存储系统,键是string类型,其中value支持五种数据类型
值(value):
值的数据类型 | 值的格式说明 |
string | 字符串类型,类似于java中的String类型 |
hash | 由键值对组成,类似于java中的Map |
list | 列表类型,类似于java中的List,元素是存取有序,可以重复 |
set | 集合类型,类似于java中的Set,元素是存取无序,不可重复 |
sorted set/zset | 有序的集合类型,每个元素有一个分数来决定它的顺序 |
命令官网:https://www.redis.net.cn
字符串类型string
在Redis中字符串类型最多可以容纳的数据长度是512M
1.set命令
Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。
SET KEY_NAME VALUE
2.get命令
Redis Get 命令用于获取指定 mkey 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。
GET KEY_NAME
3.del命令
删除指定的键和值,返回删除的个数
4.setex命令
Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
SETEX mykey 60 redis
让mykey这个键只有60秒的存在时间
5.expire命令
Redis Expire 命令用于设置 key (已存在)的过期时间。key 过期后将不再可用。
Expire KEY_NAME TIME_IN_SECONDS
6.setnx命令
Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值,所以不会修改已存在的key值的value值
SETNX KEY_NAME VALUE
补充
mset name(键) list(值) addr(键) sh(值) -->批量添加
mget name addr -->批量查询key的value值
del name addr -->批量删除key
操作示例
centos1:0>set name hhh #添加name(key)值为hhh
"OK"
centos1:0>set age 19
"OK"
centos1:0>mget age name #批量查询key值
1) "19"
2) "hhh"
centos1:0>del name 删除key
"1"
centos1:0>get name
null
centos1:0>mset name aa addr sh #批量添加key
"OK"
centos1:0>mget name age addr
1) "aa"
2) "19"
3) "sh"
centos1:0>del name age
"2"
centos1:0>set addr bj #修改key->addr的value
"OK"
centos1:0>get addr #查询
"bj"
centos1:0>setex name 5 hh #设置name的存活时间为5秒
"OK"
centos1:0>get name
"hh"
centos1:0>get name #5秒到了就变成null
null
centos1:0>set name hh
"OK"
centos1:0>expire name 5 #为已经存在的key设置存活时间
"1"
centos1:0>get name
"hh"
centos1:0>get name
null
centos1:0>setnx addr an #如果不存在addr键就保存该value值,如果存在就不会修改原value值
"0"
centos1:0>set addr an #会修改addr的原value值
"OK"
hash类型
键->字段 值
1.hset命令
Redis Hset 命令用于为哈希表中的字段赋值 。
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,旧值将被覆盖。
HSET KEY_NAME FIELD VALUE
2.hget命令
Redis Hget 命令用于返回哈希表中指定字段的值。
HGET KEY_NAME FIELD_NAME
3.hmset命令
Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。
此命令会覆盖哈希表中已存在的字段。
如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
4.hmget命令
Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。
如果指定的字段不存在于哈希表,那么返回一个 nil 值。
HMGET KEY_NAME FIELD1...FIELDN
5.hdel命令
Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
HDEL KEY_NAME FIELD1.. FIELDN
6.hgetall命令
Redis Hgetall 命令用于返回哈希表中,所有的字段和值。
在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。
HGETALL KEY_NAME
7.hkeys命令
Redis Hkeys 命令用于获取哈希表中的所有字段名。
HKEYS KEY_NAME
8.hvals命令
Redis Hvals 命令返回哈希表所有字段的值。
HVALS KEY_NAME
示例
centos1:0>hset person name hhh #创建一个名字为person的哈希表,并保存name字段和其字段值
"1"
centos1:0>hset person age 13
"1"
centos1:0>hmset person addr sh phone 183 #在person哈希表中批量创建字段
"OK"
centos1:0>hget person addr #查看person哈希表中addr的字段值
"sh"
centos1:0>hmget person name age addr phone #批量查看
1) "hhh"
2) "13"
3) "sh"
4) "183"
centos1:0>hgetall person #获取person哈希表中所有的字段和字段值
1) "name"
2) "hhh"
3) "age"
4) "13"
5) "addr"
6) "sh"
7) "phone"
8) "183"
centos1:0>hdel person name
"1"
centos1:0>hdel person age addr phone #批量删除person哈希表中的字段
centos1:0>hgetall person #如果该哈希表中的所有字段都被删除,那么这个哈希表也会被删除
centos1:0>hmset user name hhh age 18
"OK"
centos1:0>hgetall user
1) "name"
2) "hhh"
3) "age"
4) "18"
centos1:0>hkeys user #查看user哈希表中所有的字段
1) "name"
2) "age"
centos1:0>hvals user #查看user哈希表中所有的字段值
1) "hhh"
2) "18"
List类型
1.lpush命令
Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。
LPUSH KEY_NAME VALUE1.. VALUEN
2.rpush命令
Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。
如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。
3.lpop命令
Redis Lpop 命令用于移除并返回列表的第一个元素。
LPOP list1
4.rpop命令
Redis Rpop 命令用于移除并返回列表的最后一个元素。
RPOP KEY_NAME
5.lrange命令
Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
LRANGE KEY_NAME START END
6.lindex命令
Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
LINDEX KEY_NAME INDEX
7.lset命令
Redis Lset 通过索引来设置元素的值。
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。
LSET KEY_NAME INDEX VALUE
8.llen命令
Redis Llen 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误
LLEN KEY_NAME
9.brpop命令
Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
brpop KEY_NAME TIMEOUT-->删除列表的最后一个元素,如果给列表为空,则阻塞等待timeout秒,然后列表被删除
10.lrem命令
Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
COUNT 的值可以是以下几种:
- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
- count
< 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
LREM KEY_NAME COUNT VALUE
示例
centos1:0>lpush mylist a b c #往mylist列表从左边开始添加数据
"3"
centos1:0>rpush mylist 1 2 3 #从右边添加
"6"
centos1:0>lrange mylist 0 2 #查看mylist列表0到2索引的值
1) "c"
2) "b"
3) "a"
centos1:0>lrange mylist centos1:0>0 -1 #查看mylist列表中所有的值
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
centos1:0>lindex mylist 2 #查看mylist列表中索引为2的值
"a"
centos1:0>rpush mylist 3
"7"
centos1:0>lpop mylist #从左边删除一个元素
"c"
centos1:0>rcentos1:0>rpop mylist #从右边删除一个元素
"3"
centos1:0>llen mylist #查看列表长度
"5"
centos1:0>lpush list a b c b b
"5"
centos1:0>lrem list -2 b #从右边开始删除两个b元素
"2"
centos1:0>lrange list 0 -1
1) "b"
2) "c"
3) "a"
centos1:0>lset list 1 d #修改索引为1的值
"OK"
centos1:0>lrange list 0 -1
1) "b"
2) "d"
3) "a"
centos1:0>brpop list 5 #删除列表中最后一个元素
1) "list"
2) "a"
centos1:0>brpop list 5
1) "list"
2) "d"
centos1:0>brpop list 5
1) "list"
2) "b"
centos1:0>brpop list 5 #列表中没有元素,就会阻塞等待5秒,再删除列表
centos1:0>
set类型
元素无序,不可重复
1.sadd命令
Redis Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。
假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。
当集合 key 不是集合类型时,返回一个错误。
SADD KEY_NAME VALUE1..VALUEN
2.smembers命令
Redis Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。
SMEMBERS KEY
3.sismember命令
Redis Sismember 命令判断成员元素是否是集合的成员。存在返回1,不存在返回0
SISMEMBER KEY VALUE
4.srem命令
Redis Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
当 key 不是集合类型,返回一个错误。
SREM KEY MEMBER1..MEMBERN
5.sinter命令
Redis Sinter 命令返回给定所有给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
SINTER KEY KEY1..KEYN
6.scard命令
Redis Scard 命令返回集合中元素的数量。
SCARD KEY_NAME
实例
centos1:0>sadd myset a b c 1 2 3 #向myset集合添加元素
"6"
centos1:0>sadd myset B
"1"
centos1:0>sismember myset B #判断B元素是否存在于myset集合
"1"
centos1:0>smembers myset #显示myset集合中所有的元素
1) "c"
2) "a"
3) "b"
4) "3"
5) "2"
6) "1"
7) "B"
centos1:0>srem myset c #删除myset集合的c元素
"1"
centos1:0>smembers myset
1) "a"
2) "b"
3) "3"
4) "2"
5) "1"
6) "B"
centos1:0>sadd myset2 a c d 5 2 1
"6"
centos1:0>sinter myset myset2 #查看两个集合的交集
1) "a"
2) "2"
3) "1"
centos1:0>scard myset #查看myset集合的元素个数
"6"
centos1:0>
sorted set类型(zset类型)
Redis有序集合sorted set和set集合一样都是无序,不重复,但是有序集合中每个元素都会关联一个分数(排序因子)。redis就是通过分数来对有序集合中的成员元素进行排序
有序集合中的成员是不可重复的,但是分数是可以重复的。每个有序集合可以存储40多亿个成员。
1.zadd命令
Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。
如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。
分数值可以是整数值或双精度浮点数。
如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
当 key 存在但不是有序集类型时,返回一个错误。
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
2.zrange命令
Redis Zrange 返回有序集中,指定区间内的成员。
其中成员的位置按分数值递增(从小到大)来排序。
具有相同分数值的成员按字典序(lexicographical order )来排列。
ZRANGE key start stop [WITHSCORES]-->代指分数
3.zrevrange命令
Redis Zrevrange 命令返回有序集中,指定区间内的成员。
其中成员的位置按分数值递减(从大到小)来排列。
ZREVRANGE key start stop [WITHSCORES]
4.zrem命令
Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。
当 key 存在但不是有序集类型时,返回一个错误。
ZRANK key member...
5.zcard命令
Redis Zcard 命令用于计算集合中元素的数量。
ZCARD KEY_NAME
6.zrank命令
Redis Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。
排名从0开始
ZRANK key member
7.zsocre命令
Redis Zscore 命令返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
ZSCORE key member
示例
centos1:0>zadd student 90 hhh #向student有序集合添加分数为90的hhh值
"1"
centos1:0>zadd student 70 zbc 80 abc #批量添加
"2"
centos1:0>zrange student 0 -1 withscores #从小到大查询并带有分数
1) "zbc"
2) "70"
3) "abc"
4) "80"
5) "hhh"
6) "90"
centos1:0>zrevrange student 0 -1 withscores #从大到小查询并带有分数
1) "hhh"
2) "90"
3) "abc"
4) "80"
5) "zbc"
6) "70"
centos1:0>zcard student #查看有序集合的元素个数
"3"
centos1:0>zrank student hhh #查看hhh的排名(从小到大,从0开始)
"2"
centos1:0>zscore student hhh #查看hhh的分数
"90"
centos1:0>zrank student abc
"1"
centos1:0>zrank student zcentos1:0>bc
"0"
其他常用命令
1.keys命令
用于查找所有的键,可以使用通配符,如*
keys *
2.del命令
Redis DEL 命令用于删除(任意类型)已存在的键。不存在的 key 会被忽略。
DEL KEY_NAME
3.exists命令
Redis EXISTS 命令用于检查给定 key 是否存在。
EXISTS KEY_NAME
4.type命令
Redis Type 命令用于返回 key 所储存的值的类型。
TYPE KEY_NAME
5.select命令
选择其他数据库
select 数据库编号
6.move命令
Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。
MOVE KEY_NAME DESTINATION_DATABASE
7.TTL命令
Redis TTL 命令以秒为单位返回 key 的剩余过期时间。
返回值:
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
TTL KEY_NAME
8.flushall命令
用来清空redis所有的库
示例
centos1:0>set name hhh
"OK"
centos1:0>sadd myset 20
"1"
centos1:0>keys my* #查看以my开头的所有键
1) "myset"
2) "mylist"
3) "myset2"
centos1:0>keys my??? #查看以my开头后有3个字符的所有键
1) "myset"
centos1:0>set name2 aaa
"OK"
centos1:0>lpush list name3 a b c
"4"
centos1:0>keys *
1) "name"
2) "myset"
3) "mylist"
4) "list"
5) "name2"
6) "student"
7) "myset2"
8) "user"
centos1:0>del name name2 #删除键,不论什么类型
"2"
centos1:0>exists name #判断name键是否存在
"0"
centos1:0>type user #查看user键的类型
"hash"
centos1:0>select 15 #切换到15数据库
"OK"
centos1:15>set name2 ccc
"OK"
centos1:15>move name2 0 #把name2键移动到0数据库
"1"
centos1:15>keys *
centos1:15>select 0
"OK"
centos1:0>keys *
1) "myset"
2) "mylist"
3) "name2"
4) "list"
5) "student"
6) "myset2"
7) "user"
centos1:0>get name2
"ccc"