Redis初步学习整理——第一节五大常用类型

前言

学习Redis,那肯定不得不接触五个基础常用类型,当然初学的小朋友可不要和我一样,以为Redis只有五个基础数据类型,其实Redis 有 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询,只是前五个常用,嗯。。暂时我是这样理解的

一、String

String类型是Redis中最常用的数据类型了,基本上所有用过Redis的小伙伴都会过这个类型,所以也没啥好介绍的,就介绍一下和String相关的命令吧。

127.0.0.1:6379> flushall # 清空数据库内所有数据
OK
127.0.0.1:6379> set name cainiao # 添加key=name,value=cainiao的数据
OK
127.0.0.1:6379> exists name # 检查name是否存在
(integer) 1
127.0.0.1:6379> get name
"cainiao"
127.0.0.1:6379> strlen name # 查看name的长度
(integer) 7
127.0.0.1:6379> append name 110 # 追加字符110
(integer) 10
127.0.0.1:6379> get name
"cainiao110"
127.0.0.1:6379> append age 10 # 当所追加的key不存在的时候,创建一个age
(integer) 2
127.0.0.1:6379> get age
"10"
127.0.0.1:6379> get name
"cainiao"
127.0.0.1:6379> getrange name 1 3 # 截取String串
"ain"
127.0.0.1:6379> getrange name 3 2
""
127.0.0.1:6379> getrange name 3 5
"nia"
127.0.0.1:6379> setrange name 3 111 # 替换字符串
(integer) 7
127.0.0.1:6379> get name
"cai111o"
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 # 批量设置
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> mget k1 k2 k3 # 批量获取
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k3 v3 k4 v4 # 当批量设置时,只要其中一个设置出现问题,则全部失败,这是原子性
(integer) 0
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> getset test 123 # 先获取test,再赋值
(nil)
127.0.0.1:6379> getset test 456
"123"
127.0.0.1:6379> get test
"456"

上面是对Redis String 的赋值、获取、追加等,下面是累加操作

127.0.0.1:6379> set views 10 # 插入 view=10
OK
127.0.0.1:6379> get views
"10"
127.0.0.1:6379> incr views # 累加 10+1=11
(integer) 11
127.0.0.1:6379> get views
"11"
127.0.0.1:6379> decr views # 递减 11-1=10
(integer) 10
127.0.0.1:6379> decr views
(integer) 9
127.0.0.1:6379> get views
"9"
127.0.0.1:6379> incrby views 10 # 这个也是累加,不过是根据具体数值进行累加,如 9+10=19
(integer) 19
127.0.0.1:6379> get views
"19"
127.0.0.1:6379> decrby views 9 # 减少 19-9=10
(integer) 10
127.0.0.1:6379> get views
"10"

设置过期时间、不存在设置

127.0.0.1:6379> setex name 30 cainiao  # set expire 设置name 30秒后过期
OK
127.0.0.1:6379> ttl name
(integer) 28
127.0.0.1:6379> ttl name
(integer) 23
127.0.0.1:6379> ttl name
(integer) 3
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> setnx name cainiao # set if not exist 如果不存在则设置成功
(integer) 1
127.0.0.1:6379> get name
"cainiao"
127.0.0.1:6379> setnx name redis # 因为那么已经存在,所以设置不成功,这个常常用在分布式的场景下
(integer) 0
127.0.0.1:6379> get name
"cainiao"

我认为下面这种方式并不是一个语法上的命令,而是结构上的去存储一个对象的办法,将key存储为user:1:name,就是{对象名}:{id}:{属性名},这样的key结构

127.0.0.1:6379> mset user:1:name cainiao user:1:age 18
OK
127.0.0.1:6379> keys *
1) "user:1:age"
2) "user:1:name"
127.0.0.1:6379> mget user:1:name user:1:age
1) "cainiao"
2) "18"

二、List

list 数据类型,学习过java的肯定是知道List的,类似于java中的list,都是存储一个集合,但是呢,它更像一个链表,如果是了解链表的小朋友,那一定是非常了解的,这就不得不感慨为啥大公司要基础扎实的程序员了,程序都是同的,基础扎实证明学什么都快,不过如果是不了解链表的小伙伴也不要绝望,我认为链表有点类似于下图
Redis初步学习整理——第一节五大常用类型_第1张图片

其实还是链表的样式,只不过被我去掉了指针相应的表示,这个list类型是依次从左至右的顺序,1,2,3,4,5,6…这样的下标方式,LPUSH插入的数据总是在第一个,RPUSH插入的数据总是在最后一个,是一个双向链表

下面就是List涉及到的相应命令了

127.0.0

你可能感兴趣的:(数据库,redis)