字符串
Redis中的字符串不像python,是可变字符串。字符串作为变量,创建时会开辟一个比初始字符串本身更大的内存空间,后续扩大该字符串内容时,为该字符串分配的内存空间也会同步变大。当分配的内存小于1M时,该空间成倍扩大;超过1M时,每次扩展最大扩展1M。单个字符串的存储上限为512M。
设置过期时间
缓存页面,数据量大,但是动态,一直不过期一直拿不到,设置n秒,过期来新的,服务端压力低。
expire key seconds
127.0.0.1:6379[4]> keys *
1) "db"
2) "db1"
127.0.0.1:6379[4]> expire db 3
(integer) 1
127.0.0.1:6379[4]> keys *
1) "db"
2) "db1"
127.0.0.1:6379[4]> keys *
1) "db1"
setex key seconds value
127.0.0.1:6379[4]> setex db2 3 kafka
OK
127.0.0.1:6379[4]> keys *
1) "db1"
2) "db2"
127.0.0.1:6379[4]> keys *
1) "db1"
使用ttl查询过期时间
127.0.0.1:6379[4]> setex db2 10 kafka
OK
127.0.0.1:6379[4]> ttl db2
(integer) 7
127.0.0.1:6379[4]> ttl db2
(integer) 4
127.0.0.1:6379[4]> ttl db1
(integer) -1
127.0.0.1:6379[4]> ttl db2
(integer) -2
数值运算
127.0.0.1:6379[4]> set num 1
OK
127.0.0.1:6379[4]> get num
"1"
127.0.0.1:6379[4]> incr num
(integer) 2
127.0.0.1:6379[4]> get num
"2"
127.0.0.1:6379[4]> incr num
(integer) 3
127.0.0.1:6379[4]> get num
"3"
127.0.0.1:6379[4]> decr num
(integer) 2
127.0.0.1:6379[4]> get num
"2"
127.0.0.1:6379[4]> incrby num 3
(integer) 5
127.0.0.1:6379[4]> get num
"5"
127.0.0.1:6379[4]> decrby num 7
(integer) -2
127.0.0.1:6379[4]> get num
"-2"
超出范围
127.0.0.1:6379[4]> set num1 10293871234180912347809
OK
127.0.0.1:6379[4]> get num1
"10293871234180912347809"
127.0.0.1:6379[4]> incr num1
(error) ERR value is not an integer or out of range
批量设置键值对
插入
mset key value key value key value
127.0.0.1:6379[4]> mset int1 10 int2 20 int3 30 int4 40 int5 50
OK
127.0.0.1:6379[4]> get int3
"30"
查询
mget key key key key
127.0.0.1:6379[4]> mget int1 int2 int3 int4 int5
1) "10"
2) "20"
3) "30"
4) "40"
5) "50"
列表
列表最多可存储
2
32
−
1
2^{32}-1
232−1个元素。列表插入时间复杂度为
O
(
1
)
O(1)
O(1),索引定位实际上很慢,
O
(
n
)
O(n)
O(n)。
使用lpush key value1 value2 value3从左插入,结果形式为key: [value3, value2, value1]。如果改为rpush,则从右侧添加,key: [value1, value2, value3]
比如现在在数据库2中设置列表
127.0.0.1:6379[4]> select 2
OK
127.0.0.1:6379[2]> lpush l1 v1 v2 v3
(integer) 3
127.0.0.1:6379[2]> rpush l2 v1 v2 v3
(integer) 3
查询
lpop key
127.0.0.1:6379[2]> lpop l1
"v3"
127.0.0.1:6379[2]> lpop l1
"v2"
127.0.0.1:6379[2]> lpop l1
"v1"
127.0.0.1:6379[2]> lpop l1
(nil)
rpop key
127.0.0.1:6379[2]> rpop l2
"v3"
127.0.0.1:6379[2]> rpop l2
"v2"
127.0.0.1:6379[2]> rpop l2
"v1"
127.0.0.1:6379[2]> rpop l2
(nil)
rpush+lpop 模拟队列
rpush+rpop 模拟栈
插入
linsert key after value value
127.0.0.1:6379[2]> rpush l3 v1 v2 v3 v5 v6
(integer) 5
127.0.0.1:6379[2]> linsert l3 after v3 v4
(integer) 6
127.0.0.1:6379[2]> lpop l3
"v1"
127.0.0.1:6379[2]> lpop l3
"v2"
127.0.0.1:6379[2]> lpop l3
"v3"
127.0.0.1:6379[2]> lpop l3
"v4"
127.0.0.1:6379[2]> lpop l3
"v5"
127.0.0.1:6379[2]> lpop l3
"v6"
127.0.0.1:6379[2]> lpop l3
(nil)
before
127.0.0.1:6379[2]> linsert l4 before v4 v3
(integer) 4
127.0.0.1:6379[2]> lpop l4
"v1"
127.0.0.1:6379[2]> lpop l4
"v2"
127.0.0.1:6379[2]> lpop l4
"v3"
127.0.0.1:6379[2]> lpop l4
"v4"
127.0.0.1:6379[2]> lpop l4
(nil)
127.0.0.1:6379[2]> linsert l4 before v4 v3
(integer) 0
覆盖
127.0.0.1:6379[2]> rpush l5 v1 v2 v3 v4
(integer) 4
127.0.0.1:6379[2]> lset l5 2 v5
OK
127.0.0.1:6379[2]> lpop l5
"v1"
127.0.0.1:6379[2]> lpop l5
"v2"
127.0.0.1:6379[2]> lpop l5
"v5"
127.0.0.1:6379[2]> lpop l5
"v4"
127.0.0.1:6379[2]> lpop l5
(nil)
127.0.0.1:6379[2]> rpush l6 v1 v2 v3 v4
(integer) 4
127.0.0.1:6379[2]> lset l6 4 v5
(error) ERR index out of range
127.0.0.1:6379[2]> lindex l6 3
"v4"
127.0.0.1:6379[2]> lindex l6 4
(nil)
127.0.0.1:6379[2]> lrange l6 2 3
1) "v3"
2) "v4"
127.0.0.1:6379[2]> lrange l6 0 5
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379[2]> lrange l6 -1 5
1) "v4"
127.0.0.1:6379[2]> lrange l6 -2 5
1) "v3"
2) "v4"
127.0.0.1:6379[2]> lrange l6 3 -1
1) "v4"
127.0.0.1:6379[2]> lrange l6 -2 -3
(empty array)
哈希表
字典中的字典。
最多能存储
2
32
−
1
2^{32}-1
232−1个键值对。
对象。
hset key field value
127.0.0.1:6379[2]> select 8
OK
127.0.0.1:6379[8]> hset cat colour grey legs 4 cry meow
(integer) 3
127.0.0.1:6379[8]> hset cat maxJump 7
(integer) 1
127.0.0.1:6379[8]> hget cat colour
"grey"
127.0.0.1:6379[8]> hget cat maxJump
"7"
127.0.0.1:6379[8]> hmget cat maxJump legs cry
1) "7"
2) "4"
3) "meow"
127.0.0.1:6379[8]> hgetall cat
1) "colour"
2) "grey"
3) "legs"
4) "4"
5) "cry"
6) "meow"
7) "maxJump"
8) "7"
127.0.0.1:6379[8]> hkeys cat
1) "colour"
2) "legs"
3) "cry"
4) "maxJump"
127.0.0.1:6379[8]> hvals cat
1) "grey"
2) "4"
3) "meow"
4) "7"
127.0.0.1:6379[8]> hlen cat
(integer) 4
集合
元素唯一,不能重复
添加查找删除
O
(
1
)
O(1)
O(1)
sadd key member member member
127.0.0.1:6379[8]> sadd animal cat dog fish
(integer) 3
127.0.0.1:6379[8]> smembers animal
1) "fish"
2) "cat"
3) "dog"
127.0.0.1:6379[8]> scard animal
(integer) 3
127.0.0.1:6379[8]> srandmember animal
"fish"
127.0.0.1:6379[8]> srandmember animal
"dog"
127.0.0.1:6379[8]> srandmember animal
"fish"
127.0.0.1:6379[8]> sadd PhD dr1 dr2 dr3
(integer) 3
127.0.0.1:6379[8]> sadd female mrs1 dr2 dr3 mrs4
(integer) 4
127.0.0.1:6379[8]> sinter PhD female
1) "dr3"
2) "dr2"
127.0.0.1:6379[8]> sdiff PhD female
1) "dr1"
127.0.0.1:6379[8]> sdiff female PhD
1) "mrs1"
2) "mrs4"
127.0.0.1:6379[8]> sunion PhD female
1) "mrs1"
2) "dr3"
3) "dr2"
4) "mrs4"
5) "dr1"
有序集合
每个value关联一个score,redis基于score从小到大排序。zadd key score value score value
127.0.0.1:6379[8]> zadd students 69 Amy 80 Beenzino 77 Cathy 82 Davey 92 Eminem
(integer) 5
127.0.0.1:6379[8]> zrange students 0 3
1) "Amy"
2) "Cathy"
3) "Beenzino"
4) "Davey"
127.0.0.1:6379[8]> zrange students 2 -1
1) "Beenzino"
2) "Davey"
3) "Eminem"
zrange key min max withscores
127.0.0.1:6379[8]> zrange students 0 -1 withscores
1) "Amy"
2) "69"
3) "Cathy"
4) "77"
5) "Beenzino"
6) "80"
7) "Davey"
8) "82"
9) "Eminem"
10) "92"
zcard key
127.0.0.1:6379[8]> zcard students
(integer) 5
zscore key value
127.0.0.1:6379[8]> zscore students Amy
"69"
zincrby key score value
127.0.0.1:6379[8]> zincrby students 5 Amy
"74"
127.0.0.1:6379[8]> zincrby students -9 Amy
"65"
zcount key min max
127.0.0.1:6379[8]> zcount students 77 92
(integer) 4