目录:
Redis从入门到精通(一):缓存
Redis从入门到精通(二):分布式锁以及缓存相关问题
Redis从入门到精通(三):Redis持久化算法以及内存淘汰策略
Redis从入门到精通(四):Redis常用数据结构以及指令
Redis从入门到精通(五):Redis6整合SpringBoot2.x+Mybatis+SpringCache
Redis从入门到精通(六):Redis高可用原理
Redis从入门到精通(七):跳跃表的简介与实现
Redis从入门到精通(八):Redis新特性
Redis部署
-
买服务器。大三的时候买了一年阿里云服务器,所以阿里的优惠已经不对我开放了,于是我这次买的是腾讯云,CentOS7.6,反正第一次都有优惠,所以你们看哪个便宜买哪个就行。
-
安装必要插件:
yum install -y gcc-c++ autoconf automake
查看自己安装的版本,如果版本低于5.3,需要更新。
gcc -v
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binunits
scl enable devtoolset-9 bash
echo “source /opt/rh/devtoolset-9/enable” >> /etc/profile -
安装redis。
wget http://download.redis.io/releases/redis-6.2.3.tar.gz
tar xzf redis-6.2.3.tar.gz
cd redis-6.2.3
make
cd src
./redis-server …/redis.conf会出现如下图形

mkdir -p /usr/local/redis
make PREFIX=/usr/local/redis install会出现

进入/usr/local/redis/bin目录下,会有如下文件:

名字都很熟悉,现在主要是redis-cli(客户端)和redis-server(服务端)。
我们在最初已经开启了redis-server,为了更方便的演示,我们现在kill掉所有的redis进程,重新开始服务部署。ps aux | grep “redis”
kill -9 进程号
./redis-server
新开启一个session,进入同样目录
./redis-cli
开启成功。
常用数据结构以及指令
啥是Redis常用的数据结构?
就是说,在内存中,存放的数据总得用一个数据结构来承接,这个数据结构就是Redis支持的结构。而在redis中,支持多种数据结构。
但是有些指令是通用的,即不管是哪个数据结构都可以使用这些指令,这些指令有:
- exists:判断key是否存在
- del:删除key
- type:判断key类型
- ttl:查看可key存活时间
String
这是最简单也是最基本的一种结构,两个string类型的变量组成的键值对key-value,存储在redis中。

key甚至可以加上平时编程时不允许加的符号,例如:

我们也可以设置value自动填充。比如我们csdn这个网站的文章都有阅读量的标签,每次点击,阅读量都会加一,我们不用每次先查询文章原有阅读量,两次查询势必会使得响应速度减慢。因此们有incr命令可以让value自增:

可以看到,string类型也变成了int。
当我们将value设置成不可转换为int类型的字符串时,会报错。

当然也可以一次加好多数,利用incrby命令:

在许多情况下,我们需要给存入的内容设置过期时间,从而可以帮助redis清缓存,使得内存不会太慢。这时候,我么就用到了命令:setex key expiretime value。当过期时,返回空值。

编程的时候,尤其是C语言,有一个宏定义是ifndef,在redis中,我们想要实现同样的功能,需要用到命令setnx key value,当有key时,舍弃新的value,当没有key时,设置key。

还有一种我不常用的,就是getset命令,在设置新值的时候,返回旧值:

(我老是打错,忽略。也好,可以查看输错的时候各种命令返回的结果)
更多命令去看官网吧,平时这些命令够用了。
list
list命令比较多,我们一点一点来说。其中下面的命令,[ r ]的意思是right,可以与 l 替换。
lpush key value1 [value2 ...]

lrange key 0 -1列出key所有的元素;lrange key 0 0列出从0开始第0号元素;lrange key 0 2列出0开始的两个元素;lindex key 2列出第三号元素。

lpop key弹出第一个元素llen key查看key的元素个数brpop key移除并返回最后一个元素,当无元素时该方法阻塞,有元素到来再移除。lrem key count value移除count个在key中的value。
Hash
之前我不是很明白,既然有了String,干嘛还用hash呢,毕竟实际存储在redis里面的还是hash值。如此的话,hash和string类型对于redis有什么区别呢?
实际上,我们存储的是类似于json串的一个结构,一个key是由许多个field和value组成的。

hset key field value

就这么几个单词,打错了一堆,不要在意这些细节。hgetall key

hdel key field

hexists key field

hincrby key field number

Set
C语言中,set集合用来保存唯一的数据。加入set集合先后进来两个相同的数据,将会把新数据替换掉以前的数据。redis的set也是同样的道理。
-
sadd key value添加元素

-
scard key查看key中有多少value

-
sdiff key1 key2查看两个集合的差集。返回的是集合1中的元素。

抖音中不是有“可能认识的人”功能么?我们有200个好友,就我俩不认识,你说为啥不认识。。。。或者有人工智能基础的小伙伴也可以联想到协同过滤的原理,这里就不提了。 -
sinter key1 key2返回交集。

-
sismember key member判断member是否是key中的成员

-
srem key member移除key中的member,如果member不在key中,忽略。 -
sunion key1 key2拿到key1和key2的并集,就是key1和key2中所有的元素。

-
smembers key返回某一个key的全部元素。

Sorted Set
很清楚了,就是排序的Set。
可以用来对每天的出货量进行排序,也可以用来做比赛的排名等。
Sorted Set底层使用ZipList压缩列表和跳跃表组成的,我们在第七节实现一下该结构。
-
zadd key number valuezcard key

-
zrange key from to返回from到to区间内的商品,排序后的。也可以加上分数:zrange key from to withscores


-
zincrby key member value增加数量。

-
zrevrange key from to从大到小排序。 -
zrank key value得到从小到大排序,value的次序,0是第一名。zrevrank key value自然是从大到小。

-
zrem key value移除元素 -
zscore key value查看某一个元素得数量。
本文主要介绍了Redis的常用数据结构,包括String、List、Hash、Set和Sorted Set,并详细讲解了相关指令,如exists、del、type、ttl等。在String结构中,讨论了自增操作和设置过期时间。对于List,列出了如lrange、llen等操作。Hash结构允许存储多个field-value对,而Set用于存储唯一元素。Sorted Set提供了有序的集合操作。最后,文章提到了Redis的部署和常用操作,帮助读者从入门到精通。

被折叠的 条评论
为什么被折叠?



