redis

redis帮我们做的事情.

 

一. redis介绍.

1. redis的由来.

之前有一个创业公司的老板,维护一个统计网站信息的页面LLOOGG,这位老板对mysql的性能嗤之以鼻,自己研发了一套非关系型数据库,叫redis.
同年老板就将redis对外开源.
后台VMware对redis进行了支持.
创业老板就开始专心维护redis.

2. NOSql.

Not Only Sql -> 泛指一些非关系型数据库.
除了关系型数据库都是非关系型数据库.
关系型数据库:
    mysql,oracle,sqlserver,db2
    
非关系型数据库:
    key-value非关系型数据库:   redis,m...cache.
    文档存储非关系型数据库:  mongodb,es.
    图形化的非关系型数据库:  neo4j
    .....
​
​
    Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
    多路复用IO.
​
    高性能.
        读写速度极快.
    单线程.
        分布式锁.
    提供的多种存储结构.
        key-value,key-hash,key-list,key-set,key-sortedSet.
    .....

 

二. redis安装.

1. 下载redis的压缩包
    wget http://download.redis.io/releases/redis-5.0.6.tar.gz
​
2. 将redis解压到/usr/local
    tar -zxvf redis-5.0.6.tar.gz -C /usr/local
    
3. 跳转到redis的解压目录,编译并安装
    (yum -y install gcc-c++)
    make && make install PREFIX=/usr/local/redis
    
4. 启动redis服务.
    ./redis-server
    启动redis服务后,占满整个界面保证redis进程的运行.
    
5. 启动redis客户端.
    ./redis-cli [-h localhost] [-p 6379]
    
    redis默认不允许远程链接.

 

三. 在windows连接redis.

1. 图形化界面.

1. 关闭防火墙 | 释放6379端口号.
    systemctl stop firewalld
    
2. 复制redis的配置文件.
    cp /usr/local/redis-5.0.6/redis.conf /usr/local/redis/bin/
    
    启动方式:
        ./redis-server redis.conf
        
3. 后台启动redis.
    修改redis.conf中的
    daemonize -> 从no改为yes
    
4. 修改redis默认bind的127.0.0.1
    bind 127.0.0.1 将其注释.
​
5. 关闭redis的保护机制.
    protected-mode yes -> 改为 no
    
6. 修改完配置,关闭,并重启redis.
    (正常关闭/非正常关闭和redis的持久化有关联.)
    1. 非正常关闭:关闭服务1: 直接搜索进行的pid,kill杀死.
    2. 非正常关闭:重启虚拟机/电脑.
    3. 正常关闭:连接redis的客户端,执行shutdown
        ./redis-cli -> 连接成功后 -> shutdown
        ./redis-cli shutdown

2. 在java中链接.

在java中连接redis,需要使用redis官方提供的API -> jedis.

1. 直接连接.

1. 创建项目.
2. 导入依赖.
3. 测试.
    //1. 创建Jedis连接对象.
    
    //2. 操作.
    
    //3. 释放资源.
频繁的创建和销毁连接对象,比较消耗性能,不推荐.

 

2. 使用连接池.

1. 创建项目.
2. 导入依赖.
3. 测试.
    //1. 创建JedisPool的连接池对象.
    
    //2. 从池子中获取一个连接对象.
    
    //3. 操作.
    
    //4. 返回连接对象(放在finally中)

 

3. 在java存储byte[]类型数据.

java的API,jedis只允许存储String或者是byte[]类型.
存储一些自定义类型的数据时,只能采用byte[]的方式,如果自定义类型需要转为byte[],当前自定义类型必须实现了序列化接口.Serializable.
​
1. 如果用到自定义类型,一定要实现Serializable接口.
​
2. 用哪个工具序列化的,就用哪个工具反序列化.
​
​
3. 存byte数据.
    获取jedis -> 从池子.
    
    将key和value使用SerializationUtils.serialize方法序列化.
    
    调用jedis存储数据.
    
    释放资源.
    
4. 取byte[]数据
    获取jedis -> 从池子.
    
    将key序列化为byte[].
    
    通过key获取对应的byte[]类型的value.
    
    将value反序列化为Object对象.
    
    释放资源.
​

四. redis的基本操作.(晨考)

redis的命令中文文档: http://doc.redisfans.com/
​
key: 
    1. del. -> 删除指定的key
        del key...
