Redis教程02[五大数据]

7 篇文章 0 订阅
7 篇文章 0 订阅

本文介绍redis中的五大基本数据类型及常用命令

数据类型说明
String是Redis中最基本的数据类型,二进制安全的,它可以包含任意数据类型。如图片。Redis中String类型的数据上限的512M。
ListRedis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
Hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
HashSet 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
ZSet有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

启动redis服务并登陆客服端
在这里插入图片描述

string介绍

通用命令

五种数据类型的数据结构差异所以命令也不同,但是也有一些相通的命令,在这里简单介绍:
创建一个简单的k/v对

127.0.0.1:6379> set name xn
OK

在redis中默认有16个数据库,编号0-15,正常情况下,用户登陆后首先看到的是0号数据库,可以手动换到其他数据库:

select

127.0.0.1:6380> set name zhangsan
OK
127.0.0.1:6380> select 4
OK
127.0.0.1:6380[4]> get name
(nil)
127.0.0.1:6380[4]> select 0
OK
127.0.0.1:6380> get name
"zhangsan"

del命令

该命令用于存在key删除key

127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> del name
(integer) 0

dump命令

序列化key,并返回被序列化的值

127.0.0.1:6379> dump name
"\x00\x03dpb\t\x00\xe5\xa2\xc4\xd1\xfc\xb2\xd9\xcb"
127.0.0.1:6379> dump name1
(nil)

如果key不存在就返回nil

exists命令

检查key是否存在

127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0

1表示存在,o表示不存在

ttl命令

以秒为单位,返回key的剩余时间

127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl name1
(integer) -2

-2表示key不存在,-1表示没有设置有效时间,不会过期,我们可以通过EXPIRE key 设置有效时间

expire命令

是指有效时间,单位为秒

127.0.0.1:6379> expire name 120
(integer) 1
127.0.0.1:6379> ttl name
(integer) 112
127.0.0.1:6379> ttl name
(integer) 10
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> ttl name
(integer) -2

112是剩余的有效时间

pexpire命令

同样是设置过期时间,只是单位为毫秒

127.0.0.1:6379> pexpire name 100
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2

-2就表示已经不存在了

pttl

和ttl命令一样,只是返回单位为毫秒

127.0.0.1:6379> pexpire name 100000
(integer) 1
127.0.0.1:6379> ttl name
(integer) 91
127.0.0.1:6379> pttl name
(integer) 84601

keys

通过正则表达式查找符合条件的key

127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set sex 男
OK
127.0.0.1:6379> set address 深圳
OK
127.0.0.1:6379> keys *
1) "age"
2) "address"
3) "sex"

key * 查询所有的key

randomkey命令

从当前数据库随机返回一个key

127.0.0.1:6379> randomkey
"address"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"sex"
127.0.0.1:6379> randomkey
"age"

type命令

返回key对应的数据类型

127.0.0.1:6379> type name
none
127.0.0.1:6379> type age
string
127.0.0.1:6379> type sex
string

不存在的返回none

rename命令

修改key的名称

127.0.0.1:6379> rename age age1
OK
127.0.0.1:6379> exists age
(integer) 0
127.0.0.1:6379> exists age1
(integer) 1

flushdb

清空当前库

flushall

清空所有库

string类型之BIT

Redis中字符串的存储方式都是以二进制的方式存储的。
比如:

127.0.0.1:6379> set k1 a
OK

k1的值为a,对应的ascii码是97,转换为二进制就是01100001。BIT命令就是对这个二进制数据进行操作的

命令说明
getbit获取二级制中对应偏移量的值
setbit设置对应二进制位的值
bitcount统计二进制中位中为1的个数
bitop对二进制数据做位元操作,与,或,非,异或操作
bitpos返回字符串里面第一个被设置为1或者0的bit位

GetBit命令

用于key所储存的字符串值,获取指定偏移量的为(bit)

127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> getbit k1 0
(integer) 0
127.0.0.1:6379> getbit k1 1
(integer) 1
127.0.0.1:6379> getbit k1 2
(integer) 1
127.0.0.1:6379> getbit k1 3
(integer) 0
127.0.0.1:6379> getbit k1 4
(integer) 0
127.0.0.1:6379> getbit k1 5
(integer) 0
127.0.0.1:6379> getbit k1 6
(integer) 0
127.0.0.1:6379> getbit k1 7
(integer) 1

当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0

SetBit命令

用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit),返回的结果是该位上原来的bit值。比如我们设置 k1为a,k2为c,a对应的ASCII码为97(01100001),c对应的ASCII码为99(01100011),相差了一个1,如此我们就可以通过setbit来调整

