Redis五大数据类型

1.Redis五大基本类型

1.官方说明

Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数
据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询和流
的地理空间索引。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过
Redis Sentinel和Redis Cluster自动分区提供了高可用性。

2.String字符串类型

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

String类型是二进制安全的,意思是redis的String可以包含任何数据,比如jpg图片或者序列化对象

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

3.Hash哈希,类似java中的Map

Redis hash是一个键值对集合

Redis hash是一个String类型的filed和value的映射表,hash特别适合用于存储对象

Redis hash类似java里面的Map<String,Object>

4.List列表

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

Redis列表的底层实际是个链表

5.Set集合

Redis的Set集合是String的无序集合,通过HashTable实现的

6.Zset有序集合

Redis Zset和set一样,是String类型的集合,不允许重复的成员

不同的是每个元素都会关联一个double类型的分数

Redis是通过分数来为集合中的成员进行性从小到大的排序,Zset的成员是唯一的,但是分数Sorce确可以重复

2.Redis键(Key)

 1 [root@iZ2zeg6rjsjbfv9ibttfdnZ bin]# redis-server dzredis/redis.conf  #####连接redis服务器
 2 11705:C 19 Aug 2020 15:04:07.798 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
 3 11705:C 19 Aug 2020 15:04:07.798 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=11705, just started
 4 11705:C 19 Aug 2020 15:04:07.798 # Configuration loaded
 5 [root@iZ2zeg6rjsjbfv9ibttfdnZ bin]# redis-cli -p 6379   #####连接redis客户端 端口号6379
 6 127.0.0.1:6379> keys *     ######查看所有的key
 7 (empty array)
 8 127.0.0.1:6379> set name dz    ######set设置key和value值
 9 OK
10 127.0.0.1:6379> get name         ########根据key值获取value值
11 "dz"
12 127.0.0.1:6379> exists name     ######exist key的名字,判断这个key是否存在
13 (integer) 1
14 127.0.0.1:6379> exists name1
15 (integer) 0
16 127.0.0.1:6379> move name 1  ######当前库没有了,被移除了
17 (integer) 1
18 127.0.0.1:6379> keys *
19 (empty array)
20 127.0.0.1:6379> set name dz
21 OK
22 127.0.0.1:6379> expire name 10  #####expire key秒钟:为给定的key设置生存时间,当key过期时,他就会自动删除
23 (integer) 1
24 127.0.0.1:6379> ttl name     ########ttl key查看还有多少秒过期,-1表示永不过期,-2表示已经过期
25 (integer) 8
26 127.0.0.1:6379> ttl name
27 (integer) 6
28 127.0.0.1:6379> ttl name
29 (integer) 5
30 127.0.0.1:6379> ttl name
31 (integer) 4
32 127.0.0.1:6379> ttl name
33 (integer) 2
34 127.0.0.1:6379> ttl name
35 (integer) 1
36 127.0.0.1:6379> ttl name  #########生存时间0
37 (integer) 0
38 127.0.0.1:6379> ttl name
39 (integer) -2
40 127.0.0.1:6379> ttl name
41 (integer) -2
42 127.0.0.1:6379> keys *
43 (empty array)
44 127.0.0.1:6379> set name dz
45 OK
46 127.0.0.1:6379> get name
47 "dz"
48 127.0.0.1:6379> type name     ###########查看key是什么类型
49 string

 

3.字符串Sring

单值单value

 1 ##################################
 2 #### set get del append strlen####
 3 ##################################
 4 127.0.0.1:6379> set key1 value1   ####设置值
 5 OK
 6 127.0.0.1:6379> get key1       ########获取值
 7 "value1"
 8 127.0.0.1:6379> del key1    #######删除值
 9 (integer) 1
10 127.0.0.1:6379> keys *    ##########查看全部的key
11 (empty array)
12 127.0.0.1:6379> exists key1    ########确定key1不存在
13 (integer) 0
14 127.0.0.1:6379> append key1 hello        #######对不存在的key进行append拼接,等同于set key1 hello
15 (integer) 5                     #########字符长度
16 127.0.0.1:6379> append key1 23333       #########对存在的字符串进行拼接
17 (integer) 10            #########字符长度从5变成了10
18 127.0.0.1:6379> get key1
19 "hello23333"
20 127.0.0.1:6379> strlen key1    #########获取字符串的长度
21 (integer) 10
 1 ############################################################
 2 #  incr、decr类型一定要是数字才可以,进行自增和自减操作,+1,-1
 3 ############################################################
 4 # incrby,decrby  命令将key中存储的数字加上或者减去指定的增(减)量值
 5 ############################################################
 6 ############################################################
 7 127.0.0.1:6379> set view 0
 8 OK
 9 127.0.0.1:6379> incr view    #####浏览+1
10 (integer) 1
11 127.0.0.1:6379> incr view        
12 (integer) 2
13 127.0.0.1:6379> decr view        ###########浏览-1
14 (integer) 1
15 127.0.0.1:6379> incrby view 10   ########+10
16 (integer) 11
17 127.0.0.1:6379> decrby view 10    ########-10
18 (integer) 1
 1 ###################################################################
 2 #range范围
 3 #getrange获取指定区间范围内的值,类似between...and的关系,从零到-1表示全部
 4 ###################################################################
 5 127.0.0.1:6379> set key abcd123456
 6 OK
 7 127.0.0.1:6379> getrange key 0 -1    ########获取全部的值
 8 "abcd123456"
 9 127.0.0.1:6379> getrange key 0 2  ##########截取部分字符串
