redis 数据类型 管理操作命令

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。redis 数据类型 管理操作命令,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

redis服务支持的数据类型

  1. 字符类型( string)
    字符串 可以是英文字母 或 汉字
  2. 列表类型 (list)
    一个变量名 存储多个数据
  3. Hash 类型 (hash)
    一个变量里可以存储多列 每列对应一个值
  4. 集合类型
    一个变量可以存储多个数据
    集合分为
    有序集合类型(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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!