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"