Redis学习(1)--- 安装、基本命令及常见五大数据类型详解

一、为什么要学Redis?

我们学一个新东西,最先要了解为什么学?也就是Redis能解决什么问题。我们可以画图一步步解释
在这里插入图片描述
首先,客户端会有大量用户请求发送给服务器,单个服务器接受不了如此大的请求的话就需要配置服务器集群,比如双十一就会新增大量服务器。
在这里插入图片描述
增加服务器可以解决客户端请求量过大问题,但是也会存在问题的是,也就是数据库的压力太大,并且如果对于用户常用的一些数据,每次都到数据库查,也非常耗时,所以对于经常操作的热点数据就放在Redis中。Redis是基于内存进行存储数据和读取数据的,支持高并发,性能非常好,效率比在MySQL中读取数据快很多。并且服务器存在一些问题,就是以前用Session存数据的话,因为服务器是集群,存的第一个Session放在服务器1,但是下次拿由于请求随机的,可能就拿不到之前存的Session,而是到另一个服务器上找。用了Redis,统一放在Redis中就能解决这个问题,包括锁的操作,集群就实现不了互斥,如果是一个服务器还能,多个就不能了。Redis它接收用户请求是单线程的,实现这种锁的效果。以上就是为什么要用Redis,也就是它能解决的问题。
总结Redis能解决的问题:
1、用户量过大,请求也大,数据库压力大
2、多台服务器之间数据不同步,也就是Session存数据存在的问题。
3、多台服务器之间的锁,不存在互斥性

Redis有这么多好处,能解决这么多问题,那我们来学一学吧!!!

二、Redis安装

简单介绍Redis
Redis(Remote Dictionary Server—远程服务字典)是一款非关系型数据库(NoSQL->Not Only SQL),是基于Key-Value的NoSQL,用C语言编写,并且具备持久化,不会因为数据库异常、崩溃或断电丢失数据,非关系型数据库其实还有ElasticSearch、Mongodb,我们现在来安装一下。

详细了解Redis链接:http://www.redis.cn/

Redis推荐在linux搭建安装,Windows已经停更很久了,也慢,基本都是在linux上操作。首页即可下载安装包,是在linux安装的redis包
在这里插入图片描述
我下载的时候真的慢,一共才2,1M,半天动不了,可能是连外网。这里给一个博主分享的百度网盘,下载redis 6.0.8版本的链接

下载好直接拖拽到MobaXterm中即可,下面的博客安装十分细致,非常nice,跟着安装即可
https://blog.csdn.net/qq_45173404/article/details/107715530
不过注意里面redis.conf,有一两个它写成了redis.config,这个要注意,不要复制它的redis.config,要写redis.conf,我在该博主评论区说了下,不知道看不看得到。

测试性能(补充了解)
假设我们要测试,100个并发连接 100000请求,看下性能,redis-benchmark就是用于测试性能的
在这里插入图片描述
首先没有启动redis要先启动一下连接

redis-server rconfig/redis.conf
redis-cli -p 6379

在这里插入图片描述

测试命令如下

redis-benchmark -h localhost -p 6379 -c 100 -n 100000

在这里插入图片描述

这个是压力化测试,我们了解即可,跟着弄一遍就行

三、Redis基础

3.1 Redis是单线程的

Redis快是多线程吗?不,Redis是单线程的!!!
为什么Redis采用单线程还那么快???
(1) Redis绝大部分请求是纯粹的内存操作,非常的快,它不是基于CPU的
(2) 采用单线程,避免了不必要的上下文切换和竞争条件,因为多线程CPU需要上下文切换,有代价与开销

补充:
Redis有16个数据库,默认是0这个数据库
在这里插入图片描述
在这里插入图片描述
初始没有设置数据,set key value后,就有值了,如果我们切换到其他数据库,如2,它就是空的,也就是每个数据库都独立的,keys *可以查看数据库中所有的key,get key可以获取value值(上面图我备注错了,[3]应该表示第4个数据库)
在这里插入图片描述
在这里插入图片描述

flushdb	#清除当前数据库数据
flushall		#清除全部数据库(慎用)

在这里插入图片描述

3.2 常见五大数据类型及相关命令

3.2.1 RedisKey的基本命令

先说一些命令,再将5大类型
之前讲过常见的set key value,get name,keys *,还有一些命令如下

EXISTS KEY		#有对应值会返回1,否则返回0
move key 1		#将key从当前数据库移动到指定数据库
del key		#删除key
EXPIRE key 时间	#设置key什么时候过期,如EXPIRE name 10表示name10秒后过期,14天免登录可以用
ttl key		#key还剩多久过期,-2表示已过期
type key	#查看key的类型

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

在这里插入图片描述
以后想要相关命令也可以到官网搜索
在这里插入图片描述