​
    2. expire. -> 指定key的生存时间.
        expire key seconds
​
    3. expireat. -> 指定key能生存到具体的时间戳.
        expireat key timestamp
​
    4. keys. -> 查询当前redis中的全部key.
        keys pattern.
        (* ? [具体字符])
​
    5. pexpire. -> 设置key的生存时间.单位为毫秒.
        pexpire key milliseconds
​
    6. ttl -> 获取指定key剩余生存时间,时间单位为秒.
        ttl key
        (-2: 当前key不存在.   -1: 当前key没有生存时间.   >=0 : 具体的剩余生存时间.)
​
string:
    1. incr -> 给key的value自增1.
        incr key
        (如果value是非数值,会报错.)
        
    2. decr -> 给key的value自减1.
        decr key
        
    3. incrby -> 给key的value指定自增具体的数字.
        incrby key increment
        
    4. set -> 设值.
        set key value
        
    5. get -> 取值.
        get key
        
    6. setnx -> 设值,  set if not exists, 如果key存在,什么事都不做,如果key不存在,和set一模一样.
        setnx key value
        
    7. getset -> 先取值,再设值.
        getset key value

在jedis中,redis的命令是什么,jedis的方法就是什么?

 

五. redis的5种存储数据的结构.(晨考)

 

 

六. 5中数据结构的基本操作.

1. string.

................见四.

2. hash.

1. hdel -> 删除某个field对应的值.
    hdel key field
2. hset -> 设值.
    hset key field value
3. hget -> 取值
    hget key field

 

3. list.

1. lpush | rpush -> 添加值.    从左侧推送值 | 从右侧推送值
    lpush | rpush key value...
    
2. lrange -> 获取一定范围内的值.
    lrange key start stop.
    (如果查询全部start -> 0 stop -> -1)
    
3. lpop | rpop -> 从左侧弹出一个值 | 从右侧弹出一个值
    lpop | rpop key.
    
4. lset -> 修改制定索引的值.
    lset key index value

 

4. set.

1. sadd -> 设值.
    sadd key member...
2. smembers   -> 取值.
    smembers key    

 

5. sortedSet|zset

1. zadd -> 设值
    zadd key score member ..
2. zrange -> 取值
    zrange key start stop

 

6. jedis的方法和命令一致.

 

七. spring整合redis.

1. redis整合spring操作.

1. 导入依赖.
    ...
2. 编写配置文件.
    <context:property-placeholder location="classpath:db.properties" />
​
    <bean id="pool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="host" value="${redis.host}" />
        <constructor-arg name="port" value="${redis.port}" />
    </bean>
3. 编写redis的工具类.
    @Component
public class RedisUtil {
​
    @Autowired
    private JedisPool pool;
​
    public void set(String key,String value){
        Jedis jedis = pool.getResource();
        try {
            jedis.set(key,value);
        } finally {
            jedis.close();
        }
    }
}
4. 直接使用.
    直@Autowired注入.

2. redis整合springboot

1. 方式1: (熟悉springboot-data-redis的API)
    使用springboot的data系列,直接自动整合redis.
    1. 导入依赖.
        spring-boot-starter-data-redis
    2. 编写配置文件.
        指定redis.host
           redis.port
    3. 直接@Autowired使用.
        注入RedisTemplate<?,?>
        
2. 方式2: (手动配置关于redis的信息.)
    单独导入jedis依赖,手动配置.
    1. 导入依赖.
        jedis
    2. 在yml中配置redis的信息.
        redis.host
        redis.port
    3. 在配置类中,引入redis配置信息,并创建JedisPool实例.
        ...
        @Bean
        public JedisPool pool(){
            
        }
    4. 直接编写工具类.
        RedisUtil封装各种set/get...
        
    5. 直接@Autowired
        @RedisUtil

 

八. 修改APP项目.

1. 准备redis的环境和工具类.

 

2. shiro的自定义Session.

1. 自定义SessionDAO.

重写各种方法.

 

2. 自定义SessionManager.

重写retrieve方法.

 

3. 看看视频吧....

3. 将下载量的json数据保存到redis做缓存.

下载量每隔10分钟刷新一次.
..
保存到redis中的下载量信息是json字符串,不是byte[].
..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值