美文网首页
04JavaWeb Day13_Redis

04JavaWeb Day13_Redis

作者: 雪之梦_8f14 | 来源:发表于2019-07-09 15:28 被阅读0次

Redis使用

简单使用示例

  • 连接服务器 ./redis-cli -h ip地址 -p 端口号(默认是6379)
  • 向Redis服务器发送命令
    • ping:测试客户端与redis服务器的连接是否正常, 如果连接正常会收到回复pong
    • set / get 设置数据和获取数据
    • del 删除指定key的内容
    • keys * ,查看当前库中所有的key值

Redis的数据结构

  • redis 是一种高级的key-value的存储系统,其中value支持五种数据类型

    1. 字符串(String)
    2. 哈希(hash)
    3. 字符串列表(list)
    4. 字符串集合(set)
    5. 有序字符串集合(sorted set)
  • key定义注意:

    1. key不要太长, 最好不要超过1024个字节, 这不仅消耗内存还有降低查找效率
    2. key不要太短, 如果太短会降低key的可读性
    3. 在项目中, key最好有个统一的命名规范

存储字符串

  • 赋值: set key value: 例如 set name smx
  • 取值: get key : 例如 get name
  • 取、赋值: getset key value: 先获取该key的值 再设置该key的值
  • 删除: del key
  • 数值增减
  • incr key: 将指定的key的value原子性递增1,如果该key不存在,其初始值为0, 在incr之后其值为1. 如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。
incr num // 可以不存在, 初始值为0, 结果为1
get num // "1"
incr num // 结果为2 
incr company 指定key不能累加, 将抛异常 err value is not an integer or out of range
  • decr key: 将指定key的value 原子性递减1, 如果该key不存在, 其初始值为0, 在 incr之后其值为 -1. 如果value 的值不能转成整型, 如hello, 该操作将执行失败并返回响应的错误信息。

存储hash

  • 概述
    redis 中的hash类型可以看成具有String Key 和 String Value 的map容器。所以该类型非常适合于存储值对象的信息。如UserName、PassWord和Age等。如果hash中包含很少的字段,那么该类型的数据也将占用很少的磁盘空间。每一个hash可以存储4294967295个键值对

  • 赋值 hset key field value: 为指定的key设定field/value对
    hset myhash username jack

  • 赋值 hmset key field value [field2 value2]:设置key中的多个 field/value
    hmset myhash2 username rose age 21

  • 取值:hget key field:返回指定的key中的field的值

  • 取多个值: hmget key fields: 获取key中的多个field的值 hmget myhash2 name age

  • 获取key中的所有的 field-value hgetall key

  • 删除 hdel key field [field]: 可以删除多个字段 返回值是被删除字段的个数

  • 删除整个hash:del key

  • 增加数字: hincrby key field increment hincrby myhash2 age 5

  • 判断key中的field是否存在 hexists key field: hexists myhash2 score

  • 获取key锁包含的field的数量 hlen key

  • 获取所有的value hvals key


存储list

  • 概述


    image.png
    image.png
  • 两端添加: lpush key values[value1 value2...]:在指定的key所关联的list的头部插入所有的values,如果该key不存在,该命令在插入之前创建一个与该key关联的空链表,之后再向该链表的头部插入数据。插入成功, 返回元素的个数
    lpush mylist a b c

  • 在list尾部添加元素: rpush key values[value1 value2] 例如: rpush mylist 1 2 3

  • 查看列表 lrange key start end:获取链表中从start到end 的元素的值, start、end从0开始计数:也可以为负数,若为-1的表示链表尾部的元素, -2 则表示倒数第二个元素 以此类推 没有rrange命令

  • 两端弹出

    • lpop key:返回并弹出指定的key关联的链表中的第一个元素,即头部元素。如果该key不存在,返回nil:若key存在,则返回链表的头部元素

    • rpop key:从尾部弹出元素

  • 获取列表元素中的个数 llen key:返回指定key关联的链表中的元素的数量

  • 扩展命令(了解):

    • lpushx key value: 当key存在时 在头部插入元素 否则不插入

    • rpushx key value: 尝试在尾部插入元素

    • lrem key count value: 从头向尾遍历并删除count个值为value的元素, 如果count小于0,则从尾向头遍历并删除,如果count等于0 则删除链表中所有等于value的元素

