Redis
1、 安装Redis
1.1 安装Redis依赖
Redis基于C语言编写,首先需要安装Redis多需要的gcc依赖
yum install -y gcc tcl
# 如果 输入gcc -v版本过低后面会出现错误
# 1、安装gcc套装:依次执行以下命令
yum install cpp
yum install binutils
yum install glibc
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make
# 2、升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
# 3、执行完上述命令后再次make即可。1.2 上传安装包并解压
下载安装包后放入 /usr/local/src中
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
make && make install1.3 启动
redis的启动方式有很多种,例如:
- 默认启动
- 指定配置启动
- 开机自启
1.3.1 默认启动
任意目录下运行一下目录即可运行
redis-server1.3.2 指定配置运行
我们先把目录中的redis.conf备份一份:
cp redis.conf redis.conf.bak然后修改redis.conf文件中的一些配置:
# 监听的地址,默认是127.0.0.1,会导致只能本地访问,修改为0.0.0.0则可以在任何IP访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 摩玛设置后访问Redis必须设置密码
requirepass 1727Redis的其他常见配置
# 监听的端口
port 6379
# 工作目录,默认是当前目录,也就是运行redis-server是的命令,日志、持久化等文件会保存在这个文件
dir .
# 数据库数量,设置为1,表示只使用1个库,默认有16个库,编号0-15
databases 1
# 设置redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile “redis.log”启动Redis:
# 进入redis安装目录
cd /usr/local/src/redis-6.2.6
# 启动,配置文件选定为我们刚才修改的配置文件
redis-server redis.conf停止服务:
redis-cli -u 1727 shutdown1.3.3 开机自启
我们也可以通过配置来实现开机自启
首先,新建一个系统服务文件
vim /etc/systemd/system/redis.service内容如下:
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.0.16/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target然后重新加载系统服务:
systemctl daemon-reload现在,我们可以用下面这组命令来操作redis了:
# 启动
systemctl start redis
# 关闭
systemctl stop redis
# 重启
systemctl restart redis
# 状态
systemctl status redis
# 开机自启
systemctl enable redis2、 Redis客户端
安装完成Redis,我们可以操作Redis,实现数据的CRUD了。这需要使用Redis的客户端,包括:
- 命令行客户端
- 图形化桌面客户端
- 编程客户端
2.1 Redis命令行客户端
redis-cli [options] [commonds]其中常见的option有:
- -h 127.0.0.1:指定要连接的redis结点的ip地址,默认是127.0.0.1
- -p 6369:指定要连接的redis结点的端口,默认是6379
- -a 17278:指定redis的访问密码
2.2 图形化桌面客户端
GitHub上有大神编写了Redis的图形化桌面客户端,地址:https:///uglide/RedisDesktopManager
不过该仓库提供的是RedisDesktopManager的源码,并未提供windows安装包。
在下面这个仓库可以找到安装包:https:///lework/RedisDesktopManager-Windows/releases
3、 Redis常见命令
3.1 数据类型介绍
| 类型 | 例子 | 
| String | hello world | 
| Hash | {name: “jack”,age: 12} | 
| List | [A->B->C->D->E->F->G] | 
| Set | {A, B, C} | 
| SortedSet | {A: 1,B: 2,C: 3} | 
| GEO | {A: (120.3,30.5) } | 
| BitMap | 0110110101110101011 | 
| HyperLog | 0110110101110101011 | 
3.1.1 String
根据字符串的格式不同,又可分为3类:
- string:普通字符串
- int:整数类型,可以做自增、自减操作
- float:浮点类型,可以做自增、自减操作
String常见命令:
SET [key] [value] # 添加或修改一个String类型的键值对
GET [key]
MSET [key] [value] [key1] [value1]...
MGET [key] [key1]...
INCR [key] # 让一个key的值增加1
INCRBY [key] 4 # 让一个key的值增加指定数
INCRBYFLOAT [key] 3.14
SETNX [key] [value] # 不存在这个key才执行,不然不执行
SETEX [key] [seconds] [value] # 添加一个key并且设置有效期3.1.2 Hash
| KEY | VALUE | |
| field | value | |
| liucheng:user:1 | name | Jack | 
| age | 21 | |
Hash常见命令
HSET [key] [field] [value]
HGET [key] [field]
HMSET [key] [field] [value] [field] [vlaue]...
HMGET [key] [field] [field]...
HGETALL [key]
HKEYS [key]
HVALS [key]
HINCRBY [key] [field] 4
HSETNX [key] [field] [value]3.1.3 List
特征和LinkedList类似的双向链表:
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
List常见命令:
LPUSH [key] [element] [element]...
LPOP [key]	# 取链表左边的值并弹出
RPUSH [key] [element] [element]...
RPOP [key]
LRANGE [key] start end # 取链表start到end的值,不弹出
BLPOP && BRPOP [key] [time] # 阻塞式获取3.1.4 Set
与HashSet类似的特征:
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
Set常见命令:
SADD [key] [member]...
SREM [key] [member]...
SCARD [key] # 获得set中元素的个数
SISMEMBER [key] [member] # 判断一个元素是否存在于set中
SMEMBERS # 获得set中所有的元素
SINTER [key1] [key2] # 获得两个集合的交集 key1∩key2
SDIFF [key1] [key2] # 获得两个集合的差集 key1-key2
SUNION [key1] [key2] # 获得两个集合的并集 key1∪key23.1.5 SortedSet
与TreeSet有些类似,但底层结构差别很大
- 可排序
- 元素不重复
- 查询速度快
SortedSet常见命令:
# 这里的score是排序的依据
ZADD [key] [score] [member] # 存储数据
ZREM [key] [member]	
ZSCORE [key] [member]	# 获得其中指定元素的score
ZRANK [key] member	# 获取其中指定元素的排名,从0开始
ZCARD [key]	 # 获得sorted set的元素个数
ZCOUNT [key] min max	# 统计score在其中范围的元素的个数
ZINCRBY [key] increment member	# 给指定元素的score增加increment
ZRANGE [key] min max	# 获得score的排名在其中范围内的元素,从0开始
ZRANGEBYSCORE [key] min max 	# 获得score在其中范围中的元素
ZDIFF、ZINTER、ZUNION [key1] [key2] # 同Set
# 所有的默认升序,要降序就所有的命令的Z后面加上REV(reverse)即可。ps:ZREVADD3.2 其他常用命令
# KEYS:查看符合模板的所有key
KEYS *
# DEL:删除一个指定的key
DEL k1
# EXISTS:判断key是否存在
EXISTS k1
# EXPIRE:给一个key设置有效期(秒数),有效期到时key会被自动删除
EXPIRE k1 20
# TTL k1:查看一个key的有效期,-1为永久,-2为过期或者没有,正数为秒数
TTL k14、 Redis的java客户端
4.1 Jedis
- 引入依赖
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.2.0</version>
</dependency>- 配置连接池
public class JedisConnectionFactory {
    private static JedisPool jedisPool = null;
    static{
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        // 最大连接
        jedisPoolConfig.setMaxTotal(8);
        // 最大空闲连接
        jedisPoolConfig.setMaxIdle(8);
        // 最小空闲连接
        jedisPoolConfig.setMinIdle(0);
        // 设置最长等待时间
        jedisPoolConfig.setMaxWait(Duration.ofMillis(200));
        jedisPool=new JedisPool(jedisPoolConfig,"192.168.168.130",6379,
                1000,"1727894442");
    }
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}4.2 SpringDataRedis
SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单.其中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同类型中:
| API | 返回值类型 | 说明 | 
| redisTemplate.opsForValue() | ValueOperations | 操作String类型数据 | 
| redisTemplate.opsForHash() | HashOperations | 操作Hash类型数据 | 
| redisTemplate.opsForList() | ListOperations | 操作List类型数据 | 
| redisTemplate.opsForSet() | SetOperations | 操作Set类型数据 | 
| redisTemplate.opsForZSet() | ZSetOperations | 操作SortedSet类型数据 | 
| redisTemplate | 通用的命令 | 
- 引入依赖
<!--Redis依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--连接池依赖-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>
</dependency>- 配置文件
spring:
  redis:
    host: 192.168.168.130
    port: 6379
    password: 1727894442
    database: 0
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 2004.2.1 解决序列化问题
4.2.1.1 自定义RedisTemplate序列化器
- 引入依赖
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>- 设置配置类
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        //创建一个RedisTemplate对象
        RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
        //设置连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //创建JSON序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer=new GenericJackson2JsonRedisSerializer();
        //设置key的序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        //设置value的序列化
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        
        return redisTemplate;
    }
}4.2.1.2 使用自带的序列化类
StringRedisTemplate类,key和value都是用的是String类
@SpringBootTest
public class RedisTest {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Test
    void testString(){
        redisTemplate.opsForValue().set("name","刘成");
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }
}                
 
 
                     
            
        













 
                    

 
                 
                    