redis简介
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
redis存储特别快原因是:
1、存在内存中
2、单线程
3、多路复用
4、resp协议
5、value简单
redis数据结构
1、字符串(String)
value可以是 XML 、JSON、数字、二进制。最大不能超过512MB。
常用命令:
设值一个key value的数据: set key value ex [expiration EX seconds|PX milliseconds]
ex表示多少秒后过期,px是毫秒
取值: get key
127.0.0.1:6379> set age 20 ex 10
OK
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> get age
(nil)
设置一个值:setnx key value
当key存在时失败,返回0,不存在时成功返回1
127.0.0.1:6379> setnx age 20
(integer) 1
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> setnx age 30
(integer) 0
批量设值、批量取值:mset key value key value ....
、mget key key ....
127.0.0.1:6379> mset name xiaoming age 30
OK
127.0.0.1:6379> mget name age
1) "xiaoming"
2) "30"
自增、自减:incr key 、decr key
key必须是整数,incr自增,decr 自减。
127.0.0.1:6379> get age
"30"
127.0.0.1:6379> incr age
(integer) 31
127.0.0.1:6379> decr age
(integer) 30
整数加减任意数值:incrby key increment、decrby key increment
。
127.0.0.1:6379> incrby age 10
(integer) 40
127.0.0.1:6379> decrby age 5
(integer) 35
浮点数加:incrbyfloat key increment
127.0.0.1:6379> set money 1.1
OK
127.0.0.1:6379> incrbyfloat money 0.2
"1.3"
追加字符串:append key value
。
字符串长度:strlen key
。
截取字符串:getrange key start end
。
127.0.0.1:6379> get name
"xiaoming"
127.0.0.1:6379> append name 111
(integer) 11
127.0.0.1:6379> get name
"xiaoming111"
127.0.0.1:6379> strlen name
(integer) 11
127.0.0.1:6379> getrange name 0 7
"xiaoming"
2、哈希(Hash)
哈希hash是一个string类型的field和value的映射表,hash特适合用于存储对象。
图解:
常用命令:
取值和设值:hset key field value 、 hget key field
。
127.0.0.1:6379> hset userId:1 name yasuo
(integer) 1
127.0.0.1:6379> hget userId:1 name
"yasuo"
批量取值和设值:hmset key field value [field value ...]
、hmget key field [field ...]
。
127.0.0.1:6379> hmset userId:1 name yasuo age 18 sex boy
OK
127.0.0.1:6379> hmget userId:1 name age sex
1) "yasuo"
2) "18"
3) "boy"
判断field是否存在hexists key field
存在返回1 不存在返回0
127.0.0.1:6379> hexists userId:1 name
(integer) 1
127.0.0.1:6379> hexists userId:1 color
(integer) 0
获取所有的field、value 、field和value。hkeys key
、hvals key
、hgetall key
127.0.0.1:6379> hkeys userId:1
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hvals userId:1
1) "yasuo"
2) "18"
3) "boy"
127.0.0.1:6379> hgetall userId:1
1) "name"
2) "yasuo"
3) "age"
4) "18"
5) "sex"
6) "boy"
增加减少值。hincrby key field increment
127.0.0.1:6379> hincrby userId:1 age 10
(integer) 28
127.0.0.1:6379> hget userId:1 age
"28"
3.列表(list)
用来存储多个有序的字符串,一个列表最多可存储2的32次方减1个元素。
图解:
常用命令:
右边开始添加:rpush key value [value ...]
左边开始添加:lpush key value [value ...]
从左到左返回指定元素:lrange key start stop
指定 0 -1就是返回所有。
右边删除第一个:rpop key
左边删除第一个:lpop key
在某元素之前或者之后插入:linsert key BEFORE|AFTER pivot value
127.0.0.1:6379> rpush testlist c b a
(integer) 3
127.0.0.1:6379> lrange testlist 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lpop testlist
"c"
127.0.0.1:6379> lrange testlist 0 -1
1) "b"
2) "a"
127.0.0.1:6379> linsert testlist before b c
(integer) 3
127.0.0.1:6379> lrange testlist 0 2
1) "c"
2) "b"
3) "a"
4.无序不允许重复集合(set)
保存多元素,与列表不一样的是不允许重复元素,且集合是无序的。存放容量和list一样,除了支持增删查改外,还支持集合的交集、并集、差集。可以做用户标签共同爱好筛选。
图解结构:
插入元素:sadd key member [member ...]
查看key是否存在:exists key
127.0.0.1:6379> exists testset
(integer) 0
127.0.0.1:6379> sadd testset a b c
(integer) 3
127.0.0.1:6379> exists testset
(integer) 1
获取所有元素:smembers key
显示无序。
127.0.0.1:6379> sadd testset e
(integer) 1
127.0.0.1:6379> sadd testset f
(integer) 1
127.0.0.1:6379> sadd testset g
(integer) 1
127.0.0.1:6379> smembers testset
1) "e"
2) "b"
3) "a"
4) "g"
5) "c"
6) "f"
删除某元素:srem key member [member ...]
127.0.0.1:6379> srem testset a
(integer) 1
127.0.0.1:6379> smembers testset
1) "g"
2) "c"
3) "b"
4) "e"
5) "f"
计算元素个数:scard key
127.0.0.1:6379> scard testset
(integer) 5
例子1: 给人添加标签。找出用户的相同兴趣爱好。
127.0.0.1:6379> sadd user1 basketball playgame music run
(integer) 4
127.0.0.1:6379> sadd user2 music read playgame
(integer) 3
127.0.0.1:6379> sinter user1 user2
1) "playgame"
2) "music"
例子2: 给爱好添加标签。找出相同兴趣爱好的人。
127.0.0.1:6379> sadd music user1 user2
(integer) 2
127.0.0.1:6379> sinter music
1) "user2"
2) "user1"
5.有序不重复集合(zset)
常用于排行榜,点赞数、观看数的需求。
添加:zadd key [NX|XX] [CH] [INCR] score member [score member ...]
再次设置会修改值。
127.0.0.1:6379> zadd rank 10000 yasuo 8000 ruiwen 6000 mofeite 4000 wukong
(integer) 4
查看:zrange key start stop [WITHSCORES]
倒序:zrevrange key start stop [WITHSCORES]
127.0.0.1:6379> zrange rank 0 3 withscores
1) "wukong"
2) "4000"
3) "mofeite"
4) "6000"
5) "ruiwen"
6) "8000"
7) "yasuo"
8) "10000"
127.0.0.1:6379> zrevrange rank 0 -1 withscores
1) "yasuo"
2) "10101"
3) "ruiwen"
4) "8000"
5) "mofeite"
6) "6000"
7) "wukong"
8) "4000"
修改值:zincrby key increment member
127.0.0.1:6379> zincrby rank 100 yasuo
"10101"
127.0.0.1:6379> zrange rank 0 3 withscores
1) "wukong"
2) "4000"
3) "mofeite"
4) "6000"
5) "ruiwen"
6) "8000"
7) "yasuo"
8) "10101"
redis全局命令
1、查看所有键:keys *
127.0.0.1:6379> keys *
1) "name"
2) "userId:1"
3) "user2"
4) "age"
5) "testset"
6) "user1"
7) "rank"
8) "music"
9) "testlist"
10) "money"
2、键总数:dbsize
127.0.0.1:6379> dbsize
(integer) 10
4、删除键:del key
127.0.0.1:6379> del testset
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "userId:1"
3) "user2"
4) "age"
5) "user1"
6) "rank"
7) "music"
8) "testlist"
9) "money"
5、键的数据结构:type key
127.0.0.1:6379> type name
string