simple_redis_happy入门

Redis入门

1. Redis 简介

1.1 Nosql

NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。 作用:应对基于海量用户和海量数据前提下的数据处理问题。一种不同于关系型数据库的新型数据结构。

常见的Nosql: ⚫Redis ⚫ memcache ⚫ HBase ⚫ MongoDB

1.2 Redis特点
  • redis 一种基于内存提供读写服务的Nosql数据库, 适合在系统中做缓存数据库。
  • redis 具有五种数据结构,这五种数据结构都是key-value 格式的简单数据结构
  • redis 虽然是单线程的,但你无需为它的性能和担忧
  • redis 可以搭建集群来实现海量数据的缓存存储服务
  • redis 支持两种持久化手段,RDB和AOF,一般企业中会同时开启这种方案
  • redis 并不是用来取代mysql这种关系型数据库,仅仅为了解决高并发下的数据读写问题,采用redis 对MySQL表中数据进行缓存。
  • redis 存储的数据可以设置过期时间,也就是我们所说的“时效性”。
1.3 Redis 应用
  • redis 是解决存在高并发,大流量的手段之一,因为它具备简单的数据结构,并且基于内存存储,单线程快速访问,所以读写性能高。往往存在热点数据的系统,流量都很大。
  • 场景一: 电商系统的商品详情页缓存。
  • 场景二: 新浪微博-明星的博客和八卦。
  • 场景三: 小学生课后辅导APP,将考试试卷进行redis缓存,因为下午6.30小学生放学后,都会做作业和考试等,存在流量高峰期。
  • 场景四: 小学生课后辅导APP, 也可以有排行榜功能,使用redis 实现排行榜要比Mysql简单的多。
  • 场景五… 只要存在流量的地方都可以考虑redis 来做数据的缓存。
  • redis 存储的数据可以设置过期时间,所以类似短信验证码Session 会话 这种有时效性的业务场景,都可以使用redis。
  • redis 还可以:分布式锁,秒杀活动商品库存问题,消息队列等应用。

2. Redis 的下载与安装

2.1 下载和安装
[root@localhost ~]$ cd /itcast/install    #进入到自己创建的安装目录下
#下载压缩包
[root@localhost ~]$ wget http://download.redis.io/releases/redis-5.0.0.tar.gz    
#解压缩
[root@localhost ~]$ tar -zxvf redis-5.0.0.tar.gz -C /itcast/install/

#安装gcc基础环境, 可以先查看是否安装过:  gcc --version
[root@localhost ~]$ yum -y install gcc
[root@localhost ~]$ yum -y install gcc-c++

#编译redis
[root@localhost ~]$ cd /itcast/install/redis-5.0.0
[root@localhost redis-5.0.0]$ make MALLOC=libc

#安装
[root@localhost redis-5.0.0]$ cd src
[root@localhost src]$ make install

#查看是否安装成功, 输入命令: "ll |grep redis-"  如果显示信息如下所示, 就是安装成功
[root@localhost src]$ ll |grep redis-
-rwxr-xr-x. 1 root root  353848 6月  26 18:30 redis-benchmark
-rw-rw-r--. 1 root root   29605 10月 17 2018 redis-benchmark.c
-rw-r--r--. 1 root root  109104 6月  26 18:30 redis-benchmark.o
-rwxr-xr-x. 1 root root 4016272 6月  26 18:30 redis-check-aof
-rw-rw-r--. 1 root root    7143 10月 17 2018 redis-check-aof.c
-rw-r--r--. 1 root root   28744 6月  26 18:30 redis-check-aof.o
-rwxr-xr-x. 1 root root 4016272 6月  26 18:30 redis-check-rdb
-rw-rw-r--. 1 root root   13541 10月 17 2018 redis-check-rdb.c
-rw-r--r--. 1 root root   65872 6月  26 18:30 redis-check-rdb.o
-rwxr-xr-x. 1 root root  771056 6月  26 18:30 redis-cli
-rw-rw-r--. 1 root root  249486 10月 17 2018 redis-cli.c
-rw-r--r--. 1 root root  871040 6月  26 18:30 redis-cli.o
-rwxr-xr-x. 1 root root 4016272 6月  26 18:30 redis-sentinel
-rwxr-xr-x. 1 root root 4016272 6月  26 18:30 redis-server
-rwxrwxr-x. 1 root root    3600 10月 17 2018 redis-trib.rb



