W
e
l
c
o
m
e
: )

Redis快速入门

Redis介绍

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

Linux>Redis安装

# 进入/usr/local/目录 创建 redis目录
$ cd /usr/local/
$ mkdir redis
$ cd redis/
# 下载Redis压缩包 https://redis.io/download/#redis-downloads
$ wget https://download.redis.io/releases/redis-5.0.14.tar.gz
# 解压Redis & 进入Redis目录
$ tar zxf redis-5.0.14.tar.gz
$ cd redis-5.0.14
# 编译Redis
$ make

Windows>Redis安装

下载安装包并解压,运行redis-server redis.windows.conf

Redis守护进程

配置项 示例 说明
daemonize daemonize yes 是否启用后台运行默认no
port port 6379 设置端口号默认6379
logfile logfile日志文件 设置日志文件
databases databases 255 设置redis数据库总量
dir dir数据文件目录 设置数据文件存储目录
requirepass requirepass 12345 设置使用密码
# 进入Redis配置文件
$ vim redis.fonf
# 跳转130行 修改daemonize no 为daemonize yes
$ daemonize yes
# 运行Redis
$ ./src/redis-server redis.conf
# 结束Redis
$ netstat -tulpn
$ kill -9 "RedisPID" # 或./src/redis-cli shutdown

Redis通用命令

命令 示例 说明
select select 0 选择0号数据库
set set name lily 设置key=name,value=lily
get get hello 获得key=hello结果
keys keys he* 根据Pattern表达式查询符合条件的Key
dbsize dbsize 返回key的总数
exists exists a 检查key=a是否存在
del del a 删除key=a的数据
expire expire hello 20 设置key= hello 20秒后过期
ttl ttl hello 查看key = a的过期剩余时间

Redis数据类型

类型 说明
String 字符串类型
Hash Hash类型
List 列表类型
Set 集合类型
Zset 有序集合类型

字符串常用命令

命令 示例 说明
get get hello 获取key=hello的结果
set set hello world 值key=hello,value=world
mset
mget
mset helo world java bast
mget helo java
一次性设置或获取多个值
del del hello 删除key=hello
incr/decr incr count
decr count
key值自增/自减1
incrby/decrby incrby count 99
decrby count 99
自增自减指定步长

Hash键值类型

  • 用于存储结构化数据

image-20220729202558419

命令 示例 说明
hget hget emp:1 age 设置hash中age=23值
hset hset emp:1 age 23 设置hash中age=23
hmset
hmset
hgetall
hmset emp:1 age 30 name kaka
hmget emp:1 age name
hgetall emp:1
hgetall emp:1
获取hash多个值
获取hash所有值
hdel hdel emp:1 age 删除emp:1的age
hexists hexists emp:1 name 检查是否存在
hlen hlen emp:1 获取指定长度

List列表类型

  • 一系列字符串的“数组”,按插入顺序排序

List命令

rpush listkey c b a 右侧插入

lpush listket f e d 左侧插入

image-20220729210602785

rpop listkey 右侧弹出

lpop listkey 左侧弹出

image-20220729210756993

lrange listkey 0(开始) -1(末尾) 查看list里的数据

Set与Zset集合类型

Set集合是字符串的无序集合,集合成员是唯一的

$ sadd key value # 添加集合
$ smembers key # 查看集合所有成员
$ sinter key1 key2 # 把两个集合中的相同元素列出来
$ sunion key1 key2 # 吧两个集合中的元素合并在一起并且去重
$ sdiff key1 key2 # 在key1中有,key2没有的元素列出

Zset集合是字符串的有序集合,集合成员是唯一的

$ zadd key 100 value # 添加有序元素
$ zrange key start stop # 查看元素
$ zrangebyscore key min max # 查看范围内的元素(列:100-103以内的元素)

String

Java中使用Redis

  • Jedis是Java语言开发的Redis客户端工具包
  • Jedis是对Redis命令的封装,掌握Redis命令便可轻易上手
$ bind 0.0.0.0 #生产模式下不建议使用0.0.0.0作为连接ip
$ protected-mode no #关闭保护模式

String

public class JedisTestor {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("106.12.145.20", 6379);
        try {
            jedis.select(5);
            System.out.println("Redis连接成功");
            //设置字符串
            jedis.set("ceshi", "ceshi1");
            String ceshi = jedis.get("ceshi");
            System.out.println(ceshi);
            //设置多个值
            jedis.mset(new String[]{"age", "18", "sex", "男"});
            //获取多个值
            List<String> mget = jedis.mget("ceshi", "age", "sex");
            System.out.println(mget);
            //age 自增1
            Long age = jedis.incr("age");
            System.out.println(age);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            jedis.close();
        }
    }
}

Hash

public class JedisTestorOne {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("106.12.145.20", 6379);
        //Hash
        try {
            jedis.select(1);
            //设置Hash
            jedis.hset("stu:1", "name", "小明");
            //获取指定Hash
            String name = jedis.hget("stu:1", "name");
            System.out.println(name);

            Map<String,String> map = new HashMap();
            map.put("name","小红");
            map.put("age","18");
            map.put("sex","女");

            jedis.hmset("stu:2", map);
            Map<String, String> stringStringMap = jedis.hgetAll("stu:2");
            System.out.println(stringStringMap);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            jedis.close();
        }
    }
}

List

public class JedisTestorTwo {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("106.12.145.20", 6379);
        //List
        try {
            jedis.select(6);
            jedis.del("letter");
            //(右侧)尾部添加字符
            jedis.rpush("letter", new String[]{"A", "B", "C"});
            //(左侧)头部部添加字符
            jedis.lpush("letter", new String[]{"D", "E", "F"});
            //lrange letter 0(开始) -1(末尾)
            List<String> letter = jedis.lrange("letter", 0, -1);
            //左侧最后元素弹出
            jedis.lpop("letter");
            //右侧最后元素弹出
            jedis.rpop("letter");
            //重新赋值
            letter = jedis.lrange("letter", 0, -1);
            System.out.println(letter);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            jedis.close();
        }
    }
}

Jedis缓存数据

//通过初始化存储数据
public CacheSample() {
    Jedis jedis = new Jedis("106.12.145.20",6379);
    try {
        List<Goods> goodsList = new ArrayList<Goods>();
        goodsList.add(new Goods(110, "香蕉", "大香蕉", 25f));
        goodsList.add(new Goods(111, "红富士苹果", "苹果", 3.5f));
        goodsList.add(new Goods(112, "蒙牛纯牛奶", "牛奶", 7f));
        jedis.select(10);
        for (Goods goods : goodsList) {
            String json = JSON.toJSONString(goods);
            System.out.println(json);
            String key = "goods:" + goods.getGoodsId();
            jedis.set(key, json);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        jedis.close();
    }
}
public static void main(String[] args) {
    new CacheSample();
    Jedis jedis = new Jedis("106.12.145.20");
    try {
        jedis.select(10);
        String goodsId = new Scanner(System.in).next();
        String key = "goods:" + goodsId;
        if (jedis.exists(key)) {
            String json = jedis.get(key);
            System.out.println(json);
            //调用parseObject方法传入JSON字符串和类
            Goods goods = JSON.parseObject(json, Goods.class);
            System.out.println(goods.getGoodsName());
            System.out.println(goods.getGoodsId());
        } else {
            System.out.println("您查找的数据不存在!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        jedis.close();
    }
}
posted @ 2022-12-02 19:40  与你一起看星辰  阅读(28)  评论(0)    收藏  举报