redis数据结构以及常用命令

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 keyhvals keyhgetall 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
发布了41 篇原创文章 · 获赞 9 · 访问量 2512

猜你喜欢

转载自blog.csdn.net/weiwei_six/article/details/103926104