redis服务支持的数据类型
- 字符类型( string)
字符串 可以是英文字母 或 汉字 - 列表类型 (list)
一个变量名 存储多个数据 - Hash 类型 (hash)
一个变量里可以存储多列 每列对应一个值 - 集合类型
一个变量可以存储多个数据
集合分为
有序集合类型(zset)
无序集合类型( set)
管理操作数据类型
不同的数据类型,对应不同的管理命令,要管理操作数据首先要知道数据是什么类型。
查看数据的类型
type 变量名
> type z1
string #字符串类型
字符串操作命令
字符串
192.168.44.145:6379> set aa 11 #set key values 存单个变量
OK
192.168.44.145:6379> get aa #get key 取单个变量
"11"
192.168.44.145:6379> mset bb 22 cc 33 dd 44 #mset 存多个变量
OK
192.168.44.145:6379> mget aa bb cc dd #mget 取多个变量
1) "11"
2) "22"
3) "33"
4) "44"
192.168.44.145:6379> get zzz #当变量不存在时会返回空
(nil)
存储变量时 设置变量的有效期 px(毫秒) ex (秒)
192.168.44.145:6379> set name dahai ex 10 #10秒有效期
OK
192.168.44.145:6379> get name #10秒内存在
"dahai"
192.168.44.145:6379> get name #10秒后不存在,返回空
(nil)
192.168.44.145:6379> set name huanghe px 10 #10毫秒
OK
192.168.44.145:6379> get name #时间太短,已过期消失,返回空
(nil)
nx 变量不存在是赋值 如果存在就放弃赋值
192.168.44.145:6379> keys *
1) "z2"
2) "z1"
3) "bb"
4) "z3"
5) "dd"
6) "aa"
7) "cc"
8) "z4"
192.168.44.145:6379> set aa 123 nx #变量aa存在,放弃赋值
(nil)
192.168.44.145:6379> set aazz 123 nx #变量aazz不存在,进行赋值
OK
192.168.44.145:6379> keys * #变量aazz赋值成功
1) "z2"
2) "aazz"
3) "z1"
4) "bb"
5) "z3"
6) "dd"
7) "aa"
8) "cc"
9) "z4"
xx 变量存在时赋值 如果不存在放弃赋值
192.168.44.145:6379> keys *
1) "z2"
2) "aazz"
3) "z1"
4) "bb"
5) "z3"
6) "dd"
7) "aa"
8) "cc"
9) "z4"
192.168.44.145:6379> set aazz 1234 xx #变量aazz存在,进行赋值
OK
192.168.44.145:6379> set bbzz 1234 xx #变量bbzz不存在,不进行赋值
(nil)
192.168.44.145:6379> keys *
1) "z2"
2) "aazz"
3) "z1"
4) "bb"
5) "z3"
6) "dd"
7) "aa"
8) "cc"
9) "z4"
变量abcd不存在就赋值,有效期为10秒
192.168.44.145:6379> set abcd 1234 ex 10 nx
OK
向字符串尾部追加值
192.168.44.145:6379> set hi hello
OK
192.168.44.145:6379> get hi
"hello"
192.168.44.145:6379> APPEND hi " world" # 因为字符串包含空格,需要使用引号
(integer) 12 #hi的长度12
192.168.44.145:6379> get hi
"hello world"
获取字符串长度
192.168.44.145:6379> strlen hi #获取字符串长度
(integer) 12
192.168.44.145:6379> set name 张三
OK
192.168.44.145:6379> strlen name #中文返回字节数
(integer) 6
返回变量部分数据,类似切片
192.168.44.145:6379> get hi
"hello world"
h e l l o w o r l d
0,1,2,3,4,5,6,7,8,9,10,11 #正数下标从0开始
h e l l o w o r l d
-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1 #倒数下标从-1开始
192.168.44.145:6379> GETRANGE hi 1 4 #下标1到4
"ello"
192.168.44.145:6379> GETRANGE hi 3 10 #下标3到10
"lo worl"
192.168.44.145:6379> GETRANGE hi -8 -2
"o worl"
整数形式的字符串操作命令
命令 INCR,其作用是让当前键值递增,并返回递增后的值。
192.168.44.145:6379> incr num #键值不存在时,会默认键值为0,所以第一次递增后的结果是1
(integer) 1
192.168.44.145:6379> incr num #递增1
(integer) 2
192.168.44.145:6379> incr num #递增1
(integer) 3
192.168.44.145:6379> get num
"3"
当键值不是整数时,报错
192.168.44.145:6379> set str ww
OK
192.168.44.145:6379> type str
string
192.168.44.145:6379> incr str
(error) ERR value is not an integer or out of range
可以定义递增的值
192.168.44.145:6379> incrby num 3 #已经是3,递增3为6
(integer) 6
192.168.44.145:6379> incrby num 3 #递增3
(integer) 9
192.168.44.145:6379> incrby num 3 #递增3
(integer) 12
192.168.44.145:6379> get num
"12"
命令 DECR,其作用是让当前键值递减,并返回递减后的值。
192.168.44.145:6379> decr num #已是12,递减1为11
(integer) 11
192.168.44.145:6379> decr num #递减1
(integer) 10
192.168.44.145:6379> decr num #递减1
(integer) 9
192.168.44.145:6379> get num
"9"
可以定义递减的值
192.168.44.145:6379> decrby num 2 #已是9,递减2为7
(integer) 7
192.168.44.145:6379> decrby num 2 #递减2
(integer) 5
192.168.44.145:6379> decrby num 2 #递减2
(integer) 3
192.168.44.145:6379> get num
"3"
散列类型
Redis hash 是一个string类型的字段field和值value的映射表,hash特别适合用于存储对象
192.168.44.145:6379> hset user name tom
(integer) 1
192.168.44.145:6379> hset user age 18
(integer) 1
192.168.44.145:6379> hget user name
"tom"
192.168.44.145:6379> hget user age
"18"
设置多个字段
192.168.44.145:6379> hmset user1 name tom age 18 home china sex boy
OK
192.168.44.145:6379> hmget user1 name age home sex
1) "tom"
2) "18"
3) "china"
4) "boy"
192.168.44.145:6379> hgetall user1
1) "name"
2) "tom"
3) "age"
4) "18"
5) "home"
6) "china"
7) "sex"
8) "boy"
判断字段是否存在
192.168.44.145:6379> HEXISTS user1 aaa #不存在为0
(integer) 0
192.168.44.145:6379> HEXISTS user1 name #存在为1
(integer) 1
当字段不存在时赋值
192.168.44.145:6379> hsetnx user aaa 123 #字段aaa不存在,赋值
(integer) 1
192.168.44.145:6379> hsetnx user aaa 223 #字段aaa已存在,不在赋值
(integer) 0
数字递增
192.168.44.145:6379> hincrby user age 18 #已是18,递增18为36
(integer) 36
192.168.44.145:6379> hincrby user age 4 #已是36,递增4为40
(integer) 40
删除字段
192.168.44.145:6379> hdel user1 name #删除字段name
(integer) 1
192.168.44.145:6379> hgetall user1 #name已被删除
1) "age"
2) "18"
3) "home"
4) "china"
5) "sex"
6) "boy"
只获取字段名
192.168.44.145:6379> hkeys user1
1) "age"
2) "home"
3) "sex"
只获取字段值
192.168.44.145:6379> HVALS user1
1) "18"
2) "china"
3) "boy"
获得字段数量
192.168.44.145:6379> hlen user1
(integer) 3
列表类型
列表类型(list)可以存储一个有序的字符串列表
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
常用的操作是向列表两端添加元素,或者获得列表的某一个片段
列表类型内部是使用双向链表(double linked list)实现的,获取越接近两端的元素速度就越快
使用链表的代价是通过索引访问元素比较慢
这种特性使列表类型能非常快速地完成关系数据库难以应付的场景:如社交网站的新鲜事,我们关心的只是最新的内容,使用列表类型存储,即使新鲜事的总数达到几千万个,获取其中最新的100条数据也是极快的
LPUSH命令用来向列表左边增加元素,返回值表示增加元素后列表的长度
192.168.44.145:6379> lpush number 1
(integer) 1
192.168.44.145:6379> lpush number 2 3 4
(integer) 4
192.168.44.145:6379> lrange number 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
RPUSH命令用来向列表右边增加元素,返回值表示增加元素后列表的长度
192.168.44.145:6379> rpush number 5 6 7 8
(integer) 8
192.168.44.145:6379> lrange number 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "5"
6) "6"
7) "7"
8) "8"
从列表两端弹出元素
左端弹出
192.168.44.145:6379> lpop number
"4"
192.168.44.145:6379> lpop number
"3"
192.168.44.145:6379> lpop number
"2"
右端弹出
192.168.44.145:6379> rpop number
"8"
192.168.44.145:6379> rpop number
"7"
192.168.44.145:6379> rpop number
"6"
取出所有元素
192.168.44.145:6379> lrange number 0 -1 #其余已被弹出
1) "1"
2) "5"
获取列表中元素的个数
192.168.44.145:6379> llen number #其余已被弹出
(integer) 2
获得指定索引的元素值
192.168.44.145:6379> lindex number 0 #获取列表下标为0的值
"1"
192.168.44.145:6379> lindex number -1 #获取列表下标为-1的值
"5"
设置指定索引的元素值
192.168.44.145:6379> lset number 0 100 #设置下标为0的元素的值是100
OK
192.168.44.145:6379> lset number -1 200 #设置下标为0的元素的值是200
OK
192.168.44.145:6379> lrange number 0 -1 #查看
1) "100"
2) "200"
插入元素
192.168.44.145:6379> linsert number before 200 150 #在值为200的元素前插入值150
(integer) 3
192.168.44.145:6379> lrange number 0 -1
1) "100"
2) "150"
3) "200"
192.168.44.145:6379> linsert number after 200 300 #在值为200的元素后插入值300
(integer) 4
192.168.44.145:6379> lrange number 0 -1
1) "100"
2) "150"
3) "200"
4) "300"
集合类型
集合中的每个元素都是不同的,且没有顺序
创建集合
192.168.44.145:6379> sadd jjj a b c
(integer) 3
192.168.44.145:6379> sadd jjj c d e
(integer) 2
192.168.44.145:6379> SMEMBERS jjj #集合元素,唯一无序
1) "a"
2) "b"
3) "d"
4) "c"
5) "e"
删除集合元素
192.168.44.145:6379> srem jjj e
(integer) 1
192.168.44.145:6379> SMEMBERS jjj
1) "b"
2) "d"
3) "c"
4) "a"
判断元素是否在集合中
192.168.44.145:6379> SISMEMBER jjj a #在集合,返回1
(integer) 1
192.168.44.145:6379> SISMEMBER jjj ff #不在集合,返回0
(integer) 0
集合运算
192.168.44.145:6379> sadd s1 a b c d e
(integer) 5
192.168.44.145:6379> sadd s2 a e g h j
(integer) 5
192.168.44.145:6379> sinter s1 s2 #交集
1) "a"
2) "e"
192.168.44.145:6379> SUNION s1 s2 #并集
1) "g"
2) "a"
3) "e"
4) "c"
5) "j"
6) "h"
7) "b"
8) "d"
192.168.44.145:6379> SDIFF s1 s2 #差集
1) "b"
2) "c"
3) "d"
获得集合中元素个数
192.168.44.145:6379> SCARD s1
(integer) 5
随机获得集合中的元素
192.168.44.145:6379> SRANDMEMBER s1 2 #随机获取集合s1的两个不同元素
1) "a"
2) "b"
192.168.44.145:6379> SRANDMEMBER s1 -2 #随机获取集合s1的两个可能相同元素
1) "e"
2) "b"
192.168.44.145:6379> SRANDMEMBER s1 -2 #随机获取集合s1的两个可能相同元素
1) "d"
2) "d"
集合中随机弹出一个元素
192.168.44.145:6379> spop s1
"b"
192.168.44.145:6379> SMEMBERS s1 #b已被弹出
1) "a"
2) "e"
3) "c"
4) "d"
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/154056.html