redis学习(一) 五大数据类型学习

入门学习:

启动redis:redis-server

 

再启动一个客户端,使用命令:redis-cli shutdown 进行关闭redis

现在开启redis服务  在另一个cmd中打开redis目录 输入命令:redis-cli -h 127.0.0.1 -p 6379连接到当前服务

设置键值 和 获取键值

keys * 是获取当前redis中存储的所有键名(如果数量较大会比较影响性能)

 

验证是否存在键名  exists关键字 返回0 或 1

删除键 del 关键字

获取键值的数据类型 type关键字

redis较之memcache的优点之一就是多样的数据类型  其中有五个类型:string(字符串)    set(集合)  zset(有序集合)  list(列表)  hash(散列) 

 

首先学习string基本类型

string可以存储任何形式的字符串,二进制,或者json后的图片,最大容量为512MB

如上面使用的  set key value   |   get  key >> "value"

简单的设置和获取键值

 

递增数字  incr 关键字  初始值1

会设置和获取之后  需要注意:key设置起名  例如设置某个文章的访问量  使用INCR递增  INCR post:文章ID:page.view   即对象类型:对象ID:对象属性  多个属性时使用" . "连接  这样可读性和查询较简单

 

增加指定浮点数  INCRBYFLOAT 

向尾部追加值 APPEND

获取字符串长度 STRLEN

//  如果是UTF-8的中文  那么一个字符长度为3 

 

获取| 设置多个键值  MSET | MGET

 

位操作 GETBIT 

SETBIT 设置比特位

基础的string类型操作学习之后下来就是散列(hash)类型

使用场景:例如一篇博客,如果用string我们需要一个文章IDkey 对应的整个文章标题,内容,标签等信息全部存在一个字符串中,如果后面我们只需要获取其中一个例如标题,那我们需要将整个字符串获取再筛选,这样造成了处理效率上很大的浪费,而redis中的hash就可以优化和避免这种情况, 

例如 :

下面学习HASH的命令

简单的HSET 和HGET 设置和获取键值

  继续增加键值

                   

一次增加多个键值 HMSET HMGET

               

插入某个键时会判断是更新或者插入操作,更新会返回0,插入会返回1

还有判断字段是否存在函数 HEXISTS 存在返回1  不存在返回0

         

 当字段不存在时赋值 HSETNX  源代码如下:

def hset($key, $field, $value)
    $isExists = HEXISTS $key, $field
    if $isExists is 0
       HSET $key, $field, $value
       return 1
    else 
       return 0

删除键  HDEL key  field 

还有获取散列中的所有键 或者 值 HKEYS |  HVALS

获取字段数量 HLEN key

 

第三个数据类型  列表(list)

通过双链表实现list类型

场景:获取数据中ID前10条或最后10条 时间复杂度O(1)

 

两端增加元素LPUSH | RPUSH

现在1list中键的数据信息:

两端弹出数据  LPOP | RPOP key 

按照上面图中数据我们pop测试

获取list中的元素个数 LLEN key

可以看到我们上面pop完1list中所有的数据后 1list这个键会消失(上图2list下面为‘L’list)

>获取列表片段 LRANGE key start stop

类似于array_slice

第二位代表下标  而不能代表分割元素个数 并且为闭区间 [ ]

>删除指定值的元素  LREM key count value

当count为负 代表从右开始查找   为正则从左边开始查找

value 为 需要删除的数值

|count|为删除多少个为value的元素

>获取/设置 指定索引的元素值

LINDEX key value

LSET key index value

从上面可以得出:下标从0开始计算 , 如果下标值已存在会修改当前的值进行覆盖  

>删除指定范围之外的所有元素 LTRIM key start end

>向列表中插入元素 LINSERT key BEFORE|AFTER pivot value

从左向右查找pivot值的元素  依据第二个参数BEFORE|AFTER决定 value插入其后还是前

 

第四种数据类型 set集合

底层是用hash table 实现的,所以其插入,删除,查找都为O(1)

>增加/删除元素  以及查看成员

SADD key member1 member2

SREM key member1

SMEMBERS key

>判断元素是否在集合中

SISMEMBER key member

>集合间运算

SDIFF key1 key2  ...

SINTER key1 key2 ...

SUNION key1 key2 ...

1>SDIFF如其命名,取多个集合中的差集  如 SDIFF({1,2,3} - {2,3,4} )= {1}  注意先后顺序SDIFF({2,3,4} - {1,2,3}) = { 4}

多个集合求差集 会先从左向右计算  (A-B) - C = SDIFF 

2>SINTER 求多个集合的交集

如 SINTER({1,2,3} U {2,3,4}) = {2,3}

3>SUNION表示多个集合的并集

>获取集合中元素个数SCARD key

>集合运算并将结果存储

SDIFFSTORE storeKey set1 set2

SINTERSTORE storeKey set1 set2

SUNIONSTORE storeKey set1 set2

 

>从元素中弹出一个元素

SPOP key

 

下面是最后一个数据元素 有序集合 ZSET

有序集合和列表存在类似关系:

1》二者都是有序的(下标)

2》二者都可以获取一定范围的值

区别:

1》列表类型通过双向链表实现,获取靠近两端数据非常快,而当数据量增加之后 获取中间数据比较慢,所以列表更适合于“新鲜事”和“日志”这些很少访问中间元素的应用功能

2》有序集合类型使用散列表和跳表实现,所以即使读取中间位的数据速度也很快(O(logN)))

3》列表不能简单地调整某个元素位置,而集合可以(更改分数)

4》有序集合比列表更费内存

 

下面学习操作命令:

>增加元素ZADD key score member [score member ...]

获取元素分数 ZSCORE key member

>获得排名在某个范围的元素列表

ZRANGE key start stop [withscore]

>获得指定分数范围的元素

ZRANGEBYSCORE key min max [withscore]  [limit offset limit]

+inf 表示无穷大   -inf表示无穷小

' ( '表示开区间

limit 和SQL中的一样

>修改某个元素的分数

ZINCRBY key increment member

>获取集合中元素数量 ZCARD key

>获得某个分数范围元素个数ZCOUNT key min max

>删除一个/多个元素ZREM key member1 member2 ...

>按照排名范围删除元素ZREMRANGEBYRANK key start stop (索引下标值)

>按照分数排名范围删除元素ZREMRANGEBYSCORE key min max

 

 

redis五大数据结构学到这啦~~~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值