c语言判断套接字读缓存区有没有数据_Redis---Key-Value的NoSQL数据库(一)

114018ae146120b8531ea9bbbe9c47a4.png

不管什么时候学习都不晚

【Redis】

主要内容

  1. Redis简介
  2. 使用Redis作为缓存工具时流程
  3. Redis单机版安装
  4. Redis数据类型
  5. Redis持久化策略
  6. Redis主从复制
  7. 哨兵
  8. 集群
  9. Jedis
  10. Spring Boot整合Spring Data Redis
  11. 缓存穿透
  12. 缓存击穿
  13. 缓存雪崩

一、Redis简介

1. NoSQL简介

目前市场主流数据存储都是使用关系型数据库。每次操作关系型数据库时都是I/O操作,I/O操作是主要影响程序执行性能原因之一,连接数据库关闭数据库都是消耗性能的过程。尽量减少对数据库的操作,能够明显的提升程序运行效率。

针对上面的问题,市场上就出现了各种NoSQL(Not Only SQL,不仅仅可以使用关系型数据库)数据库,它们的宣传口号:不是什么样的场景都必须使用关系型数据库,一些特定的场景使用NoSQL数据库更好。

常见NoSQL数据库:

  • memcached :键值对,内存型数据库,所有数据都在内存中。
  • Redis:和Memcached类似,还具备持久化能力。
  • HBase:以列作为存储。
  • MongoDB:以Document做存储。

2. Redis简介

Redis是以Key-Value形式进行存储的NoSQL数据库。

Redis是使用C语言进行编写的。

平时操作的数据都在内存中,效率特高,读的效率110000/s,写81000/s,所以多把Redis当做缓存工具使用

Redis以solt(槽)作为数据存储单元,每个槽中可以存储N多个键值对。Redis中固定具有16384。理论上可以实现一个槽是一个Redis。每个向Redis存储数据的key都会进行crc16算法得出一个值后对16384取余就是这个key存放的solt位置。

同时通过Redis Sentinel(哨兵)提供高可用,通过Redis Cluster(集群)提供自动分区

二、 使用Redis作为缓存工具时流程(写代码时思路)

  1. 应用程序向Redis查询数据
  2. 判断Key是否存在
  3. 是否存在
  • 存在
  1. 把结果查询出来
  2. 返回数据给应用程序
  • 不存在
  1. 向MySQL查询数据
  2. 把数据返回给应用程序
  3. 把结果缓存到Redis中

6e0ceb9619d9936b0dab988fcde47dc1.png

三、Redis单机版安装

1. 安装依赖:C语言依赖

  • redis使用C语言编写,所以需要安装C语言库

# yum install -y gcc-c++ automake autoconf libtool make tcl

2. 上传并解压

  • 把redis-5.0.5.tar.gz上传到/usr/local/tmp中
  • 解压文件

# cd /usr/local/tmp

# tar zxf redis-5.0.5.tar.gz

3. 编译并安装

  • 进入解压文件夹

# cd /usr/local/tmp/redis-5.0.5/

  • 编译

# make

  • 安装,PREFIX表示把软件安装到哪里

# make install PREFIX=/usr/local/redis

4. 开启守护进程

  • 复制cd /usr/local/tmp/redis-5.0.5/中redis.conf配置文件

# cp redis.conf /usr/local/redis/bin/

  • 修改配置文件

# cd /usr/local/redis/bin/

# vim redis.conf

  • 把daemonize的值由no修改为yes

f331a675716a3ff8787f652ad984211c.png

5. 修改外部访问

在redis5中需要修改配置文件redis.conf允许外部访问。需要修改两处。

1)注释掉bind 127.0.0.1

8b0f7b89eeadbf580977c7cc081a85e1.png

2)protected-mode yes 改成 no

350b215dee46de8a7b2e37bdc352ed4b.png

6. 启动并测试

启动redis,千万不要忘记配置文件,默认不自动加载配置文件。

# ./redis-server redis.conf

重启redis

# ./redis-cli shutdown

# ./redis-server redis.conf

启动客户端工具

#./redis-cli

在redis5中客户端工具对命令会有提供功能。