2.2 配置文件修改
#进入到 /itcast/install/redis-5.0.0/ 目录下
[root@localhost /]$ cd /itcast/install/redis-5.0.0/ 

#创建配置文件的文件夹 和 数据的文件夹
[root@localhost redis-5.0.0]$ mkdir conf
[root@localhost redis-5.0.0]$ mkdir data

#将默认配置文件复制一份到conf文件夹下, 同时备份一份
[root@localhost redis-5.0.0]$ cp redis.conf conf/
[root@localhost redis-5.0.0]$ cp redis.conf conf/redis.conf.back

2.3 redis启动
#进入到 redis-5.0.0/src 目录下, 启动redis服务, &符号表示后台运行, 能够看到如下图所示,启动成功
[root@localhost redis-5.0.0]$ cd src
[root@localhost src]$ ./redis-server ../redis.conf  &

9818:M 26 Jun 2020 19:02:20.243 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.0 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 9818
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

9818:M 26 Jun 2020 19:02:20.244 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.


#ctrl + c 回退到命令行出, 查看进程, 如下所示就证明
[root@localhost src]$ ps -ef|grep redis
root       9818   7878  0 19:02 pts/0    00:00:00 ./redis-server 0.0.0.0:6379
root       9832   7878  0 19:02 pts/0    00:00:00 grep --color=auto redis
2.4 客户端连接
#本地连接, 如下表示连接成功
[root@localhost conf]$ redis-cli 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 

#连接远程redis 
[root@localhost conf]$ redis-cli –h 61.129.65.248 –p 6384
2.5 配置文件修改和再次启动
#将redis-6379.conf中的注释等都处理掉
[root@localhost redis-5.0.0]$ cd conf
[root@localhost conf]$ cat redis.conf|grep -Ev '^$|#' > redis-6379.conf

#进入到conf文件夹对redis-6379.conf文件进行修改
[root@localhost conf]$ vim redis-6379.conf

#bind 127.0.0.1 允许外网访问
#bind 0.0.0.0
bind 192.168.23.129

#后台启动
daemonize yes

#日志文件
logfile "redis-6379.log"

#数据文件夹设置
dir /itcast/install/redis-5.0.0/data

#:wq 保存退出

#关闭redis 服务
[root@localhost conf]$ ps -ef|grep redis
root       9818   7878  0 19:02 pts/0    00:00:02 ./redis-server 0.0.0.0:6379
root      10675   7878  0 19:45 pts/0    00:00:00 grep --color=auto redis
[root@localhost conf]$ 
[root@localhost conf]$ kill -9 9818

#再次启动并加载修改后的配置 redis-6379.conf
[root@localhost conf]$ redis-server redis-6379.conf

#查看进程是否存在, 如下启动成功
[root@localhost conf]$ ps -ef|grep redis
root      10734      1  0 19:47 ?        00:00:00 redis-server 0.0.0.0:6379
root      10739   7878  0 19:47 pts/0    00:00:00 grep --color=auto redis
[root@localhost conf]$ 


3. Redis 的基本操作

中文网:https://www.redis.net.cn/tutorial/3508.html

3.1 数据存储类型介绍
  • redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据类型

  • 数据类型:

    1. 字符串类型 string

    2. 哈希类型 hash : map格式

    3. 列表类型 list : linkedlist格式。支持重复元素

    4. 集合类型 set : 不允许重复元素

    5. 有序集合类型 sortedset:不允许重复元素,且元素有顺序

  • 当命令为验证某个数据是否存在时0为false , 1 为true

    ⚫ (integer) 0 → false 失败

    ⚫ (integer) 1 → true 成功

  • 如果想清屏可以输入命令 : clear

  • 如果想退出可以尝试ctrl+c

3.2 字符串类型 string
  • 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型

  • 存储数据的格式:一个存储空间保存一个数据

  • 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用

  • 结构

    key vlaue

基本命令
#1. 存储: set key value  多次set同一个key则为修改该key的value          
127.0.0.1:6379> set username zhangsan            
OK        

#2. 获取: get key            
127.0.0.1:6379> get username            
"zhangsan"        

#3. 删除: del key            
127.0.0.1:6379> del age            
(integer) 1

