目录

  • 一、为什么要学Redis?
  • 二、Redis安装
  • 三、Redis基础
  • 3.1 Redis是单线程的
  • 3.2 常见五大数据类型及相关命令
  • 3.2.1 RedisKey的基本命令
  • 3.2.2 五大常用类型

一、为什么要学Redis?

我们学一个新东西,最先要了解为什么学?也就是Redis能解决什么问题。我们可以画图一步步解释

redis 要学多久 redis要学吗_数据库


首先,客户端会有大量用户请求发送给服务器,单个服务器接受不了如此大的请求的话就需要配置服务器集群,比如双十一就会新增大量服务器。

redis 要学多久 redis要学吗_Redis_02


增加服务器可以解决客户端请求量过大问题,但是也会存在问题的是,也就是数据库的压力太大,并且如果对于用户常用的一些数据,每次都到数据库查,也非常耗时,所以对于经常操作的热点数据就放在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包

redis 要学多久 redis要学吗_数据库_03


我下载的时候真的慢,一共才2,1M,半天动不了,可能是连外网。这里给一个博主分享的百度网盘,下载redis 6.0.8版本的链接

下载好直接拖拽到MobaXterm中即可,下面的博客安装十分细致,非常nice,跟着安装即可

不过注意里面redis.conf,有一两个它写成了redis.config,这个要注意,不要复制它的redis.config,要写redis.conf,我在该博主评论区说了下,不知道看不看得到。

测试性能(补充了解)

假设我们要测试,100个并发连接 100000请求,看下性能,redis-benchmark就是用于测试性能的

redis 要学多久 redis要学吗_java_04


首先没有启动redis要先启动一下连接

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

redis 要学多久 redis要学吗_java_05

测试命令如下

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

redis 要学多久 redis要学吗_数据库_06

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

三、Redis基础

3.1 Redis是单线程的

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

补充:

Redis有16个数据库,默认是0这个数据库

redis 要学多久 redis要学吗_Redis_07


redis 要学多久 redis要学吗_Redis_08


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

redis 要学多久 redis要学吗_redis_09


redis 要学多久 redis要学吗_redis 要学多久_10

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

redis 要学多久 redis要学吗_java_11

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的类型

redis 要学多久 redis要学吗_Redis_12


redis 要学多久 redis要学吗_Redis_13


redis 要学多久 redis要学吗_java_14

redis 要学多久 redis要学吗_Redis_15


以后想要相关命令也可以到官网搜索

redis 要学多久 redis要学吗_redis 要学多久_16

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 要学多久 redis要学吗_redis_17


常常用redis自增做阅读量,比如阅读量就可以用这个,查看一下,就自增1

redis 要学多久 redis要学吗_redis_18


redis 要学多久 redis要学吗_redis_19


redis 要学多久 redis要学吗_Redis_20


redis 要学多久 redis要学吗_数据库_21


redis 要学多久 redis要学吗_redis 要学多久_22


getset命令

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

redis 要学多久 redis要学吗_redis 要学多久_23


(2)List

列表就像下面图,flushdb清除之前数据库

redis 要学多久 redis要学吗_java_24

我们先用flushdb将数据库清空,再来玩List

redis 要学多久 redis要学吗_redis_25

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

这里key一般写list表示列表

redis 要学多久 redis要学吗_redis_26


redis 要学多久 redis要学吗_redis 要学多久_27


lpush就是左边push,rpush就是从右边push

redis 要学多久 redis要学吗_redis_28


就是可以从两边插入值,可以插入那么也就可以删除

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

redis 要学多久 redis要学吗_java_29


redis 要学多久 redis要学吗_redis 要学多久_30


trim就是修剪,会把以前的列表修改,就像剪树枝,会剪去一部分,留下一部分

redis 要学多久 redis要学吗_redis 要学多久_31


下面对应更新操作

redis 要学多久 redis要学吗_java_32

组合命令

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

redis 要学多久 redis要学吗_redis_33


redis 要学多久 redis要学吗_数据库_34


两边插入或者改动效率最高,中间来说效率会低不少,栈(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		#随机移除元素

redis 要学多久 redis要学吗_数据库_35


redis 要学多久 redis要学吗_redis_36


添加重复的会不成功,返回false

redis 要学多久 redis要学吗_数据库_37


redis 要学多久 redis要学吗_redis_38


redis 要学多久 redis要学吗_redis_39


redis 要学多久 redis要学吗_redis 要学多久_40

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

redis 要学多久 redis要学吗_数据库_41


redis 要学多久 redis要学吗_数据库_42


这个交集就像微信中,会显示多少好友关注过某个公众号,就把好友的公众号和自己做了一个交集,微博里共同关注的博主也是

redis 要学多久 redis要学吗_数据库_43


(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	#取多个值

redis 要学多久 redis要学吗_数据库_44


redis 要学多久 redis要学吗_redis_45

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

redis 要学多久 redis要学吗_java_46

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

redis 要学多久 redis要学吗_Redis_47

hincrby key field 自增值

redis 要学多久 redis要学吗_Redis_48


我们实际可以设置自己的user对象,user:1表示id为1的user,常用于用户信息的存储或者说对象的存储

redis 要学多久 redis要学吗_java_49


(5)ZSet

ZSet是有序集合,多了一个score计数位,用于排序,flushdb清除之前数据库

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

redis 要学多久 redis要学吗_redis_50

zset最大作用就是排序,那我们就来排序看看,给员工薪水排序

redis 要学多久 redis要学吗_redis_51

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

redis 要学多久 redis要学吗_java_52


redis 要学多久 redis要学吗_Redis_53


redis 要学多久 redis要学吗_数据库_54


下面就是从下标为1和下标为2位置找一个

redis 要学多久 redis要学吗_redis_55


本章节完毕