Redis笔记

docker 命令

docker run -d -p 6379:6379 --name myredis redis:latest

通过redis-cli或者redis client连接redis,视图化工具有RedisDesktopManager

redis-cli

  • 连接本地

    docker exec -it [ContainerID] redis-cli
    
  • 连接远程

    docker exec -it [ContainerID] redis-cli -h [Ip Address] -p [Port] -a [Password] //如果有密码 使用 -a参数
    

redis 存值方式为key/value方式,支持的数据类型为string、list、set、hashmap、sortedSet(有序的set)

redis 命令操作

redis进阶

字符串操作
  • 赋值-----set key value

    set name tom
    
  • 取值-----get key

    get name 
    
  • 先取值后赋值------getset key value

    getset name jack
    "tom"
    
  • 删除----del key

    del name
    (integer)1
    
  • 自增----incr key(key对应的value必须是数值类型的字符,若未设置初始值,则从0开始)

incr

  • 自减----decr key(key对应的value必须是数值类型的字符,若未设置初始值,则从0开始)

  • 扩展命令

    • incrby----递增设定的数值(key对应的value必须是数值类型的字符,若未设置初始值,则从0开始)

    • decrby-----递减设定的数值(key对应的value必须是数值类型的字符,若未设置初始值,则从0开始)

    • append key value----拼接字符串,其中integer的值为字符串的长度,若key不存在时,会自动创建一个字符串并终值value

哈希操作

hash类型是存储String key和String value的map容器,适合用于存储对象

  • 赋值

    • hset hashkey String key String value(单个设置)

      hset person name tom
      
    • hmset hashkey {String key1 String value1,String key2 String value2…}

      hmset people name jack age 23 gender male
      
  • 取值

    • hget hashkey String key(获取单个键对应的值)

      hget person name
      
    • hmget hashkey String key1 String key2…(这个表示可以获取多个键所对应的值)

      hmget people name age gender
      
    • hgetall hashkey(获取所有key和value)

      hgetall people
      
  • 删除

    • hdel hashkey String key1 String key2…(表示删除多个键所对应的值)

      还可以删除不存在的字段,但是结果会显示为0

      hdel person name 
      
    • del hashkey表示删除这个map

      del person
      
  • 递增对应的值

    hincrby hashkey String key num

  • 判断对应的myhash是否存在,若存在返回1,不存在返回0

    hexists hashkey String key

  • 判断对应myhash的长度,返回长度

    hlen hashkey

  • 获得所有的key

    hkeys hashkey

  • 获取所有的value

    hvals hashkey

列表操作

经常用于消息队列的服务,完成多个服务之间的交互

  • 添加元素到列表的左边

    lpush listkey value1 value2 …(返回值为列表的长度)

  • 添加元素到列表的右边

    rpush listkey value1 value2 …(返回值为列表的长度)

  • 查看list集合

    lrange listName start end(可正可负,若为负则是从右边开始算,-1则表示最后一个,0到end和0到-1一样,都是闭区间)

  • 弹出操作

    • 头部弹出

      lpop key(会弹出左边第一个值,若有值,则弹出并会显示弹出的值,若没有,则返回null)

    • 尾部弹出

      rpop key(会弹出右边第一个值,若有值,则弹出并会显示弹出的值,若没有,则返回null)

  • 获取列表中元素的个数-----llen key(会返回列表的长度)

  • 当list中的key存在时才会插入一个值并返回当前列表的长度,若不存在则不会插入并返回0

    • 从左边插入-----lpushx key value
    • 从右边插入-----rpushx key value
  • 删除操作----lrem key count value(会删除count个值为value的元素。count大于0的时候,表示从头开始删除count个值为value的元素。若count小于0,则表示从后边往前遍历并删除count个值为value的元素。若count等于0.则表示删除链表中所有值为value的元素)

  • 在指定的位置插入元素----lset key location value(location从0开始)

  • 在某个元素之后插入值----linsert key after 目标元素 插入元素

  • 将第一个链表中的尾部弹出并压入到第二个链表的头部----rpoplpush key1 key2

Set集合操作

元素不能重复

  • 添加元素----sadd key value1 value2…

  • 查看数据----smembers key

  • 判断指定元素是否包含在set里面----sismember key value,若返回1则表示存在,若返回0表示不存在

  • 差集运算----sdiff key1 key2…

  • 交集运算----sinter key1 key2…

  • 并集运算----sunion key1 key2…

  • 获得集合中具体的数量----scard key

  • 随机获得set集合中的一个元素----srandmember key

  • 将两个集合相差的元素存储在另一个集合中----sdiffstore newkey key1 key2

  • 将两个集合的交集存储在另一个集合中-----sinterstore newkey key1 key2

  • 将两个集合的并集存储在另一个集合中----sunionstore newkey key1 key2

Sorted-Set集合操作

元素不能重复,但分数(score)可以重复

  • 添加元素----zadd key score1 value1 score2 value2…
  • 获得分数----zcore key value
  • 获得具体成员的数量----zcard key
  • 删除操作----zrem key value1 value2…
  • 查找范围内的值-----zrange key num1 num2(这是从大到小排序的)
  • 查找范围内的值并和分数一起显示出来------zrange key num1 num2 withscores(这是从大到小排序的)
Keys的通用操作
  • 显示所有的key----keys *

  • 查询key的模糊查询----keys string?

    keys nu?   只查询一位,如num
    keys nu*   匹配已nu开头的所有key
    
  • 删除指定的key----del key1 key2 key3…

  • 判断key是否存在,若存在返回1,不存在返回0----exists key

  • 设置键的过期时间----expire key seconds

  • 获得key剩下的超时时间,若设置了会返回相应的值,所没有设置则会返回-1----ttl key

  • 查看键的类型----type key

多数据库操作

用户可以自己选择连接相应的数据库,一共有16个,下标从0-15,默认连接第一个,即0。

  • 选择连接相应的数据库----select i
  • 将一个数据库中的key移到另外的地方----move key i (数据库的下标)
事务
  • 开启事务----multi
  • 提交事务----exec
  • 回滚事务----discard

Redis Java Client

  • 存入对象

    异常信息:java.lang.IllegalArgumentException:DefaultSerializerrequires aSerializablepayload but received anobjectof type
    
    原因:必须实现序列化,因为需要将对象序列化后存储到 Redis。如果没实现 Serializable ,会引出异常;
    
    解决:如果不是用默认的序列化,需要自定义序列化实现,只要实现 RedisSerializer 接口去实现即可,然后在使用 RedisTemplate.setValueSerializer 方法去设置你实现的序列化实现。支持 JSON、XML 等。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值