Redis常用五大数据类型(详解)正在更新

一,key

1,查看当前库所有key:

key *

在测试之前先键入几个值

 set k1 mary
 set k2 jack
 set k3 frank
 

  keys *      

70260e3cea044357a186ab22823e1cce.png

 2,判断是否包含某个key

exists key

d42a3deaa1804f11a2776ef6fa1709bc.png

3,查看键的类型

type key

 24cf98bf9b7847c1b32e6bdf3ed558a3.png

 4,删除指定key的数据

del key      删除指定key的数据
unlink key   根据value选择非阻塞删除 

65768107a6e84f4999c4796b82e24aae.png

539738b77aa0434c8219f19ad6c574ec.png

效果是一样的,但是del key 是直接删除 unlink key是非阻塞删除,不会直接删除,仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。

5,为key设置过期时间

expire key 10 指定key10秒删除

 46668c7cbbee4678a798c967ef763464.png

 6,查看key还有多少秒过期

-1表示永不过期,-2表示已经过期

35a7691d0da042dfa50d778a2732b8a5.png

7,切换数据库

redis默认有16个数据库,0-15库,默认选择0号库

 c3722bd58637425ebe5351452adcced2.png

8,查看当前库有多少key

因为我们之前的操作删掉了key,现在重新添加几个

8c998d7f891f44b5b298a29e5f9eca03.png

查看当前库的key的数量 

 ffa5042669914eeaae850c30aebf1b51.png

 9,清空当前库

flushdb

9d6cf5a84fa742be8000ead5ec1bef33.png

10,通杀所有库

flushall

e58286957d784b5888792fb4c91b7c58.png

二,Redis字符串类型(String)

1,简介

String 是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。

String类型是Redis最基本的数据类型,一个Redis 中字符串value最多可以是512M。

2,常用命令

1,添加键值对

set <key> <value>

 2,获取值

get key

3,追加字符 

append <key> <value>

 4,获取值的长度

strlen key

5,只在key不存在的时候设置值

setnx key

6,将key中存储的数字值+1,-1

incr <key> +1
decr <key> -1

仅对数字值有效果,incr,如果为空,新增值为1;decr,如果为空,新增值为-1

 7,将key中存储的数字值+ - 指定步长

incrby key 步长
decrby key 步长

原子性 

 所谓原子操作是指不会被线程调度机制打断的操作; 

这种操作一旦开始,就一直运行到结束,中间不会有任何context switch(切换到另一个线程)。

 (1)在单线程中,能够在单条指令中完成的操作都可以认为是"原子操作",因为中断只能发生于指令之间。

(2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。

Redis 单命令的原子性主要得于Redis的单线程。

8,mset ,mget,设置,取多个key和value

mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3

9,msetnx设置不存在的key,若key存在则设置不成功 

10,getrange <key> start end截取key从start到end结尾的字符串

 11,setrange <key> 起始位置 value

12,setex key 过期时间  value ,设置key的值的时候设置过期时间

13,getset k v 以新值换旧值

3,数据结构

String 的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.

如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。

三,Redis列表(List)

1,简介

单键多值

redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。

他的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

 2,常用命令

1,lpush/rpush <key> <v1><v2>....从左边/右边插入一个或多个值。

左插

右插

 注意:插入的过程如下图。

左插:

a
ba
cba
dcba

右插:

a
a

b

abc
abcd

2,lpop/rpop <key> 从左边/右边吐出一个值。值在键在,值光键亡

3,rpoplpush <k1><k2> 从k1列表右边吐出一个值,插到k2列表左边

下面拿左插入举例子:

 4,lrange key start end 按照索引下标得元素(从左到右)

略,上方有展示

注意:lrange key 0 -1可以取到所有值

5,lindex key index按照索引下标获取元素(从左到右)

6,llen key 获取列表长度

7,linsert key before value newvalue 在value的后边插入newvalue插入值

8,lrem key n value 从左边删除n个value(从左到右)

9,lset key index value 将列表key下标为index的值换成value

3,数据结构

List的底层数据结构是快速链表quickList

首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。他将所有的元素紧挨着一起存储,分配的是一块连续的内存。

当数据量比较多的时候才会改成quickList。

因为普通的链表需要的附加指针空间太大,会比较浪费空间,比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。

Redis将链表和zipList结合起来组成了quickList。也就是将多个zipList使用双向指针串起来使用。这样既满足了快速插入删除性能,又不会出现太大的空间冗余。

四,Redis集合(Set)

1,简介

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动重拍的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择

正在更新.......

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值