#4. 判定性添加数据, 如果key存在, 则不修改
127.0.0.1:6379> setnx agui zls
(integer) 1

#5. 添加/修改多个数据
127.0.0.1:6379> mset key1 value1 key2 value2
OK

#6. 获取多个数据
127.0.0.1:6379> mget key1 key2
1) "value1"
2) "value2"

#7. 获取数据字符个数(字符串长度)
127.0.0.1:6379> strlen key1
(integer) 6

#8. 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
127.0.0.1:6379> append key1 aaa
(integer) 9
127.0.0.1:6379> get key1
"value1aaa"

基本命令总结

string存储结构

数据操作 ◆ set ◆ mset ◆ del ◆ setnx ◆ append

查询操作 ◆ get ◆ mget ◆ strlen

扩展命令
#创建key为number, value为1
192.168.23.129:0>incr number
"1"

#自增+1
192.168.23.129:0>incr number
"2"

#自减-1
192.168.23.129:0>decr number
"1"

#获取number的value
192.168.23.129:0>get number
"1"

#原值上加100;  incrby key increment
192.168.23.129:0>incrby number 100
"101"

#原值上减100;  decrby key increment
192.168.23.129:0>decrby number 100
"1"

#设置数据具有指定的生命周期, 默认没有过期时间
#setex key seconds value  单位秒
#psetex key milliseconds value  单位毫秒
#name zhagnsan  10秒过期
192.168.23.129:0>setex name 10 zhangsan 
"OK"

#name zhagnsan  10秒过期
192.168.23.129:0>setex name 10000 zhangsan 
"OK"
string 类型注意事项
  • 数据未获取到时,对应的数据为(nil),等同于null
  • 数据最大存储量:512MB
  • string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算
  • 按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错 9223372036854775807(java中Long型数据最大值,Long.MAX_VALUE)
  • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响
扩展命令总结

⚫ 数值操作 ◆ incr ◆ incrby ◆ incrbyfloat ◆ desc ◆ descby

⚫ 时效性操作 ◆ setex ◆ psetex

应用场景
  • 明星的新浪微博主页的粉丝数量博客数量

  • 在redis中为明星设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可

    #id为3506728370的明星用户  粉丝数量 200个
    192.168.23.129:0>set user:id:3506728370:fans  200
    "OK"
    
    #id为3506728370的用户  博客数量 100个
    192.168.23.129:0>set user:id:3506728370:blogs  100
    "OK"
    
    
  • 也可以使用json格式保存数据

192.168.23.129:0>set user:id:3506728371  '{"fans":12210947, "blogs":6164,"focuses":83}'
"OK"
key 的设置约定

数据库中的热点数据key命名惯例

表名 主键名 主键值 字段名
order id 29437595 pay_status
equip id 390472345 type
news id 202004150 title
#存储订单的支付状态
192.168.23.129:0>set order:id:29437595:pay_status  已支付 
"OK"

#获取
192.168.23.129:0>get order:id:29437595:pay_status
"已支付"
3.3 哈希类型 hash
  • 新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息

  • 需要的存储结构:一个存储空间保存多个键值对数据

  • hash类型:底层使用哈希表结构实现数据存储

  • 结构

    key filed1 value1

    ​ filed2 value2

    ​ … …

基本命令
#添加/修改数据  hset key field value
localhost:0>hset zhangsan  name  '张三'
"1"

localhost:0>hset zhangsan  age  23
"1"

#获取数据 hget key field    hgetall key
localhost:0>hget zhangsan name
"张三"

localhost:0>hget zhangsan age
"23"

localhost:0>hgetall zhangsan
 1)  "name"
 2)  "张三"
 3)  "age"
 4)  "23"
localhost:0>

#删除数据 hdel key field1 [field2]/  del key
localhost:0>hdel zhangsan name
"1"
#删除整个hash  key
localhost:0>del zhangsan
"1"

#设置field的值,如果该field存在则不做任何操作 hsetnx key field value
localhost:0>hset zhangsan  name  '张三'
"1"
localhost:0>hsetnx zhangsan  name  '张三'
"0"
localhost:0>

#添加/修改多个数据
#hmset key field1 value1 field2 value2 … 
localhost:0>hmset localhost:0>lisi name 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值