redis起步

redis起步

2021-08-13
java
  • 支持string、list、set、有序set、hash等数据类型
  • 通过./redis-server [redis.conf] 启动服务。
  • 通过./redis-cli [-h hostname] [-p port] 连接redis,登录后通过AUTH password来输入密码。

命令 #

  • keys * 查看当前库中的所有key。
  • exists key 判断某个key是否存在
  • rename key newkey键重命名
  • type key 查看key是什么类型
  • del key 删除指定的key数据
  • expire key 10 给key设定10秒的过期时间
  • ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
  • select index 切换数据库,默认有16个库
  • dbsize 查看当前库key的数量
  • set key value 设置字符串类型的键值对
  • get key 获取值

数据类型 #

string #

  • set key value 设置值
  • get key 获取key对应的值
  • strlen key 获取值的长度。
  • mset key1 value1 key2 value2 同时设置多个键值对。
  • mget key1 key2 同时获取多个键值对。
  • append key value 将给定的value追加到原值的末尾。
  • setnx key value 只有当key不存在的时候才设置key的值。
  • incr key key的值加一。
  • decr key key的值减一。
  • incrby key 步长 key的值加步长。
  • decrby key 步长 key的值减步长。
  • msetnx key1 value1 key2 value2 同时设置多个键值对,当有一个key存在的时候,所有的设置都会失败。
  • setex key seconds value 设置键值对的同时设置过期时间,单位是秒。
  • String内部采用类似arraylist的机制,字符串实际分配的空间一般高于字符串的长度,当字符串长度小于1M时,扩容都是加倍的,超过1M时,每次扩容都是只增加1M。最大为512M。

链表 #

节点的结构 #

//adlist.h/listNode
//结构
typedef struct listNode {
    //前置节点
    struct listNode *prev;
    //后置节点
    struct listNode *next;
    //节点的值
    void *value;
}
  • 双端链表,获取节点的前置节点和后置节点的复杂度都是O(1)。
  • 无环链表,表头指针的prev和表尾指针的next都是指向NULL。
  • list结构的head指针和tail指针能快速获取表头结点和表尾节点,复杂度是O(1)。
  • 可以通过list结构的len属性来获取链表中节点的数量,复杂度是O(1)。

命令 #

  • lpush/rpush k1 v1 v2 v3 从左/右边插入
  • lpop/rpop k1 从左/又边吐出一个值
  • lindex key index按照索引下标获取元素
  • len key获得列表的长度
  • lset key index value 将key的下标为index设置为value
  • lrange key start stop 按照下标索引获得元素,0表示左边第一个,-1表示右边第一个。
  • lrem key n value 删除n个value

hash #

命令 #

  • hset key field value设置值
  • hget key field获取值
  • hdel key field[field...]删除一个或多个键值对
  • hlen key计算field的个数
  • hmget key field [field...] 批量获取
  • hmset key field value [field value ...]批量设置
  • hexists key field判断field是否存在
  • hkeys key获取所有field
  • hvals key获取所有value
  • hstrlen key field获取value字符串长度