Redis-数据结构及持久化操作(CentOS)

Redis安装

参考:

Linux

Redis启动关闭

前端方式启动:

直接运行服务脚本redis/bin/redis-server

该方式启动使用的是redis-server这个shell脚本中的默认配置,即官方默认配置

后端模式启动:

该启动方式可以使redis按指定配置文件启动

需要注意的是,redis默认安装完成后没有任何配置文件,需要在源码目录中复制redis.conf配置文件到安装目录

修改redis.conf配置文件

修改redis.conf配置文件, daemonize yes 开启守护线程
将daemonized设置为yes代表开启守护线程,这样启动redis将不会占用会话窗口

执行以下命令按配置文件启动redis

  • 跳转到redis安装目录: cd /usr/local/redis

  • 指定配置文件启动: ./bin/redis-server ./conf/redis.conf

redis默认使用6379端口

如需更改端口号,可在redis.conf文件中进行修改

关闭Redis:

因为Redis中的数据在内存中,在未完成持久化前,强行终止Redis进程可能会导致redis中的数据丢失。
正确停止Redis的方式应该是向Redis服务发送SHUTDOWN命令,方法为:

cd /usr/local/redis

./bin/redis-cli shutdown save

连接Redis客户端

redis是服务端,要操作服务端(存取数据)是通过客户端

在redis的安装目录中有redis的客户端,即redis-cli(Redis Command Line Interface),它是Redis自带的基于命令行的Redis客户端

./redis.cli -h [指定ip地址] -p [指定端口]

./redis.cli

测试响应:

Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG

Redis多实例多数据库

redis实例

一个redis进程就是一个redis实例,一台服务器可以同时有多个redis实例,不同的redis实例提供不同的服务端口对外提供服务,每个redis实例之间互相隔离。每个redis实例都包括自己的数据库,数据库中可以存储自己的数据

一个redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号数据库

可以通过select [0->16]选择连接哪个数据库

注意:redis不支持修改数据库的名称,只能通过select 0、select 1…选择数据库

原则上:

不同的应用系统要使用不同的redis实例而不是使用同一个redis实例下的不同数据库

同一实例下,与库相关的两组清空命令:

FlushDB -- 清空当前库下所有key
FlushAll -- 清空当前实例下所有库的key

与Key相关的N组命令

1.DEL指令

  • 语法 : DEL key [key ...]
  • 作用 : 删除给定的一个或多个key 。不存在的key 会被忽略。
  • 可用版本: >= 1.0.0
  • 返回值: 被删除key 的数量。

2.EXISTS指令

  • 语法: EXISTS key
  • 作用: 检查给定key 是否存在。
  • 可用版本: >= 1.0.0
  • 返回值: 若key 存在,返回1 ,否则返回0。

3.EXPIRE

  • 语法: EXPIRE key seconds (单位:秒)
  • 作用: 为给定key 设置生存时间,当key 过期时(生存时间为0 ),它会被自动删除。
  • 可用版本: >= 1.0.0
  • 时间复杂度: O(1)
  • 返回值:设置成功返回1 。

4.KEYS

  • 语法 : KEYS pattern(类正则表达式)
  • 作用 : 查找所有符合给定模式pattern 的key 。
  • 语法:
    KEYS * 匹配数据库中所有key 。
    KEYS h?llo 模糊一个字符,h匹配hello ,allo 和hxllo 等。
    KEYS h*llo 模糊0 ~ n个字符 匹配hllo 和heeeeello 等。
    KEYS h[ae]llo 限定[]内的字符 匹配hello 和hallo ,但不匹配hillo 。特殊符号用 “” 隔开
  • 可用版本: >= 1.0.0
  • 返回值: 符合给定模式的key 列表。

5.MOVE

  • 语法 : MOVE key db
  • 作用 : 将当前数据库的key 移动到给定的数据库db 当中。
  • 可用版本: >= 1.0.0
  • 返回值: 移动成功返回1 ,失败则返回0 。

6.PEXPIRE

  • 语法 : PEXPIRE key milliseconds
  • 作用 : 这个命令和EXPIRE 命令的作用类似,但是它以毫秒为单位设置key 的生存时间,而不像EXPIRE 命令那样,以秒为单位。
  • 可用版本: >= 2.6.0
  • 时间复杂度: O(1)
  • 返回值:设置成功,返回1 key 不存在或设置失败,返回0