df3e9a972cc9948c413bfe2082b56605.png

四、Redis数据类型(面试问题)

Redis中数据是key-value形式。不同类型Value是有不同的命令进行操作。

key为字符串类型,value可取类型:

  • String 字符串
  • Hash 哈希表
  • List 列表
  • Set 集合
  • Sorted Set 有序集合

Redis命令相关手册有很多,下面为其中比较好用的两个

fa8421aecee3b2b95d4797a32568cee2.png

Redis中命令有很多,抽取出部分进行讲解。

1. Key操作

1.1 exists

判断key是否存在。

  • 语法:exists key名称
  • 返回值:存在返回数字,不存在返回0

1.2 expire

设置key的过期时间,单位秒

  • 语法:expire key 秒数
  • 返回值:成功返回1,失败返回0

1.3 ttl

查看key的剩余过期时间

  • 语法:ttl key
  • 返回值:返回剩余时间,如果不过期返回-1

1.4 del

根据key删除键值对。

  • 语法:del key
  • 返回值:被删除key的数量

2. 字符串值(String)

2.1 set

设置指定key的值。如果key不存在是新增效果,如果key存在是修改效果。键值对是永久存在的。

  • 语法:set key value
  • 返回值:成功OK

2.2 get

获取指定key的值

  • 语法:get key
  • 返回值:key的值。不存在返回nil

2.3 setnx

当且仅当key不存在时才新增。恒新增,无修改功能。

  • 语法:setnx key value
  • 返回值:不存在时返回1,存在返回0

2.4 setex

设置key的存活时间,无论是否存在指定key都能新增,如果存在key覆盖旧值。同时必须指定过期时间。

  • 语法:setex key seconds value
  • 返回值:OK

3. 哈希表(Hash)

Hash类型的值中包含多组field value。

5d297686e5484892fd1c95486bde5ae4.png

3.1 hset

给key中field设置值。

  • 语法:hset key field value
  • 返回值:成功1,失败0

3.2 hget

获取key中某个field的值

  • 语法:hget key field
  • 返回值:返回field的内容

3.3 hmset

给key中多个filed设置值

  • 语法:hmset key field value field value
  • 返回值:成功OK

3.4 hmget

一次获取key中多个field的值

  • 语法:hmget key field field
  • 返回值:value列表

3.5 hvals

获取key中所有field的值

  • 语法:hvals key
  • 返回值:value列表

3.6 hgetall

获取所有field和value

  • 语法:hgetall key
  • 返回值:field和value交替显示列表

3.7 hdel

删除key中任意个field

  • 语法:hdel key field field
  • 返回值:成功删除field的数量

4. 列表(List)

4.1 Rpush

向列表末尾中插入一个或多个值

  • 语法;rpush key value value
  • 返回值:列表长度

4.2 lrange

返回列表中指定区间内的值。可以使用-1代表列表末尾

  • 语法:lrange list 0 -1
  • 返回值:查询到的值

4.3 lpush

将一个或多个值插入到列表前面

  • 语法:lpush key value value
  • 返回值:列表长度

4.4 llen

获取列表长度

  • 语法:llen key
  • 返回值:列表长度

4.5 lrem

删除列表中元素。count为正数表示从左往右删除的数量。负数从右往左删除的数量。

  • 语法:lrem key count value
  • 返回值:删除数量。

5. 集合(Set)

set和java中集合一样

5.1 sadd

向集合中添加内容。不允许重复。

  • 语法:sadd key value value value
  • 返回值:集合长度

5.2 scard

返回集合元素数量

  • 语法:scard key
  • 返回值:集合长度

5.3 smembers

查看集合中元素内容

  • 语法:smembers key
  • 返回值:集合中元素

6. 有序集合(Sorted Set)

有序集合中每个value都有一个分数(score),根据分数进行排序。

6.1 zadd

向有序集合中添加数据

  • 语法:zadd key score value score value
  • 返回值:长度

6.2 zrange

返回区间内容,withscores表示带有分数

  • 语法:zrange key 区间 [withscores]
  • 返回值:值列表

需要更多Java学习资料的可以到评论区留言或者私信哦,视频、源码、项目,通通都给你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值