Redis五大基本数据类型

String

redis的string类型可以把它想成Byte,它有关于字符串、字节数组、数值、位图bitmap的操作
set命令

127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"

在这里插入图片描述
可以看出 set命令除了接 key value,还可以追加过期时间,还有两个值[NX|XX],nx的意思是不存在的时候才去设置,可以当做分布式锁使用,哪个线程设置成功了代表拿到了锁,xx的意识是存在的时候采取设置。
除了单挑的get set还有mget mset

127.0.0.1:6379> mset k1 hello k2 word
OK
127.0.0.1:6379> mget k1 k2
1) "hello"
2) "word"

append

127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> append k1 word
(integer) 9
127.0.0.1:6379> get k1
"helloword"

getrange

127.0.0.1:6379> set k1 helloword
OK
127.0.0.1:6379> get k1
"helloword"
127.0.0.1:6379> GETRANGE k1 0 4
"hello"

redis中还有正向索引和方向索引
正向索引就是第一个是0第二个是1
反向索引就是最后一个是-1前面那个就是-2
例如要获取k1中word

127.0.0.1:6379> GETRANGE k1 5 -1
"word"

setrange
将指定偏移量位置的值进行覆盖

127.0.0.1:6379> SETRANGE k1 5 redis
(integer) 10
127.0.0.1:6379> get k1
"helloredis"

strlen
获取长度

127.0.0.1:6379> strlen k1
(integer) 10

使用type命令可以查看key的类型

127.0.0.1:6379> type k1
string

string类型的值他的编码有int、string等
这样在做数值计算的时候redis不需要每次进行判断数值是否支持计算,可以提速

127.0.0.1:6379> set k1 11
OK
127.0.0.1:6379> set k2 sad
OK
127.0.0.1:6379> object encoding k1
"int"
127.0.0.1:6379> object encoding k2
"embstr"

redis如果发现是int类型,可以进行一系列数值操作
固定加一、减一

127.0.0.1:6379> incr k1
(integer) 12
127.0.0.1:6379> decr k1
(integer) 11

指定数值相加、相减

127.0.0.1:6379> incrby k1 11
(integer) 22
127.0.0.1:6379> decrby k1 11
(integer) 11

除了加整数还可以加小数

127.0.0.1:6379> incrbyfloat k1 11.5
"22.5"

bitmap
应用场景
1.用户签到
2.用户在线状态
3.统计活跃用户
4.各种状态值
5.自定义布隆过滤器
6.点赞功能

设置或清除指定偏移量上的位

127.0.0.1:6379> setbit k1 5 1
(integer) 0

获取指定偏移量上的位

127.0.0.1:6379> getbit k1 5
(integer) 1

计算设置为 1 的数量

127.0.0.1:6379> bitcount k1 0 -1
(integer) 1

寻找第一个二进制位

127.0.0.1:6379> BITPOS k1 1 0 -1
(integer) 5

BITOP
对一个或多个保存二进制位的字符串key进行位元操作,并将结果保存到destkey上。
operation可以是AND、OR、NOT、XOR这四种操作中的任意一种。

127.0.0.1:6379> set k1 A
OK
127.0.0.1:6379> set k2 B
OK
127.0.0.1:6379> bitop or orkey k1 k2
(integer) 1
127.0.0.1:6379> get orkey

list

弹推数据
同向push和pop是对list做栈使用
反向则是做队列使用

127.0.0.1:6379> lpush k1 aa bb cc
(integer) 3
127.0.0.1:6379> lpop k1
"cc"
127.0.0.1:6379> rpush k1 bb
(integer) 3
127.0.0.1:6379> rpop k1
"bb"

获取list所有key

127.0.0.1:6379> LRANGE k1 0 -1
1) "bb"
2) "aa"

获取指定索引位置的值

127.0.0.1:6379> lindex k1 1
"aa"

设置指定索引位置的值

127.0.0.1:6379> lset k1 1 ff
OK
127.0.0.1:6379> lindex k1 1
"ff"

同步阻塞,等到拿到值才退出阻塞,可以作为消息订阅使用

127.0.0.1:6379> blpop k1 0
1) "k1"
2) "hello"
(7.84s)

删除两端的值

127.0.0.1:6379> lrange k1 0 -1
1) "d"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> ltrim k1 0 -2
OK
127.0.0.1:6379> lrange k1 0 -1
1) "d"
2) "b"
3) "a"
4) "c"
5) "b"

删除指定数量的元素,count为负数时则反着删,就是从-1这个位置开始删

127.0.0.1:6379> lrem k1 2 b
(integer) 2
127.0.0.1:6379> lrange k1 0 -1
1) "d"
2) "a"
3) "c"

hash

hash代表value里边自身又是一个键值对
插入值

127.0.0.1:6379> hset k1 name yy age 18
(integer) 2

获取所有值

127.0.0.1:6379> hvals k1
1) "yy"
2) "18"

