后台开发学习笔记(二十五、redis安装和基本数据结构)

终于到了Redis这个重量级人物了,很久以前就听说过Redis大名了,鼎鼎大名,之前只是听说过,并没有实际操作过,现在终于可以操作了,那就赶紧体验一波。

25.1 安装

每接触一个新的软件,都需要安装,如果是windows的话就不需要讲这个了,但是我们都是用linux操作的,linux都是用源码安装的,所以有必要记录一下,怕以后忘记了,然后又从新找资料,现在越来越感觉到做笔记的好处了。

25.1.1 下载

首先我们来看看redis的官网 https://redis.io/,点击进去,就可以发现,页面简单粗暴,
在这里插入图片描述
一下子就看到了Download,点击就可以了,下次是不是不说这种下载步骤了。

25.1.2 安装前

自从上次源码安装了mysql之后,人都有点飘了,现在又尝试源码安装一下redis,废话不多说,解压redis压缩包,然后打开INSTALL文件,想不到redis这个INSTALL文件竟然只有一行:
在这里插入图片描述
叫我们看README,其实一般开源源码都是README这个文件,这个文件对我们整体了解这个源码还是挺有帮助的,如果需要看源码的话,可以先看这个README文件,我刚刚也浏览了一遍,里面的内容有点多,我这个就不粘贴出来,这里我只粘贴对我们安装有用的部分,其他的对源码的介绍部分先不看,因为我们这一节只是了解redis,并且使用redis,所以不需要去看源码,想看源码的时候再看。

25.1.3 编译

在这里插入图片描述
编译的部分,就只有这么一点,我当初还以为我看错了,因为其他的源码编译,起码也要./config啥啥的,这时候才会生成Makefile,这个redis也是简单,一上来的可以直接make,不过这样的话,就更喜欢了,比较老是在编译的时候出错,也会打击我们这种初学者的xinxin。

make
25.1.4 运行

上面一步的make,需要等待一段时间,大概几分钟吧,有可能我分配的虚拟机比较low,所以编译的时候比较慢,编译完成之后,我们就可以直接运行了,运行的步骤也在README中有讲解。
在这里插入图片描述
果然还是官方文档比较靠谱,我们就按照这个命令敲了

cd src/
./redis-server ../redis.conf

这时候redis就已经运行了,我们可以看到运行成功的打印:
在这里插入图片描述
果然还是很漂亮的,redis还是杠杠的。

25.1.5 使用

官方给的资料确实太给力了,连让我们自己测试的例子都已经给,那我们就试试了
在这里插入图片描述
我们按照这个命令运行试试:

cd src/
root@debian:~/redis/redis-5.0.8/src# ./redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379> 

结果跟官网提示的差不多,说明我们这次安装已经成功了。

25.1.6 安装

这个安装其实是安装库和头文件,便于程序中使用的,上面的操作其实是在安装数据库。
在这里插入图片描述
看着前面说的直接make install就可以了,但是后面不知道为什么还说了一个安装的脚本,我看了那个安装脚本,结果发现这个安装脚本,确实比较难,不知道写的是啥,这么多东西,先不管,现在还没到安装的时候,等到要安装再说。

25.1.7 config简介

我们启动server的时候,是需要指定一个config文件,这个文件可以简单说一下:
在这里插入图片描述
在这里插入图片描述

  • port :端口,在我们启动多个redis的时候,需要修改端口,就可以修改配置文件中的这个选项。
  • timeout:超时时间,0好像是没有启用超时
  • tcp-keeptime:保持连接的时间,也就是redis每隔这么长的时间就需要给服务器发一个心跳包
  • pidfile:这个是进程的日志文件
  • loglevel:打印的等级,我们这是默认是notice

25.2 基本数据结构

25.2.1 key:键

是一种redis存储数据的方式,命令如下:

127.0.0.1:6379> set chen ren   #设置key值
OK
127.0.0.1:6379> get chen	#获取key值
"ren"
127.0.0.1:6379> del chen	#删除key值
(integer) 1
127.0.0.1:6379> get chen
(nil)
127.0.0.1:6379> 

# 延时5秒删除key值
127.0.0.1:6379> set chen ren
OK
127.0.0.1:6379> EXPIREAT chen 5
(integer) 1
127.0.0.1:6379> get chen
(nil)
127.0.0.1:6379> 
25.2.2 String:字符串

没感觉字符串跟key的区别, 可能是现在刚接触吧,还是不熟悉,这个疑问先挂起,以后会的时候,再回来写:

