Redis基础

Redis基础

1、Redis入门

1.1、Redis简介

Redis is an open source (BSD licensed), in-memory **data structure store** used as a database, cache, message broker,翻译为:Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。

官网:https://redis.io

Redis时勇C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以道道 100000+ 的QPS(每秒查询次数)。他存储的value类型比较丰富,也被称为结构化的NoSql数据库。

NoSql(Not Only SQL),不仅仅时SQL,泛指 非关系下数据库 。NoSql数据库被捕时要取代关系型数据库,二十关系型数据库的补充。

Redis特点:

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品、咨询、新闻)
  • 存储短时间内可能有大量访问的数据
  • 企业应用广泛

数据库分类:

  • 关系型数据库(RDBMS)
    • MySQL
    • Oracle
    • DB2
    • SQLServer
  • 非关系型数据库(NoSQL)
    • Redis
    • MongogDB
    • MemCached

Redis应用场景:

  • 缓存
  • 任务队列
  • 消息队列
  • 分布式锁

1.2、Redis下载安装

Redis安装包下载

  • Windows版下载地址:https://github.com/microsoftarchive/redis/releases
  • Linux版下载地址:https://github.com/redis/redis/archive/7.0.0.tar.gz

在Linux系统安装 Redis 步骤:

  1. 将Redis安装包上传到Linux

  2. 解压安装包,命令:

    tar -zxvf redis-4.0.0.tar.gz -C /usr/local
    
  3. 安装 Redis 的依赖环境 gcc,命令:

    yum install gcc-c++
    
  4. 进入 /usr/local/redis-4.0.0 ,进行编译,命令:

    make
    
  5. 进入 Redis 的 src 目录,进行安装,命令:

    make install
    

在Windows系统安装 Redis :

Redis的Windows版属于绿色软件(免安装),直接解压即可使用,解压后目录如下:

image-20220519170420371

1.3、Redis服务启动停止

Linux中的 Redis 服务启动,可以使用 redis-server ,默认端口号为 6379

Ctrl + C 可以停止 Redis 服务

redis.conf 文件配置:

daemonize yes				# 是否后台运行
requirepass password		# Redis连接密码
bind 127.0.0.1 -::1			# 注释掉才可以远程连接
database 0					# 提供的数据库数量

连接 Redis 服务:

redis-cli -h localhost -p 6379 -a password			# localhost 可以为IP地址 password 为密码

image-20220519182348802

Windows系统中启动 Redis ,自己双击 redis-server.exe 即可启动 Redis 服务,Redis 服务默认端口号为 6379

Ctrl + C 可以停止 Redis 服务

连接 Redis 服务:

redis-cli -h localhost -p 6379 -a password			# localhost 可以为IP地址 password 为密码

image-20220519190810113

2、数据类型

Redis 存储的是 Key-Value 结构的数据,其中Key是字符串类型,Value有5种常用的数据类型:

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set

image-20220519194623969

2.1、字符串 string

Redis 中字符串类型常用命令:

命令说明
SET key value设置指定 key 的值
GET key获取指定 key 的值
SETEX key seconds value设置指定 key 的值,并将 key 的过期时间设为 seconds 秒
SETNX key value只有再 key 不存在时设置 key 的值

2.2、哈希 hash

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,常用命令:

命令说明
HSET key field value将哈希表key中的字段 field 的值设为 value
HGET key field获取存储在哈希表中指定字段的值
HDEL key field删除存储在哈希表中指定字段
HKEYS key获取哈希表中所有字段
HVALS key获取哈希表中所有值
HGETALL key获取在哈希表中指定key的所有字段和值

2.3、列表 list

Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:

命令说明
LPUSH key value1 [value2]将一个或多个值插入到列表头部
LRANGE key start stop获取列表指定范围内的元素
RPOP key移除并获取列表指定范围内的元素
LLEN key获取列表长度
BRPOP key [key2] timeout移出并获取列表的最后一个元素,如果列表没有元素会注射列表知道等待超时或发现可弹出元素位置

2.4、集合 set

Redis set 是 string 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:

命令说明
ADD key member1 [member2]向集合添加一个或多个成员
SMEMBERS key返回集合中的所有成员
SCARD key获取集合的成员数
SINTER key1 [key2]返回给定所有集合的交集
SUNION key1 [key2]返回所有给定集合的并集
SDIFF key1 [key2]返回给定所有集合的差集
SREM key member1 [member2]移除集合中一个或多个成员

2.5、有序列表 sorted set

Redis sorted set 有序集合是 string类型元素的集合,且不允许重复的成员。每个元素都会关联一个 double 类型的番薯(score)。redis 真是通过分数来为集合中的成员进行从小大大排序。有序集合的成员是唯一的,但分数却可以重复。

命令说明
ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZRANGE key start stop [WITHSCORES]通过索引区间返回有序集合中指定区间内的成员
ZINCRBY key increment member有序集合中对指定成员的分数加上增量 increment
ZREM key member [member ...]移除有序集合中的一个或多个成员

2.6、常用命令

命令说明
KEYS pattern查找所有符合给定模式(pattern)的 key
EXISTS key检查给定 key 是否存在
TYPE key返回 key 说储存的值的类型
TTL key返回给定 key 的剩余生存时间(TTL,time to live),以秒为单位
DEL key该命令用于在 key 存在时删除 key