删除值

127.0.0.1:6379> hdel k1 name
(integer) 1
127.0.0.1:6379> hvals k1
1) "18"

数值计算,数值可以是正负

127.0.0.1:6379> hincrby k1 age 1
(integer) 19

set

set的特征是无序、去重
添加数据,数据支持多个

127.0.0.1:6379> sadd k1 aa bb cc dd aa
(integer) 4
127.0.0.1:6379> smembers k1
1) "aa"
2) "dd"
3) "cc"
4) "bb"

得到交叉元素

127.0.0.1:6379> sadd k2 aa bb dd ff mm
(integer) 5
127.0.0.1:6379> SINTER k1 k2
1) "aa"
2) "dd"
3) "bb"

将得到的交叉元素赋值给一个key

127.0.0.1:6379> SINTERSTORE k3 k1 k2
(integer) 3
127.0.0.1:6379> SMEMBERS k3
1) "aa"
2) "bb"
3) "dd"

并集,也支持使用store创建key接受值

127.0.0.1:6379> SUNION k1 k3
1) "bb"
2) "cc"
3) "dd"
4) "aa"

删除元素

127.0.0.1:6379> srem k1 aa
(integer) 1
127.0.0.1:6379> SMEMBERS k1
1) "dd"
2) "cc"
3) "bb"

差集,通过调整key的位置得到哪边的数据

127.0.0.1:6379> SMEMBERS k1
1) "dd"
2) "cc"
3) "bb"
127.0.0.1:6379> SMEMBERS k2
1) "dd"
2) "ff"
3) "mm"
4) "aa"
5) "bb"
127.0.0.1:6379> sdiff k1 k2
1) "cc"
127.0.0.1:6379> sdiff k2 k1
1) "aa"
2) "mm"
3) "ff"

随机事件
正数:取出一个去重的结果集,不会超过已有集
负数:取出一个带重复的结果集,满足count

127.0.0.1:6379> SRANDMEMBER k1 2
1) "dd"
2) "cc"
127.0.0.1:6379> SRANDMEMBER k1 -2
1) "dd"
2) "dd"

zset

特征:有序、去重,排序方法使用的是skip list
插入元素

127.0.0.1:6379> zadd k1  100 mm 99 ff 22 gg 
(integer) 3

统计排序区间的元素数量

127.0.0.1:6379> zcount k1 90 100
(integer) 2

给指定元素重新设置排序值

127.0.0.1:6379> ZINCRBY k1 110 gg
"132"
127.0.0.1:6379> zrange k1 0 -1
1) "ff"
2) "mm"
3) "gg"

删除指定排序区间的元素

127.0.0.1:6379> ZREMRANGEBYSCORE k1 0 100
(integer) 2

反向取值

127.0.0.1:6379> ZREVRANGE k1 0 -1
1) "mm"
2) "ff"
3) "gg"

通过排序区间取值

127.0.0.1:6379> ZRANGEBYSCORE k1 0 100
1) "gg"
2) "ff"
3) "mm"

交集
不带权重则有相同的元素排序值就累加

127.0.0.1:6379> zadd k1 100 a 99 b 98 c
(integer) 3
127.0.0.1:6379> zadd k2 100 d 99 b 98 f
(integer) 3
127.0.0.1:6379> ZUNIONSTORE k3 2 k1 k2
(integer) 5
127.0.0.1:6379> ZRANGE k3 0 -1 withscores
 1) "c"
 2) "98"
 3) "f"
 4) "98"
 5) "a"
 6) "100"
 7) "d"
 8) "100"
 9) "b"
10) "198"

带权重则权重小的排序值都要除2在相加

127.0.0.1:6379> ZUNIONSTORE k4 2 k1 k2 weights 1 0.5
(integer) 5
127.0.0.1:6379> ZRANGE k4 0 -1 withscores
 1) "f"
 2) "49"
 3) "d"
 4) "50"
 5) "c"
 6) "98"
 7) "a"
 8) "100"
 9) "b"
10) "148.5"

不带权重按最小、最大的排序取值

127.0.0.1:6379> ZADD k1 100 ff 22 cc 88 gg
(integer) 3
127.0.0.1:6379> ZADD k2 1 ff 22 hh 99 gg
(integer) 3
127.0.0.1:6379> ZUNIONSTORE k3 2 k1 k2 aggregate min
(integer) 4
127.0.0.1:6379> ZUNIONSTORE k4 2 k1 k2 aggregate max
(integer) 4
127.0.0.1:6379> ZRANGE k3 0 -1 withscores
1) "ff"
2) "1"
3) "cc"
4) "22"
5) "hh"
6) "22"
7) "gg"
8) "88"
127.0.0.1:6379> ZRANGE k4 0 -1 withscores
1) "cc"
2) "22"
3) "hh"
4) "22"
5) "gg"
6) "99"
7) "ff"
8) "100"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值