redis起步
2021-08-13
- 支持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设置为valuelrange 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
获取所有fieldhvals key
获取所有valuehstrlen key field
获取value字符串长度