Redis非关系型数据库,可以用作数据库、缓存、消息中间件,Redis他是基于内存的因此没有磁盘io的开销,因此他比我们关系型数据库读取数据快,能大大提升我们的运行效率,因此在我们开发中比较常用;
Redis数据类型一字符串类型:这个很好理解,一个key存储一个字符串,value支持多种数据结构,比如我们常用的有:String、Hash、List、set、zset, 还有一些特殊数据类型比如Bitmaps、HyperLogLog、GEO;
常用类型相关结构:
字符串类型 | String | 【key value】 |
哈希表类型 | Hash | 【key field value field value】 |
列表类型 | List | 【key value value value】 |
无须集合类型 | Set | 【key value value value】 |
有序集合类型 | Zset | 【key score key score key |
目录
一、常用数据类型
-
字符串类型
添加命令:set k1 1
查询命令:get k1
修改命令:set k1 20
自增+1: incr k1
指定步数:incrby k1 20
删除: del k1 -
哈希表类型
常用命令Hash(hget、hset、hdel、hgetall)
添加命令:hset h1 name zs age 18
查询命令:hget h1 name
修改命令:hset h1 name ls
查询所有:hgetall h1
删除某个key:hdel h1 age
127.0.0.1:6379> hset h1 name zs age 18 (integer) 2 127.0.0.1:6379> hget h1 name "zs" 127.0.0.1:6379> hset h1 name ls (integer) 0 127.0.0.1:6379> hget h1 name "ls" 127.0.0.1:6379> hgetall h1 1) "name" 2) "ls" 3) "age" 4) "18" 127.0.0.1:6379> hdel h1 age (integer) 1 127.0.0.1:6379> hgetall h1 1) "name" 2) "ls"
-
列表类型
列表类型一个key对应一个链表(双端链表,有序,value可重复,可以通过下标取出 对应值)
常用命令List (lpush、rpush、lrange、lpop、rpop)
blpop:左侧获取、若没有则阻塞(可用于阻塞队列、list可作为栈、队列;)lpush 左侧添加 leftpust lpush list 30
【30】
rpush 右侧添加 rightPush rpush list 40
【30、40】
lpush list 20【20、30、40】
lrange 查询指定元素 lrange list 0 -1 # 查询重0开始到最后一个元素
lrange list 0 2 # 查询重0开始到第二个,从0开始lpop 左侧获取 lpop list
【20】rpop 右侧获取 rpop list
【40】
brpop:右侧获取、若没有则阻塞
添加:lpush list 20 30 40 50 60
【20、30、40、50、60】127.0.0.1:6379> lrange list 0 -1 1) "60" 2) "50" 3) "40" 4) "30" 5) "20" 127.0.0.1:6379> blpop list 0 # 0:阻塞时长,0一直阻塞,6阻塞六秒 1) "list" 2) "60"
lindex:通过索引获取列表中的元素
lindex list 2
llen:获取长度
lrem:移除列表元素 【lrem list 0 10】 -
无须集合类型
Set无序不重复集合类型
常用命令:sadd、srem、scard、smembers、sismember27.0.0.1:6379> sadd s1 20 30 40 30 20 50 60 (integer) 5 127.0.0.1:6379> smembers s1 1) "20" 2) "30" 3) "40" 4) "50" 5) "60" 127.0.0.1:6379> srem s1 20 (integer) 1 127.0.0.1:6379> smembers s1 1) "30" 2) "40" 3) "50" 4) "60" 127.0.0.1:6379> sismember s1 30 (integer) 1 127.0.0.1:6379> sismember s1 20 (integer) 0 Scard s1 (integer) 4
smembers: 查询所有的元素
srem :删除某个元素
sismember: 检查元素是否存在
Scard:返回数量sadd s1 10 20 30 40 50
sadd s2 20 30 40 50 60
sdiff: 差集、比较第一个集合在第二个集合中是否存在不存在则返回
sdiff s1 s2
【10】
sdiff s2 s1
【60】
Sdiffstore:并集、将存在于第一个集合、但不存在于其他集合中的元素(数学上的差集运算)存储到dest-key键里面
Sdiffstore s1 s2
【20、30、40、50、60】
sadd s1 10 20 30 40 50
sadd s2 20 30 40 50 60
Sinter:交集、将第一个集合和第二个集合相同的数据
sinter s1 s2
【20、30、40、50】
sinter s2 s1
【20、30、40、50】List、set区别
set无序且不可重复不能通过下标获取元素
list有序且可重复
set多个集合可以实现交集、并集、差集 -
有序集合类型
有序集合类型 Zset
常用命令:zadd 、 zrange、 zscore
127.0.0.1:6379> zadd z1 20 zs 30 ls 10 ww
(integer) 3
127.0.0.1:6379> zrange z1
(error) ERR wrong number of arguments for 'zrange' command
127.0.0.1:6379> zrange z1 0 -1
1) "ww"
2) "zs"
3) "ls"
127.0.0.1:6379> zscore z1 ww
"10"
127.0.0.1:6379>
一般用作排序的列表、比如商品的排行
底层实现:ziplist和skiplist(跳表)