image.png
image.png
  • lset key index value:设置链表中的index的脚标的元素值, 0代表链表的头元素,-1代表链表的尾元素。操作链表的脚标不存在则抛异常
image.png
  • linsert key before | after pivot value:在pivot元素钱或者后插入value这个元素

    image.png
  • rpoplpush resource destination:将链表中的尾部元素弹出并添加到目标链表的头部

    image.png
    image.png

存储 set

  • 概述


    image.png
  • 添加元素: sadd key values[value1 value2]: 向set中添加数据,刚过该key的值已有则不会重复添加

  • 删除set中指定成员:srem key members[member1 member2] srem myset 1 2 3

  • 获取集合中的元素:

    • 获取所有成员: smembers key

    • 判断某个元素是否存在于某个set中 sismember key member

    • 获取set成员个数: scard key

    • 随机返回set中的任意一个成员:srandmember key

  • 集合差运算A - B:sdiff key1 key2: 返回差集

  • 集合的交集运算A 交 B: sinter key1 key2 key3: 返回交集

  • 集合的并运算 A Union B: sunion key1 key2 key3:返回并集

  • 将key1和key2相差的成员存储在另外一个集合上 : sdiffstore destination key1 key2

  • 将两个集合的交集存储在另外一个集合上:sinterstore destination key1 key2

  • 将两个集合返回的并集存储在目标集合上: sunionstore destination key1 key2

  • 使用场景


    image.png
    image.png

sortedset

  • 概述


    image.png
  • 添加元素:zadd key score member score2 member2


    image.png
  • 获取元素

  • 返回指定成员的分数:zscore key member

  • 返回集合中的成员的数量: zcard key

  • 删除元素:zrem key member1 member2

  • 范围查询:

  • zrange key start end [withscores]


    image.png
  • zrevrange key start stop [withscores]


    image.png
  • 按照排名范围删除元素:zremrangebyrank key start stop

  • 按照分数范围删除元素: zremrangebyscore key min max


    image.png
  • 扩展命令


    image.png
  • 使用场景


    image.png
Keys的通用操作
  • key pattern: 获取所有与pattern匹配的key, 返回所有与该key匹配的keys。 *表示任意一个或多个字符, ?表示任意一个字符
  • 删除指定的key:del key1 key2
  • 判断key是否存在:exists key
  • 为当前的key重命名: rename key newkey
  • 设置过期时间:expire key n 单位:秒
  • 获取该key所剩的超时时间:ttl key 如果没有设置超时 返回-1 超时不存在 返回-2
  • 获取指定key的类型: type key


    type key
Redis特性
  • 多数据库


    image.png
    image.png
  • 将newkey 一直到1号库: move newkey 1


    移植
  • 服务器命令


    image.png
    image.png
    image.png
  • 消息订阅和发布


    image.png
    image.png
  • 事务


    image.png
    image.png
    image.png
    image.png
redis使用场景
image.png
redis 持久化

Jedis的使用

  • 导入两个jar包 commons-pool2-2.3.jar 和 jedis-2.7.0.jar
  • 简单示例
Test
    public void testJedisSingle()
    {
        // 1. 设置ip地址和端口号
        Jedis jedis = new Jedis("localhost", 6379);
        
        // 2. 设置数据
        jedis.set("name", "smx");
        
        // 3. 获取数据
        String name = jedis.get("name");
        
        System.out.println("name:" + name);
        
        // 4.释放资源
        jedis.close();
    }
  • 连接超时问题


    image.png

相关文章

  • 04JavaWeb Day13_Redis

    Redis使用 简单使用示例 连接服务器 ./redis-cli -h ip地址 -p 端口号(默认是6379) ...

  • 04JavaWeb Day10_基础增强

    基础加强 注解 annotation 什么是注解?注解和接口、类一样都属于数据类型 注解作用编译检查配置(后期用的...

  • 04JavaWeb Day09_Listener_Filter

    监听器 监听器: 监听某一个事件的发生或者状态的改变, 内部机制其实就是借口回调 一共有8个监听器 可分为两种类...

网友评论

      本文标题:04JavaWeb Day13_Redis

      本文链接:https://www.haomeiwen.com/subject/aiwxkctx.html