127.0.0.1:6379> set cgr chenguanren		#设置字符串
OK
127.0.0.1:6379> getrange cgr 1 3		#获取1和3之间的子字符串
"hen"
127.0.0.1:6379> getbit cgr 0	# 获取位(奇怪的是,这个String跟上面的一样,感觉存储的位置不一样)
(integer) 0
127.0.0.1:6379> get cgr
"chenguanren"
127.0.0.1:6379> 
127.0.0.1:6379> setbit cgr 1 1	# 设置位,这个就是推荐视频使用的方式,
(integer) 1
127.0.0.1:6379> get cgr
"chenguanren"
127.0.0.1:6379> getbit cgr 1
(integer) 1
127.0.0.1:6379> 

奇怪的是,明明两个String字符串是一样的,但是为什么存储的位置不一样,设置位的这个,适用于视频推荐的算法,其实就是一个bitmap,如果用户点击了一个视频之后,这个视频的位就置1,以后就不推荐这个视频了。

127.0.0.1:6379> set count 0
OK
127.0.0.1:6379> get count
"0"
127.0.0.1:6379> incr count    # 让字符串++,可以做记录一个接口被使用的次数
(integer) 1
127.0.0.1:6379> incr count
(integer) 2
127.0.0.1:6379> incr count
(integer) 3
127.0.0.1:6379> decr count   # 减少小于0,还是会继续减,这里要注意一下
(integer) 2
127.0.0.1:6379> 
25.2.3 Hash:散列表

redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象,这个对象就是像mysql那样,一个关键id,然后带了一些数据,这个就像一个有关联的数据结构。

127.0.0.1:6379> hmset chenggg sex "nan" age 20 height 199    # 保存一个对象数据
OK
127.0.0.1:6379> hgetall chenggg					# 获取一个对象数据
1) "sex"
2) "nan"
3) "age"
4) "20"
5) "height"
6) "199"
127.0.0.1:6379> hlen chenggg		# 获取对象数据的长度
(integer) 3
127.0.0.1:6379> 

用hash散列表的感觉就像是在使用mysql的感觉,存储这种关系型的数据。

25.2.4 List:列表

这个list就像是链表,不知道我的感觉对不对,毕竟我也不熟悉,哈哈哈。

多操作操作就会熟悉了,不怕:

127.0.0.1:6379> 
127.0.0.1:6379> lpush server redis     # 添加 server的一个列表
(integer) 1
127.0.0.1:6379> lpush server mysql		# 继续添加
(integer) 2
127.0.0.1:6379> lpush server mongodb 2		
(integer) 4
127.0.0.1:6379> lpush server nighx 2 3
(integer) 7
127.0.0.1:6379> lrange 0 10				#  获取链表中的元素
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange server 0 10
1) "3"
2) "2"
3) "nighx"
4) "2"
5) "mongodb"
6) "mysql"
7) "redis"
127.0.0.1:6379> 
127.0.0.1:6379> 
25.2.5 Set:集合

redis的set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复数据。redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

127.0.0.1:6379> 
127.0.0.1:6379> sadd server redis		#  Set集合中的string不能和list几种中一样
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> 
127.0.0.1:6379> sadd server0 redis	# Set集合中添加元素
(integer) 1
127.0.0.1:6379> sadd server0 mysql	
(integer) 1
127.0.0.1:6379> sadd server0 mogodb
(integer) 1
127.0.0.1:6379> smembers server0	# 打印Set集合中的元素
1) "mogodb"
2) "mysql"
3) "redis"
127.0.0.1:6379> srem server redis
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> srem server0 redis		# 删除Set集合中的一个元素
(integer) 1
127.0.0.1:6379> smembers server0
1) "mogodb"
2) "mysql"
127.0.0.1:6379> 
25.2.6 Sorted Set:有序集合

redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数却可以重复。集合是通过哈希表实现的,所以添加,删除,查找复杂度都是O(1)。

127.0.0.1:6379> zadd server1 1 redis
(integer) 1
127.0.0.1:6379> zadd server1 2 mongpdb
(integer) 1
127.0.0.1:6379> zadd server1 3 mysql
(integer) 1
127.0.0.1:6379> zrange server1 0 3
1) "redis"
2) "mongpdb"
3) "mysql"
127.0.0.1:6379> 

跟Set其实差不多,这里我们就不说多的命令了,因为说了也记不住,等到用的时候,用到了自然会记住。

这一篇,其实写的不怎么样,因为我也是第一次接触redis,好多东西不懂,还需要继续学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值