redis入门教程

redis

启动redis:

cd /usr/local/bin

在这里插入图片描述

redis-server /etc/redis.conf

检查是否启动:

redis-cli

在这里插入图片描述

启动mysql命令

service mysql start

下载redis:

下载: wget http://download.redis.io/releases/redis-5.0.5.tar.gz

解压:tar -zxvf redis-5.0.5.tar.gz -C /opt/install

1、安装redis

1.1、安装gcc
yum install gcc 
1.2、编译并安装
cd redis-5.0.5
make MALLOC=libc 
1.3、安装
将redis-5.0.5/src目录下的二进制文件安装到指定的目录中
cd src
make install PREFIX=/usr/local/redis 
1.4、配置环境变量
vi /etc/profile
export REDIS_HOME=/usr/local/redis
  export PATH=$PATH:$REDIS_HOME/bin
 
 
 刷新配置文件
 source /etc/profile 
1.5、修改配置文件
默认的配置文件是/opt/install/redis-5.0.5/redis.conf 
1 设置后台启动 将 daemonize no 改成 daemonize yes 
2 下面一行必须改成 bind 0.0.0.0 或注释,否则只能在本机访问 bind 127.0.0.1 
3 把protected yes 该为:protected no 
4 并拷贝到/usr/local/redis/bin目录中一份 
1.6、配置后台启动
将redis.conf配置文件中的daemonize属性修改为yes:(默认为 daemonize no)
daemonize yes 

2、Redis启动

2.2、启动客户端

> 指定配置文件启动Redis

> redis-server /usr/local/redis/bin/redis.conf

> 提示:redis启动之后可以通过ps -ef | grep redis查看服务是否启动

> 如果没有netstat命令:需要通过yum install net-tools 安装网络工具包,然后使用该命令就有了

启动客户端:redis-cli -h IP地址 -p 端口号

启动客户端: redis-cli -h IP地址 -p 端口号

提示:1.不指定 -h -p的情况下,默认连接客户端所在机子的redis服务器

2.参数作用:

-h:

指定访问的redis服务器的ip地址

-p:

指定访问的redis服务器的port端口

-a:

指定登录密码

--raw:

解决中文乱码问题

3.redis默认使用的端口号为: 6379

关闭客户端:

quit|exit:都是退出客户端

shutdown: 在客户端关闭服务器端.

2、数据类型

在这里插入图片描述

官方给出的性能:

50个并发环境下

GET: 110000/s:读的速度每秒11万次

SET: 81000/s: 写的速度每秒8万次

2.1、key的操作

Redis 在实际使用过程中更多的用作缓存,然而缓存的数据一般都是要设置生存时间的,即到期后数据销毁。

EXPIRE key seconds        //设置key的生存时间(单位:秒)key在多少秒之后会自动删除
TTL key                   //查看key剩余的生存时间
                            //返回正数为key剩余生存时间
                            //返回-1,表示永久不过期
                            //返回-2,表示不存在的key
PERSIST key               //清除生存时间
PEXPIRE key milliseconds  //生存时间设置单位:毫秒 
  

其他key的操作

keys *   查看当前库所有key
exists key 判断某个key是否存在
type key  查看你的key是什么类型
del key  删除指定的key数据 

库的切换与操作

select 命令切换数据库
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 清空所有库
move somekey 1 将某个key的值移到1号库,库下标从0开始 

2.2、String

set key value  赋值
get key        取值 

设置/获取多个键值
mset k1 v1 k2 v2 k3 v3   同时赋多个键值
mget k1 k2 k3            同时获取多个值 

取值并赋值
getset key value 

删除
del key 

数值增减
incr key   让当前键值递增 (如果value的值不能转换为整形,该操作会执行失败,并返回相应错误信息)
incrby key incrment  给某个key对应的值增加指定的幅度,其中incrment为增量
 
decr key   使该key对应的值减一
decrby key decrement  使该key对应的值减指定的值,其中decrement为减量

拼凑字符串
append key value   如果该key存在,则在原有的value后追加该value,字符串拼接,如果该key不存在,
则重新创建一个key/value


3、Hash类型

赋值操作
hset key  filed1 value1 一个key对应多个filed/value

同时赋值多个字段
hmset key  filed1 value1 filed2 value2   一次可以设置多个字段

hsetnx key field value  当字段不存在时才能赋值,否则不执行任何操作

取值
hget key field  一次只能获取一个字段值

hmget key field1 field2  一次能获取多个字段值

hgetall key   获取所有字段和值 

hkeys key  获取所有字段

hvals key  获取所有value

删除
hdel key field1 field2   删除一个或多个字段,返回值是被删除字段的个数 

增加数字
hincrby key field increment   给某个key的某个field对应的值增加指定的数值
hash类型没有减的语法,但是可以通过将增量设置为负数来进行减操作 

判断指定key中的filed是否存在,存在返回1,否则返回0
hexists key field 

获取key所包含的field的数量
hlen key  

4、List类型

List类似java中的列表类型,里面的数据:有序,可重复,而且list是双向链表

向列表两端增加元素

lpush key value [value...]    向列表左边(头部)增加元素

rpush key value [value...]    向列表右边(尾部)增加元素

查看列表
lrange key start stop     获取列表中的某一个片段,将返回start,stop 之间的所有元素(包含两端的元素)
 索引从0开始,索引可以是负数,如:“-1“ 代表最后边的一个元素,”-2”代表倒数第二个
 