8.TTL

  • 语法 : TTL key
  • 作用 : 以秒为单位,返回给定key 的剩余生存时间(TTL, time to live)。
  • 可用版本: >= 1.0.0
  • 返回值:
    当key 不存在时,返回-2 。
    当key 存在但没有设置剩余生存时间时,返回-1 。
    否则,以秒为单位,返回key 的剩余生存时间。
  • Note : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。

9.PTTL

  • 语法 : PTTL key
  • 作用 : 这个命令类似于TTL 命令,但它以毫秒为单位返回key 的剩余生存时间,而不是像TTL 命令那样,以秒为单位。
  • 可用版本: >= 2.6.0
  • 返回值: 当key 不存在时,返回-2 。当key 存在但没有设置剩余生存时间时,返回-1 。
  • 否则,以毫秒为单位,返回key 的剩余生存时间。
  • 注意 : 在Redis 2.8 以前,当key 不存在,或者key 没有设置剩余生存时间时,命令都返回-1 。

10.RANDOMKEY

  • 语法 : RANDOMKEY
  • 作用 : 从当前数据库中随机返回(不删除) 一个key 。
  • 可用版本: >= 1.0.0
  • 返回值:当数据库不为空时,返回一个key 。当数据库为空时,返回nil 。

11.RENAME

  • 语法 : RENAME key newkey
  • 作用 : 将key 改名为newkey 。当key 和newkey 相同,或者key 不存在时,返回一个错误。当newkey 已经存在时,RENAME 命令将覆盖旧值。
  • 可用版本: >= 1.0.0
  • 返回值: 改名成功时提示OK ,失败时候返回一个错误。

12.TYPE

  • 语法 : TYPE key
  • 作用 : 返回key 所储存的值的类型。
  • 可用版本: >= 1.0.0
  • 返回值:
    none (key 不存在)
    string (字符串)
    list (列表)
    set (集合)
    zset (有序集)
    hash (哈希表)

Jedis客户端连接Redis

  1. 修改redis.conf中的bind字段
  2. 将127.0.0.1修改为0.0.0.0 表示允许一切客户端访问
  3. 重启redis

在Win下,可以使用图形化界面的客户端连接我们的redis,如图

Redis不仅是使用命令与图形化界面来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。

在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis,下面我们就重点学习下Jedis。

Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis

导包

  • Maven Repositiry:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
    </dependency>

单例连接

package com;

import redis.clients.jedis.Jedis;

class Main{
   
    public static void main(String[] args) {
   

        Jedis jedis = new Jedis("192.168.31.128", 6379);

        jedis.set("name1", "bar");
        String name = jedis.get("name1");
        System.out.println(name);
        jedis.close();
    }
}

连接池连接

package com;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

class Main{
   
    public static void main(String[] args) {
   

        JedisPoolConfig config = new JedisPoolConfig();
        //最大连接数
        config.setMaxTotal(30);
        //最大连接空闲数
        config.setMaxIdle(2);

        JedisPool pool = new JedisPool(config, "192.168.31.128", 6379);
        Jedis jedis = null;

        try  {
   
            jedis = pool.getResource();

            jedis.set("name", "lisi");
            String name = jedis.get("name");
            System.out.println(name);
        }catch(Exception ex){
   
            ex.printStackTrace();
        }finally{
   
            if(jedis != null){
   
                //关闭连接
                jedis.close();
            }
        }
    }
}

Redis_String相关操作

常用操作命令:

(多是针对key的值进行处理)

命令 说明
set 设置一个key/value
get 根据key获得对应的value
mset 一次设置多个key value
mget 一次获得多个key的value
getset 获得原始key的值,同时设置新值
strlen 获得对应key存储value的长度
append 为对应key的value追加内容
getrange 索引0开始 截取value的内容
setex 设置一个key存活的有效期(秒)setex + 存活时间 + 值
psetex 设置一个key存活的有效期(毫秒)
setnx 存在则不做任何操作,不存在再添加
msetnx原子操作(只要有一个存在不做任何操作) 可以同时设置多个key,只有有一个存在都不保存
decr 进行数值类型的-1操作 如针对age的值 - 1
decrby 根据提供的数据进行减法操作 decrby age 10
Incr 进行数值类型的+1操作
incrby 根据提供的数据进行加法操作
Incrbyfloat 根据提供的数据加入浮点数

Jedis String 相关API

//测试String相关
    @Test
    public void testString(){
   
        //set
        jedis.set("name","小陈");
        //get
        String s = jedis.get("name");
        System.out.println(s);
        //mset
        jedis.mset("content","好人","address","海淀区");
        //mget
        List<String> mget = jedis.mget("name", "content", "address")</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值