10 "abc"
 1 # ===================================
 2 # setrange 设置指定区间范围内的值,格式是setrange key值 具体值 # 
 3 #====================================
 4 redis 127.0.0.1:6379> set key2 abcd123456
 5 OK
 6 redis 127.0.0.1:6379> get key2
 7 "abcd123456"
 8 redis 127.0.0.1:6379> SETRANGE key2 1 x
 9 (integer) 10
10 redis 127.0.0.1:6379> get key2
11 "axcd123456"
 1 ##setex(set with expire)键秒值
 2 redis 127.0.0.1:6379> setex key3 60 expire   ##设置过期时间
 3 OK
 4 redis 127.0.0.1:6379> ttl key3   ###查看剩余的时间
 5 (integer) 54
 6 redis 127.0.0.1:6379> ttl key3
 7 (integer) 53
 8 redis 127.0.0.1:6379> ttl key3
 9 (integer) 51
10 ###setnx(set if not exist)
11 redis 127.0.0.1:6379> setnx mykey "redis"  ###如果不存在就设置
12 (integer) 1                                    #####成功返回1
13 redis 127.0.0.1:6379> setnx mykey "dz"    ####如果存在就设置,失败返回0
14 (integer) 0
15 redis 127.0.0.1:6379> get mykey
16 "redis"
 1 redis 127.0.0.1:6379> flushdb      ###清空数据库
 2 OK
 3 redis 127.0.0.1:6379> keys *       
 4 (empty list or set)
 5 redis 127.0.0.1:6379> mset k10 v10 k11 v11 k12 v12     
 6 OK         ###mset命令用于同时设置一个或多个key-value对
 7 redis 127.0.0.1:6379> keys *
 8 1) "k10"
 9 2) "k11"
10 3) "k12"
11 redis 127.0.0.1:6379> mget k10 k11 k12 k13   ###mget命令返回所有(一个或多个)给定key值
12 1) "v10"
13 2) "v11"
14 3) "v12"
15 4) (nil)     ####如果给定的key里面,有某个key不存在,那么这个key返回特殊值为nil
16 redis 127.0.0.1:6379> msetnx k10 v10 k15 v15  ###原子操作
17 (integer) 0   ####msetnx当所有key都设置成功,返回1,如果所有给定key都设置失败(至少有一个key已存在),那么返回0
18 redis 127.0.0.1:6379> get k15
19 (nil)

 缓存对象

1 redis 127.0.0.1:6379> mset user:1:name dz user:1:age 2
2 OK           
3 redis 127.0.0.1:6379> mget user:1:name user:1:age
4 1) "dz"
5 2) "2"

 getset(先get在set)

redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> getset db mongodb  ####没有旧值,返回nil
(nil)
redis 127.0.0.1:6379> get db
"mongodb"
redis 127.0.0.1:6379> getset db redis       #####有旧值就返回旧值
"mongodb"
redis 127.0.0.1:6379> get db
"redis"

 

String数据结构是简单的key-value类型,value其实不仅可以使String,也可以使数字

常规key-value缓存应用

常规计数:微博数,粉丝数等

4.列表List

单值多Value

Lpush:将一个或多个值插入到列表头部(左)

rpush:将一个或多个值插入到列表尾部(右)

lrange:返回列表中制定区间内的元素,区间以偏移量start 和 end 指定

其中0表示第一个元素,1表示第二个元素,-1表示最后一个元素,-2表示列表的倒数第二个元素,以此类推

 1 redis 127.0.0.1:6379> flushdb
 2 OK
 3 redis 127.0.0.1:6379> LPUSH list "one"
 4 (integer) 1
 5 redis 127.0.0.1:6379> LPUSH list "two"
 6 (integer) 2
 7 redis 127.0.0.1:6379> RPUSH list "right"
 8 (integer) 3
 9 redis 127.0.0.1:6379> Lrange list 0 -1
10 1) "two"
11 2) "one"
12 3) "right"
13 redis 127.0.0.1:6379> Lrange list 0 1
14 1) "two"
15 2) "one"

 

lpop命令用于移除并返回列表的第一个元素。

当列表key不存在时,返回nil

rpop移除列表的最后一个元素,返回值为移除的元素

1 redis 127.0.0.1:6379> lpop list
2 "two"     ####移除的元素值为two
3 redis 127.0.0.1:6379> rpop list
4 "right"
5 redis 127.0.0.1:6379> lrange list 0 -1
6 1) "one"

 

lindex按照索引下标获取元素(-1代表最后一个,0代表是第一个)

1 redis 127.0.0.1:6379> lindex list 1
2 (nil)
3 redis 127.0.0.1:6379> lindex list 0
4 "one"
5 redis 127.0.0.1:6379> lindex list -1
6 "one"

 

llen用于返回列表的长度

 1 redis 127.0.0.1:6379> flushdb
 2 OK
 3 redis 127.0.0.1:6379> lpush list "one"
 4 (integer) 1
 5 redis 127.0.0.1:6379> lpush list "two"
 6 (integer) 2
 7 redis 127.0.0.1:6379> lpush list "three"
 8 (integer) 3
 9 redis 127.0.0.1:6379> llen list       ####返回列表长度
10 (integer) 3

 

 

1212121

posted @ 2020-08-19 15:37  罗晓峥  阅读(344)  评论(0编辑  收藏  举报