Redis8个数据类型及常⽤命令
Redis全称:REmote DIctionary Server(远程字典服务器)。是完全开源免费的。Key-Value数据库,它通常被称为数据结构服务器,并提供多种语⾔的API。
下⾯涉及的数据类型和更多命令详解,多查看上⾯官⽅⽂档。
⼀、Redis 数据类型
Redis的数据类型的数据形式:key - value,键值对的形式来保存数据的。
key:只有⼀种数据类型就是字符串。
value:值的数据类型基本有8种:
1. 字符串(String)
2. 列表(list)
3. 散列(hash)
4. ⽆序集合(set)
5. 有序集合(sorted sets)
6. 基数统计(HyperLogLog)    # 2.8.9新增
7. 地理地图(GEO) # 3.2新增
8. 流(Stream)        # 5.0新增
Redis所有的数据结构都以唯⼀的 key 字符串作为名称,然后通过这个唯⼀ key 值来获取相应的 value 数据。不同类型的数据结 构的差异就在于 value 的结构不⼀样。
⼀些常⽤和通⽤命令:
1、字符串(String)
字符串(String)是 Redis 最简单的数据结构,它的内部表⽰就是⼀个字符数组,类似于 Java 的 ArrayList,Redis ⾃⼰实现了SDS(简单动态字符串)的抽象类型。它是动态字符串,是可以修改的字符串。
字符串数据是⼆进制安全的,value 值最⼤长度是512M。
⼆进制安全:⼀个⼆进制安全功能(函数)是指在⼀个⼆进制⽂件上所执⾏的不更改⽂件内容的功能或者操作,其本质上将操作输⼊作为原始的、⽆任何特殊格式意义的数据流。
MySql是关系型数据库,不是⼆进制不安全的,如果编码格式不⼀致,就可能出现中⽂乱码。⽽ Redis 的字符串是⼆进制安全。Redis 只在客户端上才有编码和解码。保证你存什么东西进去,拿出来的⼀定是⼀样的。执⾏效率⾼。
Redis内部的字符串编码类型使⽤了三种编码类型来保存字符串对象的数据,并且会随着保存字符串内容⾃动变更。
1. int:⽤于保存64位有符号的整数形式的字符串。
2. embstr:⽤于保存⼩于或等于44字节⼤⼩的字符串,这个内部类型,有利于提⾼redis的⼯作效率。
3 .raw:⽤于⼤于44字节⼤⼩的字符串的保存。
1)常⽤ Redis命令
命令描述
redis支持的数据结构
SET key value 设置指定 key 的值。如果 key 存在时会直接覆盖原来的值,并且忽略原始类型。返回值:正常执⾏返回OK,否则,如果没有设置条件则返回nil。
GET key 获取指定key的值。返回值:如果key不存在,返回特殊值nil。如果key的value不是string,就返回错误,因为GET只处理string类型的values。
STRLEN key获取指定key值的长度。返回值:如果key不存在返回0;如果key的value不是string,就返回错误。
APPEND key value 追加value到该key原来值的末尾。如果 key 已存在,并且值为字符串,就把 value 追加到原来值(value)的结尾。 如果key 不存在,就先创建⼀个空字符串的key,再执⾏追加操作。返回值:追加后字符串的长度。
SETRANGE key offset
value
覆盖key对应的string的⼀部分,从指定的offset处开始,覆盖value的长度。返回值:修改后的字符串长度。GETSET key value设置⼀个key的value,并返回设置前的旧值。返回值:返回之前的旧值,如果key不存返回nil。INCR key将 key 中储存的数字值增⼀。返回值:递增的值。
DECR key将 key 中储存的数字值减⼀。返回值:递减的值。
2)实例:
[root@centos7 redis]# ./bin/redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k11 v11
OK
127.0.0.1:6379> get k11
"v11"
127.0.0.1:6379> STRLEN k11
(integer) 3
127.0.0.1:6379> strlen k22
(integer) 0
127.0.0.1:6379> APPEND k11 appendvalue
(integer) 14
127.0.0.1:6379> get k11
"v11appendvalue"
127.0.0.1:6379> SETRANGE k11 3 _3range
(integer) 14
127.0.0.1:6379> get k11
"v11_3rangealue"
127.0.0.1:6379> getset k11 v_getset
"v11_3rangealue"
127.0.0.1:6379> get k11
"v_getset"
127.0.0.1:6379> set knum 10
OK
127.0.0.1:6379> incr knum
(integer) 11
127.0.0.1:6379> decr knum
(integer) 10
127.0.0.1:6379> object encoding k11
"embstr"
127.0.0.1:6379> object encoding knum
"int"
127.0.0.1:6379> del knum
(integer) 1
2、列表(list)
Redis 列表是简单的字符串列表,按照插⼊顺序排序。你可以添加⼀个元素到列表的头部(左边)或者尾部(右边)。但这个列表底层不是数组结构,⽽是有点双向链表和队列结构的感觉(具体结构实现看官⽹)。
⼀个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
1)常⽤ Redis命令:
命令描述
LPUSH key value [value ...]向列表头部插⼊⼀个或多个值,如果 key不在这会创建⼀个空列表插⼊值
LPUSHX key value将值 value 插⼊到列表 key 的表头, 当且仅当 key 存在并且是⼀个列表。
RPUSH key value [value ...]向列表尾部插⼊⼀个或多个值,如果 key不在这会创建⼀个空列表插⼊值
RPUSHX key value将值 value 插⼊到列表 key 的表尾, 当且仅当 key 存在并且是⼀个列表。
LRANGE key start stop 获取列表指定范围内的元素。start 和 end 偏移量都是基于0的下标,偏移量也可以是负数,表⽰偏移量是从list 尾部开始计数,-1 表⽰列表的最后⼀个元素,以此类推。
LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插⼊元素。把 value 插⼊存于 key 的列表中在基准值 pivot 的前⾯或后⾯。当 key 不存在时,这个list会被看作是空list,任何操作都不会发⽣。
LINDEX key index通过索引获取列表中的元素,标是从0开始索引的,负数索引⽤于指定从列表尾部开始索引的元素。LPOP key移除并且返回 key 对应的 list 的第⼀个元素。当 key 不存在时返回 nil。
RPOP key移除并返回存于 key 的 list 的最后⼀个元素。当 key 不存在时返回 nil。LLEN key获取列表长度。如果 key 不存在时就被看作是空list,并且返回长度为 0。
LREM key count value 从列表中删除元素。返回值:返回被移除的元素个数。当 key 不存在的时候,返回 0。count > 0: 从头往尾移除值为 value 的元素。
count < 0: 从尾往头移除值为 value 的元素。
count = 0: 移除所有值为 value 的元素。
LSET key index value通过索引设置列表元素的值
RPOPLPUSH source destination移除列表的最后⼀个元素,并将该元素添加到另⼀个列表并返回2)实例:
127.0.0.1:6379> lpush klist a b c 1 2 3 d (integer) 7
127.0.0.1:6379> RPUSH klist2 7 8 9 e f g (integer) 6
127.0.0.1:6379> lrange klist 0 -1
1) "d"
2) "3"
3) "2"
4) "1"
5) "c"
6) "b"
7) "a"
127.0.0.1:6379> lrange klist2 0 -2
1) "7"
2) "8"
3) "9"
4) "e"
5) "f"
127.0.0.1:6379> linsert klist2 before g "abc" (integer) 7
127.0.0.1:6379> lrange klist2 0 -1
1) "7"
2) "8"
3) "9"
4) "e"
5) "f"
6) "abc"
7) "g"
127.0.0.1:6379> lindex klist2 1
"8"
127.0.0.1:6379> lpop klist2
"7"
127.0.0.1:6379> rpop klist2
"g"
127.0.0.1:6379> lrange klist2 0 -1
1) "8"
2) "9"
3) "e"
4) "f"
5) "abc"
127.0.0.1:6379> lset klist2 0 e
OK
127.0.0.1:6379> lrange klist2 0 -1
1) "e"
2) "9"
3) "e"
4) "f"
5) "abc"
127.0.0.1:6379> lrem klist2 2 e (integer) 2
127.0.0.1:6379> lrange klist2 0 -1
1) "9"
2) "f"
3) "abc"
127.0.0.1:6379> rpoplpush klist2 klist3 "abc"
127.0.0.1:6379> rpoplpush klist2 klist3 "f"
127.0.0.1:6379> lrange klist3 0 -1
1) "f"
2) "abc"
127.0.0.1:6379> lrange klist2 0 -1
1) "9"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。