Redis基础(命令 + 数据结构)

1.String类型

redis的字符串是动态字符串,内部结构类似ArrayList,采用预分配冗余空间来减少内存的频繁分配。

其内部的array的实际分配空间capacity一般要高于实际字符串的长度len

其常用命令如下:


1.set name value

2.get name

3.mset name1 value1 name2 value2 ...

4.get name1 name2

5.expire name 5   -> 设置name的过期时间为5s

6.setex name 5 value  -> 等同于  set name 123 + expire name 5

7.setnx name value -> 如果name这个key不存在则创建,否则不创建

2.列表List

Redis的列表类似LinkedList,注意是双向链表。所以它的插入是O(1)的

当列表弹出最后一个元素后,该key就会被回收删除

命令:

    rpush/lpush key value1 value2 value3

    rpop/lpop key

    llen key  -> 获取列表的长度

    以下操作由于链表的特点,是耗时操作
    lindex key value   -> 获取列表中value的index

    ltrim key startIndex endIndex  -> 删除两个index之外的value

    lrange key startIndex endIndex  -> 获取两个index之间的值

实际上,redis的列表采用的是一种快速链表的结构

  • 如果元素较少,分配的是一块连续内存(zipList,类似数组)
  • 当数据量比较多时才会改成快速链表
  • quickList是将多个zipList串起来,使得省了多个pre和next指针变量
    例子:
[1,2,3] -> [4,5,6]   一个pre和next指针

1 -> 2 -> 3 -> 4 -> 5 -> 6   多个pre和next指针

3.hash字典

类似HashMap,里面的key是无序

redis的hash才用了渐进式rehash的操作:

1.在插入新元素时发现需要rehash
2.这个时候创建一个新的hash,但是并不将之前的hash全部rehash到新的hash中
3.在后续的定时任务以及hash操作指令中,循序渐进的将旧hash内容移动到新的hash中
4.当旧的hash最后一个元素被删除后,该结构就会被回收

命令:

	hset key hashkey hashvalue

    hget key hashkey

    hgetall key -> 会以hashkey1 、hashvalue1、hashkey2、hashvalue2这样的方式显示出来

    hmset hmget .....

    hincrby key value incrNum

4.Set 集合

类似hashSet,内部key-value是无序的,每个key的value都是null

如果重复添加元素,后面的元素添加不进去

命令:

	sadd key setkey

    smembers key -> 查询set中所有的元素

5.zset

sortedSet + hashmap的结构,成为跳跃列表

命令:

 	zadd key score zsetkey

    zrange books startIndex endIndex

    zcard key -> 查询key中一共有多少个数据

    zscore key zsetkey -> 查询score

    zrank key zsetkey  -> 查询某个元素的排名   1,2,3,...

6.redis通用规则

1. create if not exists: 如果某个key不存在,就创建,再将元素设置进去
2. drop if no elements: 如果某个key内的元素都被删除,那么这个key就会被删除
3. 过期时间
    expire key 600    -> 10分钟过期
    ttl key   -> 查询key还有多久过期(如果已经过期会返回-1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值