Redis的命令与基本数据类型
一、基本命令1.沟通命令ping,查看redis服务运行状态返回结果为PONG表示服务运行正常。2.dbsize:查看当前库(默认是第0个库)中key的数目3.切换库命令:select db(db为一个数字)redis默认有16个库,0~15。4.删除当前库中的所有数据:flushdb5.退出客户端:exit或quit二、Redis的Key的操作命令1.创建key:set key value2.k
一、基本命令
1.1 ping
1.沟通命令ping,查看redis服务运行状态
返回结果为PONG表示服务运行正常。
1.2 dbsize
2.dbsize:查看当前库(默认是第0个库)中key的数目
1.3 select n
3.切换库命令:select db(db为一个数字)
redis默认有16个库,0~15。
1.4 flushdb删除当前库的数据
4.删除当前库中的所有数据:flushdb
1.5 退出客户端exit/quit
5.退出客户端:exit或quit
二、redis通用命令
Redis中的数据整体是一个map。
2.1 keys pattern查找
1.查找符合模式串的key:keys pattern
pattern是一个字符串,可以使用通配符,查找所有符合pattern指定模式的key。
上例中的*识别所有字符串。
注意:
在生产环境中一般不适用keys,因为keys若搜索数量大处于阻塞状态,那么redis就不再对外提供服务了。生产环境一般用scan命令替代。
2.2 exists key判断是否存在
2.判断某个key是否存在:exists key [key …]
返回值为整数,存在key返回1,其他返回0,使用多个key,返回存在的key的数量。
2.3 expire 设置生存时间
3.设置key的生存时间:expire key seconds
超过时间,key自动删除,单位是秒。返回值是整数,设置成功返回数字1,其他情况是0.
2.4 ttl查看剩余生存时间
4.查看key的剩余生存时间:ttl key
返回值以秒为单位。特别地:返回值为**-1表示没有设置key的生存时间,key永不过期;范围值为-2表示key不存在**。
2.5 type查看类型
5.查看key所存储值的数据类型:type key
返回值:none(key不存在)
string(字符串)
list列表)
set(集合)
zset(有序表)
hash(哈希表)
2.6 del删除
6.删除key:del key[key...]
返回值为数字,表示删除的key的数量。
2.7 rename 重命名
2.8 move移动所在数据库
move <库>
2.9 persist将有生存时间的转为永久存在
persist
2.10 randomkey随机返回一个key
randomkey
一般用于判断一个数据库是否为空(使用keys *命令非常影响性能)。
2.11 scan命令
scan [MATCH pattern] [COUNT count] [TYPE type]
说明:
cursor是指针,说明检索位置。count为检索个数。match是检索条件。
例如:
三、不同类型Key的操作命令
Redis的数据类型
此外还有其他的一些类型,用于完成一些功能。
常见的是基本数据类型。
可以使用"help @类型来查看":
获取String类型的指令:
3.1 String型
String类型的value中可以有任意数据,包括数值型,甚至是二进制的图片、音频、视频、序列化对象等。一个String类型的value最大是512M大小。
int,float转化为二进制存储,string使用自负编码存储。
3.1.0 set创建与get获取
1.创建key:set key value
补充mset创建多个与mget获取多个
补充setnx :存在不执行,不存在执行(真正的新增,只有新增效果,不会修改)
也可以把命令分开写:
补充setex:创建时指定生存时间
也可以把命令分开写:
3.1.1 append追加字符长度
3.1.2 incr自增1与decr自减1
补充:incrby指定步长自增与decrby指定步长自减(只能是整数)
补充:incrbyfloat可以增加浮点数(必须执行步长)
3.1.3 strlen获取字符串长度
3.1.4 getrange获取字串
3.1.5 setrange替换字串
redis的key的层级格式
思考:redis没有类似MySQL中的Table的概念,该如何区分不同类型的key?
例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,该如何区分。解决方案为key的层级结构。
例如:
通过客户端查询可以看到冒号隔开的部分形成了层级结构:
3.2 Hash类型
Hash类型,也叫散列,其value是一个无序字典,类似于java中的HashMap结构。String结构是将对象序列化为JSON字符串后储存,当需要修改对象某个字段时很不方便。
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:
可以看出,相对于通用指令,前面多了一个H。
例如:
3.3 List类型
与java中的LinkedList类似,可以看成是一个双向链表结构,既支持正向检索也支持反向检索。
特征也和Linkedlist类似:
(1)有序(2)元素可以重复(3)插入和删除快(4)查询速度一般
说明:LRANGE 指令中的star和end的位置从0开始编号,且结果star和end位置都包含。
例如:
注意:LRANGE的编号与客服端里看到的编号不一致,LRANGE里的编号从0开始。
3.4 Set类型
与java中的HashSet类似,底层也是一个hash表。
具备HashSet类似的特征:
(1)无序(2)元素不可重复(3)查找快(4)支持交集、并集、差集等功能
例如:
3.5 SortedSet类型(zset)
与java中的TreeSet类似。但底层数据结构不同。TreeSet底层是红黑树;SortedSet中的每一个元素带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。
若要实现倒序的结果,需在指令名中加REV(Z之后)。
例如:
结果:
从上图中可以看出,图形化界面展示出的数据默认按score升序排序。
总结
(1)新建或修改
string:set(一个),mset(多个)
hash:hset(多个),hmset(多个)
list:lpush,rpush(一个或多个)
set:sadd(一个或多个)
zset:zadd(一个或多个)
(2)获取
string:get(一个),mget(多个)
hash:hget(多个),hmget(多个),hgetall(所有),hkeys(所有键),hvals(所有值)
list:lrange(获取范围内)
set:smembers(所有)
zset:zscore,zrank,zrange,zrangebyscore
(3)移除元素
string、hash:无
list:lpop,rpop,blpop,brpop(一个或多个,指定个数)
set:srem(一个或多个)
zset:zrem(一个或多个)
(4)统计个数
set:scard
zset:zcard,zcount
(5)设置生存周期
string:setex key time value,set key value ex time;
(6)不存在才创建
string:setnx key value,set key value nx
hash:hsetnx
(7)自增
string:incr,incrby,incrbyfloat
hash:hincrby
zset:zincrby
(8)判断元素是否存在
set:sismember
zset:zscore(查询到分数则存在,返回nil则不存在)

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)