文章目录
字节跳动校招内推码: NH19EF9
投递链接: https://jobs.toutiao.com/s/L3bLQM3
第二章 Redis安装和使用
简单的事情做到极致,学习是最好的投资!
redis是当下非常流行的基于kv结构的作为cache使用的NoSQL数据库。可以对数据执行curd。主要提升的是查询的性能。
可以作为Cache(缓存)使用后
中文:http://www.redis.cn/
1.介绍
Remote Dictionary Server(Redis)是
-
开源的
-
使用C语言编写
-
支持网络
-
可基于内存
-
可持久化的
-
key-value数据库。key是字符类型,value可以是
- 字符串String
- 哈希(Map)
- 列表(List)
- 集合(Sets)
- 有序集合(sorted sets)
每种数据类型都有自己的专属命令。
所以它通常被称为数据结构服务器。
1.1 流程
Cache(缓存):存在内存中的数据
user发起请求—控制器—service—dao----数据库
使用cache
user发起请求—控制器—service—redis
user发起请求—控制器—service—redis(没有数据)—dao—数据库
2.安装和使用
在linux上安装
## 安装
brew instal redis
## 启动
brew services restart redis
## 启动redis服务器
redis-server
## 终止redis的运行
control+c
直接关闭终端窗口可终止redis运行
这种启动方式不是后台启动,因此不推荐
### redis 客户端命令
quit
设置后台启动
vim redis.conf
默认是连接本机 127.0.0.1上的redis,端口是6379。
-
第一个命令,创建字符类型的数据
redis-cli ## 调用工具执行命令 set key value ## 等同于 insert into set name zhangsan get key ## 获取key的值,等同于select ## 关闭redis客户端 shutdown ## 或者 kill pid
3.redis客户端
3.1 功能
- 发送redis命令,编写redis命令
- 显示服务端的处理结果,显示数据。
用户开发人员-----在客户端中编写redis----客户端把命令发送给服务端----服务端把处理结果发送给-----客户端-----把数据呈现给用户。
3.2 redis客户端
-
Redis-cli:redis自带的客户端,使用灵活,支持很多的命令。
-
使用方式
./redis-cli
默认是连接到127.0.0.1。上面的6379的redis。
-
访问其他的服务器上的redis数据:
./redis-cli -h 192.168.1.10 -p 6379 ## mac连接本机 redis-cli -h 127.0.0.1 -p 6379
-
3.3 redis远程客户端
官网地址:https://redisdesktop.com/
3.4 redis编程客户端Jedis
redis的java编程客户端,redis官方首选推荐使用jedis,jedis是一个很小但很健全的redis的java客户端。通过jedis可以像使用redis命令行一样使用redis。
- jedis完全兼容 redis2.8.x 和redis.3.x.x
- jedis源码 :http://github.com/xetorthio/jedis
4. Redis基本操作命令(ping,dbsize,select,flushdb,quit)
-
沟通命令,查看状态
127.0.0.1:6379> ping PONG
-
查看当前数据库中key的数目:dbsize
127.0.0.1:6379> dbsize (integer) 1
-
redis默认使用16个数据库
redis默认使用16个库,从0到15。对数据库个数的修改,在redis.conf文件中
# 进入redis的文件目录下 cd /usr/local/redis-4.0.13/ vim redis.conf 会出现 databases 16 ## 如果使用mac的brew安装 安装位置在local的Cellar下
我在mac下使用的brew安装的redis,brew帮我节省了大量的配置时间。但是我并没有找到redis的配置文件
补充:brew把redis.conf放到了local/ect下。 -
切换库命令 select db
127.0.0.1:6379> select 5 ## 切换到第六个数据库 OK 127.0.0.1:6379[5]> set k1 vq ## 设置值 key1 value1 OK 127.0.0.1:6379[5]> set k2 v2 ## 设置值 key2 value2 OK 127.0.0.1:6379[5]> dbsize ## 查看key_value的数量 (integer) 2 127.0.0.1:6379[5]> select 0 ## 选择第0个库 OK 127.0.0.1:6379> ## 第0个库没有标识
-
删除当前库的数据:flushdb
实际生产环境中尽量不要用。
127.0.0.1:6379> select 5 OK 127.0.0.1:6379[5]> flushdb OK 127.0.0.1:6379[5]>
-
退出exit 或 quit。
127.0.0.1:6379[5]> quit bytedance$ ps -ef |grep redis 501 552 1 0 10:00上午 ?? 0:15.61 /usr/local/opt/redis/bin/redis-server 127.0.0.1:6379 501 11478 9728 0 3:39下午 ttys001 0:00.00 grep redis
5.redis的key的操作命令
(1)keys
语法:keys pattern
作用:查找所有符合模式pattern的key,pattern可以使用通配符。
通配符:
-
*:表示0或多个字符,例如
keys * ## 查询所有的key 127.0.0.1:6379> keys *## 为什么不能用? 数据太大,太慢 1) "name" 2) "home" 3) "age" 127.0.0.1:6379> keys k* 1) "k2" 2) "k1" 127.0.0.1:6379> keys w* 1) "wood" 2) "world" 3) "word"
-
?:表示单个字符,例如:wo?d 匹配word,wood
127.0.0.1:6379> keys wo?d 1) "wood" 2) "word"
redis为什么快是因为他
- 是单线程的。单线程并不一定比多线程慢,没有上下文切换的话会快一点。
- 操作内存数据。
- linux的事件处理机制有关。事件轮询的IO处理机制:多路复用IO(有深度,并且复杂)
(2)exsists
key是否存在,有几个key存在。
127.0.0.1:6379> exists k1 k2 ## k1 k2 中有几个存在
(integer) 2
127.0.0.1:6379> exists k1 k2 k3 k4 k5
(integer) 2
(3)expire
- 语法:expire key seconds
- 作用:设置key的生存时间,超过时间,key自动删除。单位是秒。
- 返回值:设置成功返回数字1,其他情况是0。一般与ttl命令一起使用。
(4)ttl
-
语法:ttl key
-
作用:以秒为单位,返回key的剩余生存时间(ttl:time to live)
-
返回值
- -1:没有设置key的剩余生存时间,key永不过期。
- -2:key不存在。
- 数字:key的剩余时间,秒为单位。
## 一开始的时候的keys
127.0.0.1:6379> keys *
1) "wood"
2) "k2"
3) "world"
4) "name"
5) "home"
6) "word"
7) "k1"
8) "age"
## 查询key的剩余生存时间
127.0.0.1:6379> ttl k1
(integer) -1 ## 表示永不过期
127.0.0.1:6379> ttl k2
(integer) -1
## k1存活时间设置为20秒
127.0.0.1:6379> expire k1 20
(integer) 1 ## 成功
## 查询key的剩余生存时间
127.0.0.1:6379> ttl k1
(integer) 12 ## 还剩12秒
127.0.0.1:6379> ttl k1
(integer) 8 ## 还剩8秒
127.0.0.1:6379> ttl k1
(integer) 1 ## 还剩1秒
127.0.0.1:6379> ttl k1
(integer) -2 ## key不存在
## 结束时的keys
127.0.0.1:6379> keys *
1) "wood"
2) "k2"
3) "world"
4) "name"
5) "home"
6) "word"
7) "age"
127.0.0.1:6379> expire k100 10
(integer) 0 ##设置不成功
过期后可以节省空间,存放新的数据。定期清除redis保存的数据。
例子:验证码规则
## 创建验证码为1024
set verify_code 1024
## 设置时效为60秒
expire verify_code 60
## 用户输入验证码,验证正确
ttl verify_code
## 结果大于等于0 key没有过期,验证是有效。小于0就过期了,验证码时效。
(5)type
- 语法:typekey
- 作用:查看key所存储的数据类型。
- 返回值:字符串表示的数据类型。
- none(key不存在)
- string(字符串)
- list(列表)
- set(集合)
- zset(有序集)
- hash(哈希表)
127.0.0.1:6379> type k1
none
127.0.0.1:6379> type k2
string
## 成功删除了前3个,后两个不存在。
127.0.0.1:6379> del k2 name wood k100 k1000
(integer) 3