1,查看当前库所有key:
key *
在测试之前先键入几个值
set k1 mary
set k2 jack
set k3 frank
keys *
2,判断是否包含某个key
exists key
3,查看键的类型
type key
4,删除指定key的数据
del key 删除指定key的数据
unlink key 根据value选择非阻塞删除
效果是一样的,但是del key 是直接删除 unlink key是非阻塞删除,不会直接删除,仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。
5,为key设置过期时间
expire key 10 指定key10秒删除
6,查看key还有多少秒过期
-1表示永不过期,-2表示已经过期
7,切换数据库
redis默认有16个数据库,0-15库,默认选择0号库
8,查看当前库有多少key
因为我们之前的操作删掉了key,现在重新添加几个
查看当前库的key的数量
9,清空当前库
flushdb
10,通杀所有库
flushall
String 是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
String类型是Redis最基本的数据类型,一个Redis 中字符串value最多可以是512M。
1,添加键值对
set
2,获取值
get key
3,追加字符
append
4,获取值的长度
strlen key
5,只在key不存在的时候设置值
setnx key
6,将key中存储的数字值+1,-1
incr +1
decr -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
11,setrange
12,setex key 过期时间 value ,设置key的值的时候设置过期时间
13,getset k v 以新值换旧值
String 的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的 ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
单键多值
redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。
他的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
1,lpush/rpush
左插
右插
注意:插入的过程如下图。
左插:
a |
b | a |
c | b | a |
d | c | b | a |
右插:
a |
a | b |
a | b | c |
a | b | c | d |
2,lpop/rpop
3,rpoplpush
下面拿左插入举例子:
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
List的底层数据结构是快速链表quickList
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。他将所有的元素紧挨着一起存储,分配的是一块连续的内存。
当数据量比较多的时候才会改成quickList。
因为普通的链表需要的附加指针空间太大,会比较浪费空间,比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。
Redis将链表和zipList结合起来组成了quickList。也就是将多个zipList使用双向指针串起来使用。这样既满足了快速插入删除性能,又不会出现太大的空间冗余。
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动重拍的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择
正在更新.......