3.2.2 五大常用类型

如果之前有数据库,用flushdb全部删除,重新创建
(1)String

append key 追加内容		#给key追加内容,key不存在就相当于set创建,存在则追加
strlen key		#查看key对应value的长度
incr key		#+1
dece key		#-1
incrby key 增量		#如incrby num 10就是每次执行+10
decrby key 减量
getrange key index1 index2		#截取key
setrange key index 替换的内容		#从index位置替换,即替换指定位置开始的字符串
setex key 时间 value		#设置时间期限创建key 
setnx key value		#key不存在才能创建,存在就创建失败
mset key1 value1 key2 value2 ...	#同时设置多个值
mget key1 key2		#同时取多个值
msetnx  key1 value1 key2 value2	#不存在时创建,这是原子性操作,要么同时创建成功,要么失败,有一个失败都

在这里插入图片描述
常常用redis自增做阅读量,比如CSDN的阅读量就可以用这个,查看一下,就自增1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
getset命令

getset key value	#如果key没有设置,那么get返回为空,然后再set值,已经有值会先返回get的值,然后set新的value

在这里插入图片描述
(2)List
列表就像下面图,flushdb清除之前数据库
在这里插入图片描述

我们先用flushdb将数据库清空,再来玩List
在这里插入图片描述

lpush key value	#向列表中push值,有点像栈
lrange key 0,-1	#表示获取所有值,0 1就是l取两个值

这里key一般写list表示列表
在这里插入图片描述
在这里插入图片描述
lpush就是左边push,rpush就是从右边push
在这里插入图片描述
就是可以从两边插入值,可以插入那么也就可以删除

lpop key	#返回出列表的元素
rpop key
lindex key 下标		#从左边查找元素,从0开始
llen	key 	#返回列表长度
lrem key 移除数量  value	#移除固定的值
ltrim key 下标1,下标2	#截取
lset key 下标 替换的值	#替换某一个元素

在这里插入图片描述
在这里插入图片描述
trim就是修剪,会把以前的列表修改,就像剪树枝,会剪去一部分,留下一部分
在这里插入图片描述
下面对应更新操作
在这里插入图片描述

组合命令

rpoplpush 列表1 列表2	 #列表1右端第一个移动到列表2的左边
linsert key before/after 元素1 元素2	#将元素2插入到元素1的前面或者后面

在这里插入图片描述
在这里插入图片描述
两边插入或者改动效率最高,中间来说效率会低不少,栈(Lpush Lpop),队列(Lpush,Rpop)

(3)Set
Set中的值不能重复,和java中一样,先flushdb清除之前数据库

sadd key members	#添加元素
smembers key		#查看所有值
sismember key 元素	#查看某个元素是否在集合中
scard key		#查看集合有多少元素
srandmember key count		#随机获取key中count个值,不写count默认1个
spop key		#随机移除元素

在这里插入图片描述
在这里插入图片描述
添加重复的会不成功,返回false
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

smove key1 key2 元素		#将一个指定的值移动到另一个Set集合中
sinter key1 key2		#求key1和key2的交集
sunion key1 key2	#求两个的并集

在这里插入图片描述
在这里插入图片描述
这个交集就像微信中,会显示多少好友关注过某个公众号,就把好友的公众号和自己做了一个交集,微博里共同关注的博主也是
在这里插入图片描述
(4)Hash
Map集合,key-map,就是key对应一个map,map又有自己的键值对,key-value,这里value变成了map而已

hset key field value	#key-map,map即field和value
hget key field		#取值
hmset key field1 value1 field2 value2...	#存多个值
hmget field1 field2	#取多个值

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

hdel key field	#删除指定的key对应的map
hgetall key	#获取所有key中所有的field-value

在这里插入图片描述

hlen key	#判断key的长度(多少个map)
hkeys key	#获取key对应map中的所有字段
hvals key	#获取key对应map中的所有值

在这里插入图片描述

hincrby key field 自增值

在这里插入图片描述
我们实际可以设置自己的user对象,user:1表示id为1的user,常用于用户信息的存储或者说对象的存储
在这里插入图片描述
(5)ZSet
ZSet是有序集合,多了一个score计数位,用于排序,flushdb清除之前数据库

zadd key score1 value1 score2 value2	#增加了一个score,会根据score大小排序

在这里插入图片描述

zset最大作用就是排序,那我们就来排序看看,给员工薪水排序
在这里插入图片描述

zrangebyscore salary (2000 3000		#薪水在(2000,3000]的员工
zrangebyscore salary -inf +inf withscores limit 0 1		#最小,limit表示从下标为0的位置查一个
zrevrangebyscore salary +inf -inf withscores limit 0 1	#最大

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面就是从下标为1和下标为2位置找一个
在这里插入图片描述
本章节完毕
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小样x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值