3、在Java中操作Redis

3.1、介绍

Redis 的 Java 客户端很多,官方推荐的有三种:

  • Jedis
  • Lettuce
  • Redisson

Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在 SpringBoot 项目中还提供了对应的 Starter,即spring-boot-starter-data-redis

3.2、Jedis

Jedis的Maven坐标:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.2.3</version>
</dependency>

使用 Jedis 的步骤:

  • 获取连接
  • 执行操作
  • 关闭连接
// 获取所有key
@Test
public void getKeys() {
    // 1.获取连接
    Jedis jedis = new Jedis("localhost", 6379);

    // 2.执行具体操作
    Set<String> result = jedis.keys("*");
    for (String s : result) {
        System.out.println(s);
    }

    // 3.关闭连接
    jedis.close();
}

3.3、Spring Data Redis

在 SpringBoot 项目中,可以使用 Spring Data Redis 来简化 Redis 操作,maven 坐标:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Spring Data Redis 中提供了一个高度封装的类:RedisTemplate,针对 Jedis 客户端中大量 API 进行了归类封装,将同一类型操作封装为 operation 接口,具体分类如下:

  • ValueOperations :简单的 K-V 操作
  • SetOperations :set 类型数据操作
  • ZSetOperations :zset 类型的数据操作
  • HashOperations :针对 map 类型的数据操作
  • ListOperations :针对 list 类型的数据操作
chmod 755 redis-install.sh && sh redis-install.sh 4.0.10	
#! /usr/bin/bash
##redis任何版本全程自动化源码编译安装
##用法:sh redis-install.sh 4.0.10 (后面跟的是你需要的版本号,需要什么版本就写什么版本),我这里安装的4.0.10
version=$1
usage(){
echo "usage: $0 version"
}

if [ $# -ne 1 ]
then
usage
exit -1
fi

#Redis安装包下载
cd /usr/local/src
if [ ! -f redis-${version}.tar.gz ]
then
curl -o /usr/local/src/redis-${version}.tar.gz http://download.redis.io/releases/redis-${version}.tar.gz
fi

#Redis依赖包安装
yum clean all
yum makecache fast
yum -y install gcc gcc-c++ tcl

#编译Redis所需要的gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
source /opt/rh/devtoolset-9/enable
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
gcc --version

##内系统参数核优化
cat >> /etc/rc.d/rc.local << "EOF"

##关闭Linux的THP(内存管理系统)通过使用更大的内存页面,来减少具有大量内存的计算机上的TLB的开销
if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]
then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

if [ -f /sys/kernel/mm/transparent_hugepage/defrag ]
then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod u+x /etc/rc.d/rc.local

if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]
then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

if [ -f /sys/kernel/mm/transparent_hugepage/defrag ]
then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

cat >> /etc/sysctl.conf << "EOF"

#Linux系统内核参数优化
net.core.somaxconn = 2048
net.ipv4.tcp_max_syn_backlog = 2048
vm.overcommit_memory = 1
EOF
sysctl -p

cat > /etc/security/limits.conf << "EOF"
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
EOF

#Redis编译安装
cd /usr/local/src
tar -zxvf redis-${version}.tar.gz
cd /usr/local/src/redis-${version}
make
make PREFIX=/usr/local/redis install

#Redis基础配置
mkdir -p /usr/local/redis/{etc,logs,data}
egrep -v "^$|^#" /usr/local/src/redis-${version}/redis.conf > /usr/local/redis/etc/redis.conf
#sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /usr/local/redis/etc/redis.conf
sed -i "s/protected-mode yes/protected-mode no/g" /usr/local/redis/etc/redis.conf
sed -i "s/daemonize no/daemonize yes/g" /usr/local/redis/etc/redis.conf
sed -i "s/pidfile \/var\/run\/redis_6379.pid/pidfile \/usr\/local\/redis\/redis.pid/g" /usr/local/redis/etc/redis.conf
sed -i "s/dir \.\//dir \/usr\/local\/redis\/data/g" /usr/local/redis/etc/redis.conf
sed -i "s/logfile \"\"/logfile \"\/usr\/local\/redis\/logs\/redis.log\"/g" /usr/local/redis/etc/redis.conf
sed -i "s/dbfilename dump.rdb/dbfilename dump.rdb/g" /usr/local/redis/etc/redis.conf
sed -i "s/appendfilename \"appendonly.aof\"/appendfilename \"appendonly.aof\"/g" /usr/local/redis/etc/redis.conf

#PATH配置
echo "export PATH=${PATH}:/usr/local/redis/bin" >>/etc/profile
source /etc/profile
#启动redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
#查看redis监听端口
netstat -tanp|grep redis

i “s/dbfilename dump.rdb/dbfilename dump.rdb/g” /usr/local/redis/etc/redis.conf
sed -i “s/appendfilename “appendonly.aof”/appendfilename “appendonly.aof”/g” /usr/local/redis/etc/redis.conf

#PATH配置
echo “export PATH=${PATH}:/usr/local/redis/bin” >>/etc/profile
source /etc/profile
#启动redis服务
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
#查看redis监听端口
netstat -tanp|grep redis




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值