从列表两端淡出元素
lpop key   将列表元素从左边弹出一个元素
rpop key   将列表元素从右边弹出一个元素

获取列表中的元素个数
llen key 
 

5、Set类型

在这里插入图片描述

set集合中不允许出现重复的元素

添加/删除元素
sadd key member [member ...]  向指定的集合中添加数据

srem key member [member ...]  删除集合set中的元素
 
获取集合中的所有元素
smembers key  

判断元素是否在集合中
sismember key member   存在返回1,否则返回0  

集合差集运算
sdiff key1 key2    返回key1与key2不同的元素

集合求交集运算
sinter key1 key2   返回key1与key2相同的元素

集合求并集运算
sunion key1 key2   返回key1与key2所有的元素,但是重复的不显示

获取set成员数量
scard key 

随机返回set中的一个成员
srandmember key
 

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6、Zset类型

zset和set的区别在于zset中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序,成员是唯一的,但是分数可以重复

增加元素
zadd key score member [score member ...]

获取元素的数值
zscore key member 

删除元素
zrem key member [member ...] 

获取集合中元素的个数
zset key 

按顺序排列获取元素列表
 zrange key start stop [withscores]
  
按照元素数值从大到小的顺序返回索引从start到stop之间的所有元素
zrevrange key start stop [withscores] 

获取集合中分数数值在一定范围之间的元素
zrangebyscore key  start stop 

给集合中的某个元素增加分值
zincrby key 分值 value  为value值增加分值,例如:zincrby zset 19 tfxing
 

3、springboot整合redis

3.1、pom依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.tfxing</groupId>
  <artifactId>springboot_redis</artifactId>
  <version>1.0-SNAPSHOT</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
  </parent>

  <dependencies>
    <!-- 配置使用redis启动器 -->
     <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency> 
      
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>


3.2、yaml配置

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8
    driver: com.mysql.jdbc.Driver
  redis:
    port: 6379
    host: 192.168.43.128
mybatis:
  type-aliases-package: com.tfxing.mapper
  mapper-locations: classpath:com/tfxing/mapper/*.xml
server:
  port: 18081

3.3、编写主启动类

package com.tfxing;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}


3.4、编写配置类


import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.lang.reflect.Method;
import java.time.Duration;

@EnableCaching
@Configuration
public class RedisConfig {

    @Bean
    public KeyGenerator wiselyKeyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : params) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        //序列号key value
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        // 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();

        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }
}


3.5、使用redis实现效果

package com.tfxing.service.impl;

import com.tfxing.bean.User;
import com.tfxing.mapper.UserMapper;
import com.tfxing.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    public List<User> list() {
        String allKey = "allUser";
        List<User> lists = (List<User>) redisTemplate.boundValueOps(allKey).get();
        if(lists != null){
            System.out.println("inner redis success!!");
            return lists;
        }
        lists = userMapper.list();
        redisTemplate.boundValueOps(allKey).set(lists);
        return lists;
    }
}


缓存穿透/缓存击穿/缓存雪崩

缓存击穿:是指某一个热点数据由于某些原因失效,导致mysql数据库在短时间内请求爆发

缓存穿透:通过请求一个redis中不存在的key,从而使请求到达mysql

缓存雪崩:缓存中的大量key因为某种原因失效,(大量key的过期时间一致,大量key同时失效)导致无法提供服务,服务器崩溃

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
redis安装 1: 下载redis-5.0.4.tar.gz 2: 解压源码并进入目录 tar zxvf redis-5.0.4.tar.gz cd redis-5.0.4 3: 不用configure 4: 直接make (如果是32位机器 make 32bit) 查看linux机器是32位还是64位的方法:file /bin/ls 注:易碰到的问题,时间错误. 原因: 源码是官方configure过的,但官方configure时,生成的文件有时间戳信息, Make只能发生在configure之后, 如果你的虚拟机的时间不对,比如说是2012年 解决: date -s ' yyyy-mm-dd hh:mm:ss ' 重写时间 再 clock -w 写入cmos 5: 可选步骤: make test 测试编译情况 (可能出现: need tcl >8.4这种情况, yum -y install tcl ) 6: 安装到指定的目录,比如 /usr/local/redis make PREFIX=/usr/local/redis install 注: PREFIX要大写 7: 复制配置文件 cp redis.conf /usr/local/redis 注path为解压后的安装包路径 /root/gsj/redis-3.0.6 8: 让redis以后台进程的形式运行 vim /usr/local/redis/redis.conf 编辑redis.conf配置文件,修改如下内容; daemonize yes 9: make install之后,cd /usr/local/redis/bin得到如下几个文件 redis-benchmark 性能测试工具 redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复) redis-check-dump 快照文件检测工具,效果类上 redis-cli 客户端 redis-server 服务端 10: 启动与连接 启动redis并指定配置文件 cd /usr/local/redis ./bin/redis-server ./redis.conf #设置随机启动 vim /etc/rc.local 最后添加: /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf 连接: 用redis-cli cd /usr/local/redis/bin/ ./redis-cli #进入 exit /quit #退出 关闭redis pkill redis-server #关闭 ./redis-cli shutdown #关闭 查看是否启动成功 ps -ef | grep redis #查看端口是否占用 netstat -tunpl | grep 6379 11: 测试 String(字符串)类型: set name lijie #设置键name的值为lijie get name #获取name的值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值