Redis的基本知识(五种基本类型使用)


redis默认有16个数据库

在这里插入图片描述
默认使用的是第0个

在这里插入图片描述
不同的数据库可以存放不同的值
清除当前数据库
在这里插入图片描述
清空全部
在这里插入图片描述

Redis是单线程

Redis是基于内存操作,CPU不是Redis性能瓶颈Redis的平静是根据机器的内存和网络带宽,既然可以使用单线程就没必要使用多线程
Redis是C语言写的,每秒是100000+的QPS的,不比key-vale的Memecache差

Redis为什么单线程也这么快?

误区1:高性能的服务器一定是多线程?
误区2:多线程(CPU上下文需要切换)一定比单线程高
CPU、内存、硬盘的速度

核心:Redis是将所有的数据全部放在内存中所以使用单线程操作效率就是最高的,多线程(CPU上下文会切换:耗时操作),对于内存系统来说,如果没有上下文切换效率就是最高,多次读写都是在一个CPU上,在内存情况下这个就是最佳方案

五大数据类型

在这里插入图片描述

Redis-Key

127.0.0.1:6379> keys * #查看所有的key
(empty list or set)
127.0.0.1:6379> set name hhh #创建一个key name value是hhh
OK
127.0.0.1:6379> set age 23 
OK
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> exists name #判断key是不是存在
(integer) 1
127.0.0.1:6379> move name 2 #将key name移到第二个数据库中
127.0.0.1:6379> expire name 5 #设置key为name的过期时间为5秒
(integer) 1
127.0.0.1:6379> ttl name #查看倒计时时间
(integer) 0
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> type name #返回key的类型


String类型

127.0.0.1:6379> set key1 vv #设置值
OK
127.0.0.1:6379> get key1 #获得key值
"vv"
127.0.0.1:6379> exists key1 # key是否存在
(integer) 1
127.0.0.1:6379> append key1 "hello" # 如果本来没有key1 就相当于创建一个key
(integer) 7
127.0.0.1:6379> get key1
"vvhello"
127.0.0.1:6379> strlen key1 #得到key1 的值的长度
(integer) 7
127.0.0.1:6379> 
##################################################
127.0.0.1:6379> set view 0
OK
127.0.0.1:6379> get view
"0"
127.0.0.1:6379> INCR view #自增1
(integer) 1
127.0.0.1:6379> INCR view
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> get view
"2"
127.0.0.1:6379> decr view #自减1
(integer) 1
127.0.0.1:6379> decr view
(integer) 0
127.0.0.1:6379> get view
"0"
127.0.0.1:6379> 
####################################
127.0.0.1:6379> incrby view 20 #直接加20
(integer) 20
127.0.0.1:6379> get view
"20"
127.0.0.1:6379> decrby view 5 #减5
(integer) 15
127.0.0.1:6379> get view
"15"
127.0.0.1:6379> 
######################################
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set key 123456
OK
127.0.0.1:6379> get key
"123456"
127.0.0.1:6379> getrange key 1 3 #获取下标1到3
"234"
127.0.0.1:6379> getrange key 0 -1 #获取全部的
"123456"
127.0.0.1:6379> 
127.0.0.1:6379> get key
"123456"
127.0.0.1:6379> setrange key 2 asd #从下标2开始替换为asd
(integer) 6
127.0.0.1:6379> get key
"12asd6"
127.0.0.1:6379> 



在这里插入图片描述
在这里插入图片描述
mseten是一个与操作
在这里插入图片描述

List类型

List在redis中可以为栈、队列、阻塞队列
所有的list命令是以l开头

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> lpush list one # 将一个或者多个值插入到列表头部(左边)头插
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 2
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379> lrange list 0 -1 # 先拿出来的是最后放进去的
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> 
127.0.0.1:6379> rpush list hhh #从右边加进去 尾插
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "hhh"
127.0.0.1:6379> 
lpop #头删
rpop #尾删


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

实际上是一个链表,before Node after , left , right都可以插入值如果key不存在,创建新的链表
如果key存在,新增内容
如果移除了所有值,空链表,也代表不存在!
在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点

LIST底层是快速链表,快速链表相对于普通链表使用的是连续地址空间块,当数据过多时候,通过指针连接地址空间块

Set集合

127.0.0.1:6379> sadd myset lll #添加
(integer) 1
127.0.0.1:6379> sadd myset dasd
(integer) 1
127.0.0.1:6379> sadd myset ddwqd
(integer) 1
127.0.0.1:6379> smembers myset #打印所有
1) "dasd"
2) "ddwqd"
3) "lll"
127.0.0.1:6379> sismember myset lll #判断是否存在
(integer) 1
127.0.0.1:6379> sismember myset 222
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> scard myset#获取set中元素个数
(integer) 3
127.0.0.1:6379> smembers myset
1) "dasd"
2) "ddwqd"
3) "lll"
127.0.0.1:6379> 


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Hash

Map集合,key-mapl时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的 key-vlaue !
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Zset(有序集合)

在set的基础上,增加了一个值,set k1 v1 zset k1 score1 v1
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值