redis缓存数据库详解(二):redis的数据结构及基础命令

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

1.redis的数据结构

redis数据库不像mysql关系型数据库,使用表来存放数据,redis是使用key-value的形式来存放数据的,支持的数据类型有:String,list,set,zset,hash。

2.String类型的相关命令

字符串类型 是 Redis 最基础的数据结构。字符串类型 的值实际可以是 字符串(简单 和 复杂 的字符串,例如 JSON、XML)、数字(整数、浮点数),甚至是 二进制(图片、音频、视频),但是值最大不能超过 512MB。

命令解释
set存放值
get获取值
mset存放多个值
mget获取多个值
append追加到现有的值后面
incr使值递增1
incrby使值递增指定数字
incebyfloat使值递增指定数字,浮点型
decr使值递减1
decrby使值递减指定数字
getrange获取从起始下标到结束下标之间的值
setNX当key不存在时保存,存在则什么也不做

示例:

1.set key value [ex seconds] [px milliseconds] [nx|xx]

set 命令有几个选项:

ex seconds:为 键 设置 秒级过期时间。
px milliseconds:为 键 设置 毫秒级过期时间。
nx:键必须 不存在,才可以设置成功,用于 添加。
xx:与 nx 相反,键必须 存在,才可以设置成功,用于 更新。

//set key value PX|EX 过期时间(PX后面跟的是毫秒,EX是秒)
127.0.0.1:6379> set name jack EX 100
OK

2.get

127.0.0.1:6379> get name
"jack"

3.mset

//一次存放两个key
127.0.0.1:6379> mset age 18 tall 1.87
OK

4.mget

//一次获取两个key
127.0.0.1:6379> mget age tall
1) "18"
2) "1.87"

5.append

//在刚才设置的name后面追加chen
127.0.0.1:6379> append name chen
(integer) 8
127.0.0.1:6379> get name
"jackchen"
127.0.0.1:6379>

6.incr、incrby、incebyfloat

incr 命令用于对值做 自增操作,返回结果分为三种情况:
值不是 整数,返回 错误。
值是 整数,返回 自增 后的结果。
键不存在,按照值为 0 自增,返回结果为 1。

127.0.0.1:6379> set i 1
OK
127.0.0.1:6379> incr i
(integer) 2
127.0.0.1:6379> get i
"2"
127.0.0.1:6379> incrby i 5
(integer) 7
127.0.0.1:6379> get i
"7"
127.0.0.1:6379> incrbyfloat i 1.1
"8.1"
127.0.0.1:6379> get i
"8.1"
127.0.0.1:6379>

7.decr、decrby

127.0.0.1:6379> set j 9
OK
127.0.0.1:6379> decr j
(integer) 8
127.0.0.1:6379> get j
"8"
127.0.0.1:6379> decrby j 6
(integer) 2

8.getrange

127.0.0.1:6379> set test hello
OK
127.0.0.1:6379> getrange test 0 3
"hell"
127.0.0.1:6379>

9.setNX

//先设置一个nx的key
127.0.0.1:6379> set nx nx
OK
127.0.0.1:6379> setnx nx nx
//使用setnx再次设置key为nx的,发现没有设置成功,因为已经存在key为nx的值了
(integer) 0
127.0.0.1:6379> setnx hh hh
//设置key为hh的,成功了
(integer) 1
127.0.0.1:6379>

3.列表(list)有序不去重

列表(list)类型是用来存储多个 有序 的 字符串。在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表、获取 指定索引下标 的 元素 等。列表 是一种比较 灵活 的 数据结构,它可以充当 栈 和 队列 的角色,在实际开发上有很多应用场景。

命令解释
lpush在列表头部添加一个或多个值
rpush在列表尾部添加一个或多个值
lpop移除头部一个值
rpop移除尾部一个值
lrange获取起始位置到结束位置之间的值
lindex获取指定下标的值
llen获取列表的长度
ltrim截取列表
brpop阻塞的取元素

使用场景

命令场景
lpush + lpopStack(栈)
lpush + rpopQueue(队列)
lpush + brpopMessage Queue(消息队列)

示例:

1.lpush

127.0.0.1:6379> lpush mylist hello bye good
(integer) 3

2.lrange

//获取列表中的所有元素
127.0.0.1:6379> lrange mylist 0 -1
1) "good"
2) "bye"
3) "hello"

3.rpush