127.0.0.1:6379> set k2 c
OK
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> setbit k1 6 1
(integer) 0
127.0.0.1:6379> get k1
"c"

如此我们就将k1的值快速调整为了c

BitCount命令

用来统计二进制中为1的个数,比如a(97 01100001)为3,c(99 01100011)为4.

127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> bitcount k1
(integer) 3
127.0.0.1:6379> bitcount k2
(integer) 4

BitOp命令

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。BITOP 命令支持 AND(与) 、 OR(或) 、 NOT(非) 、 XOR(异或)运算。比如a 01100001和c 01100011进行相关运算

127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> bitop and k3 k1 k2
(integer) 1
127.0.0.1:6379> get k3
"a"
127.0.0.1:6379> bitop or k4 k1 k2
(integer) 1
127.0.0.1:6379> get k4
"c"
127.0.0.1:6379> bitop xor k5 k1 k2
(integer) 1
127.0.0.1:6379> get k5
"\x02"

not运算注意参数个数

127.0.0.1:6379> bitop not k6 k1
(integer) 1
127.0.0.1:6379> get k6
"\x9e"

BitPos命令

返回字符串里面第一个被设置为1或者0的bit位。
返回一个位置,把字符串当做一个从左到右的字节数组,第一个符合条件的在位置0,其次在位置8,等等。还是以a为例01100001

127.0.0.1:6379> bitpos k1 1
(integer) 1
127.0.0.1:6379> bitpos k1 0
(integer) 0

其他五个命令就不一一演示

Hash介绍

在实际开发过程中我们肯定会碰到很多需要存储对象的需求,此时hash就比较合适了。hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

命令说明
hset设置key中字段的值
hget获取key中字段的值
hmset批量设置key中的字段
hmget批量获取key中字段的值
hdel删除key中指定的字典
hsetnx设置key中的字段的值,如果字段存在就忽略
hvals获取key中所有的字段的值
hkeys获取key中的所有的字段
hgetall获取key中的所有的字段及值
hexists判断key中的字段是否存在
hincrby将key中的字段增加特定的值
hincrbyfloat和hincrby类似增加的float类型的数据
hlen获取key中的字段的个数
hstrlen获取key中某个字段的值得长度

List类型命令介绍

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

命令说明
lpush向列表头部添加一个或多个元素
lrange获取列表中指定的元素0第一个,-1最后一个
rpush向列表尾部添加一个或多个元素
llen获取列表长度
lset通过index设置列表的值
rpop移除列表最后一个元素,并返回
lpop移除列表头部元素,并返回
lindex获取列表中对应下标的值
ltrim截取列表对应的元素
blpoplpop的阻塞版
brpoprpop的阻塞版
rpoplpush移除一个列表的最后一个元素,并将该元素添加到另一个列表的头部
brpoplpushrpoplpush的阻塞版本

Set集合命令介绍

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

命令说明
sadd添加一个或多个元素到集合中,如果集合中存在该元素则忽略
scard返回集合中的元素的个数
sismember判断集合中是否含有某元素
smembers获取集合中的所有的元素
srem删除集合中指定的元素
srandmember随机返回集合中的元素,版本2.6后在命令之后可以跟一个count。指定随机返回的元素个数
spop和srandmember类似,只是spop会将获取的元素移除而srandmember不会移除元素
smove将元素从一个集合移动到另一个集合中
sdiff返回两个集合的差集
sdiffstore和sdiff类似,不同的是会将差集结果保存起来
sinter获取两个集合的交集
sinterstore和sinter类似,不同的是将结果保存起来了
sunion获取两个集合的并集
sunionstore获取两个集合的并集并保存起来

Zset集合命令介绍

有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复

命令说明
zadd向有序集合中添加一个或多个 分数/元素对
zscore获取有序集合中元素对应的分数
zrange获取集合中的元素,如果加上withscores则会连同分数一并返回
zrevrange和zrange类似,只是将结果倒序了
zcard返回集合中元素的个数
zcount统计集合中分数在min和max之间的元素个数
zrangebyscore可以根据score范围查找元素
zrank获取元素在集合中的排名,从小到大,最小的是0
zrevrank获取元素在集合中的排序,从大到小
zincrby给元素增加分数,如果不存在就新创建元素,并赋予对应的分数
zinterstore计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
zrem从集合中弹出一个元素
zlexcount计算有序集合中指定字典区间内成员数量
zrangebylex获取指定区间的元素,分数必须相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值