127.0.0.1:6379> rpush mylist yes
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "good"
2) "bye"
3) "hello"
4) "yes"

4.lpop

127.0.0.1:6379> lpop mylist
"good"
127.0.0.1:6379> lrange mylist 0 -1
1) "bye"
2) "hello"
3) "yes"

5.rpop

127.0.0.1:6379> rpop mylist
"yes"
127.0.0.1:6379> lrange mylist 0 -1
1) "bye"
2) "hello"

6.lindex

127.0.0.1:6379> lindex mylist 0
"bye"

7.llen

127.0.0.1:6379> llen mylist
(integer) 2

8.brpop key timeout

timeout为0表示一直挂起,直到集合中有元素了取到返回,多个客户端从列表中阻塞取元素时,先连接的等有元素了会先取到

//新建一个列表,往列表里添加两个元素
127.0.0.1:6379> lpush listtest aaa bbb
(integer) 2
127.0.0.1:6379> lrange listtest 0 -1
1) "bbb"
2) "aaa"
//开启另一个客户端,阻塞的取
127.0.0.1:6379> brpop listtest 0
1) "listtest"
2) "aaa"
//再取一次,这时候列表为空了
127.0.0.1:6379> brpop listtest 0
1) "listtest"
2) "bbb"
//当列表为空,再次取的时候,就会一直挂起
127.0.0.1:6379> brpop listtest 0

//再打开一个客户端,也阻塞的取元素
127.0.0.1:6379> brpop listtest 0

//然后往列表里添加,这时第一个阻塞的客户端会获取元素
127.0.0.1:6379> lpush listtest jiji
(integer) 1
127.0.0.1:6379> brpop listtest 0

1) "listtest"
2) "jiji"
(107.15s)这里会有一个等待的时间

4.set

集合(set)类型也是用来保存多个 字符串元素,但和 列表类型 不一样的是,集合中 不允许有重复元素,并且集合中的元素是 无序的,不能通过 索引下标 获取元素。

命令解释
sadd添加一个或多个值
srem移除一个或多个值
scard获取集合的长度
sismember查看集合中是否包含某个值
smembers获取所有元素
sinter取多个集合的交集
suinon取多个集合的并集
sdiff取多个集合的差集

1.sadd

127.0.0.1:6379> sadd set1 aa bb cc
(integer) 3
127.0.0.1:6379> smembers set1
1) "aa"
2) "cc"
3) "bb"

2.srem

127.0.0.1:6379> srem set1 aa
(integer) 1
127.0.0.1:6379> smembers set1
1) "cc"
2) "bb"

3.scard

127.0.0.1:6379> scard set1
(integer) 2

4.sismember

127.0.0.1:6379> sismember set1 hh
(integer) 0
127.0.0.1:6379> sismember set1 cc
(integer) 1

5.sinter

127.0.0.1:6379> sadd set1 aa bb cc
(integer) 1
127.0.0.1:6379> sadd set2 bb hh nn
(integer) 3
(integer) 3
127.0.0.1:6379> sinter set1 set2
1) "bb"

6.sunion

127.0.0.1:6379> sunion set1 set2
1) "aa"
2) "bb"
3) "cc"
4) "nn"
5) "hh"

7.sinterstore将交集存储到redis中

127.0.0.1:6379> sinterstore inter set1 set2
(integer) 1
127.0.0.1:6379> smembers inter
1) "bb"

5.sorted set 有序去重

1.sorted set也被叫做zset,因为命令都是以z开头,与set的结构基本是一样的,命令也是类似的。
2.zset是有序的,每个元素都要设置权重值,权重值是可以重复的,但元素是不重复的。

命令解释
zadd添加一个或多个值
zrem移除一个或多个值
zcard获取集合的长度
zrange获取起始位置到结束位置之间的元素

1.zadd

//这里添加了两个bb,之前说过zset是去重的,实际上只会存在一个bb,第二次只是更新了权重值
 127.0.0.1:6379> zadd myset 1 aa 2 bb 3 bb 4 cc
(integer) 3
127.0.0.1:6379> zrange myset 0 -1
1) "aa"
2) "bb"
3) "cc"

2.zrem

127.0.0.1:6379> zrem myset aa
(integer) 1
127.0.0.1:6379> zrange myset 0 -1
1) "bb"
2) "cc"

3.zcard

127.0.0.1:6379> zcard myset
(integer) 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值