Redis五大基础数据类型的操作

Redis

一、Redis概况及使用场景

1.1 Redis概念

​ Redis(Remote Dictionary Server),即远程字典服务,是一个开源用C语言编写、支持网络、基于内存的可持久化的NoSQL数据库,它基于Key-Value存储数据,并提供多种语言API。

1.2 Redis基本数据类型

​ Redis是典型的Key-Value数据库,为了保证快速访问数据,用一张全局的哈希表存储数据,Key为String类型,Value有五种基本的数据结构:String、Hash、List、Set、SortedSet。

Redis五大基础数据类型的操作_第1张图片

1.3 使用场景
  • 由于String数据类型是二进制安全,所谓的二进制安全,是数据以二进制格式传输时,不能被随意篡改、破译等。可以用于存放视频、图片,当value为数字时,也可以用作计数器,比如统计CSDN某一文章的阅读数量。
  • Redis中的数据结构丰富,Sorted Set类型,作为有序的集合。可以做范围查找,用于排行榜应用,比如CSDN实时资讯热榜排名。
  • Redis是基于内存的数据库,查询速度快,效率高,可以用于高速缓存。

二、Redis基本数据类型的使用

​ 前面已经提到Redis具有五种基本数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、SortedSet(有序集合),下面示意它们的使用:

​ 常用命令:查看key的生存时间(ttl)、获取所有的Key(keys *)、删除key命令(Del)

2.1 String类数据类型的使用

​ 增:添加数据(set)、添加多个数据(mset)、添加数据时指定过期时间(setex)

​ 删:删除数据(del)

​ 改:追加字符串(append)、自增(incr)、自减(decr)、增加指定值(incrby)

​ 查:获取数据(get)、查询多个数据(mget) 、strlen返回字符串长度(strlen)

127.0.0.1:6379> set name Jacob #创建一个key为‘name’,value为‘Jacob’的数据
OK #成功,返回OK
127.0.0.1:6379> get name #获取key为‘name’数据的value值
"Jacob" #返回结果
127.0.0.1:6379> strlen name #获取key为‘name’数据的长度
(integer) 5
127.0.0.1:6379> append name Tan #追加key为‘name’数据,value值加上‘Tan’
(integer) 8
127.0.0.1:6379> get name
"JacobTan"
127.0.0.1:6379> set num 0 #设置key为‘num’,value为‘0’的数据
OK
127.0.0.1:6379> get num	#获取key为‘num’的数据,它的value值
"0"
127.0.0.1:6379> incr num #自增key为‘num’的数据,每次加1
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> decr num #自减key为‘num’的数据
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incrby num 10 #增加key为‘num’数据的value值,每次加10
(integer) 11
127.0.0.1:6379> get num
"11"
127.0.0.1:6379> ttl num #查看key为‘num’的数据的过期时间,默认数据永不过期。
(integer) -1 #-1代表永不过期
127.0.0.1:6379> setex university 5 NEU #设置key为‘university’,value为‘NEU’的数据过期时间为5秒
OK
127.0.0.1:6379> keys * #查看redis的所有key值
1) "num"
2) "university"
3) "name"
127.0.0.1:6379> keys *
1) "num"
2) "name"
127.0.0.1:6379> mset age 24 province JX #mset命令可以一次设置多个key-value数据
OK
127.0.0.1:6379> mget age province #mget可以一次性获取多个key对应的value
1) "24"
2) "JX"
127.0.0.1:6379> keys *
1) "num"
2) "province"
3) "name"
4) "age"

注意:

  • incr/decr等自增自减命令,只适用于value为Integer类型的数据,否则会报错。
  • String类型时最常用的数据类型,value值表面上是字符串,实际上可以为字符串、整型和浮点型,Redis能够自动识别。
2.2 Hash数据类型的使用

​ 增:添加数据(hset)、添加多条数据(hmset)、不存在元素则添加(hsetnx)

​ 删:删除特定的key对应的value(hdel)

​ 改:给特定的key值对应value增加数值(hincrby)

​ 查:获取hash的所有字段(hgetall)、获取特定的key值对应value(hget)、获取hash表长度(hlen)、查看hash中是否存在特定的key值对应的数据(hexists)、查看hash表所有key值(hkeys)、查看hash表所有value值(hvals)。

127.0.0.1:6379> hmset myhash name Jacob age 20 province LN country China #hmset 是创建key为‘myhash’的数据,value为hash表,name,age,province和country为hash表中的key,后面跟着的是对应的value值。
OK 
127.0.0.1:6379> hgetall myhash #获取key为‘myhash’的所有字段,包括key和value
1) "name"
2) "Jacob"
3) "age"
4) "20"
5) "province"
6) "LN"
7) "country"
8) "China"
127.0.0.1:6379> hget myhash name #获取myhash中key为‘name’的value
"Jacob"
127.0.0.1:6379> hdel myhash del country #删除myhash中key为‘country’的数据
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "name"
2) "Jacob"
3) "age"
4) "20"
5) "province"
6) "LN"
127.0.0.1:6379> hlen myhash #获取myhash这个hash表的数据长度
(integer) 3
127.0.0.1:6379> hexists myhash name #判断myhash中是否存在key为‘name’的数据
(integer) 1
127.0.0.1:6379> hkeys myhash #查看myhash中的所有key值
1) "name"
2) "age"
3) "province"
127.0.0.1:6379> hvals myhash #查看myhash中的所有value值
1) "Jacob"
2) "20"
3) "LN"
127.0.0.1:6379> hincrby myhash age 4 #myhash中的key为‘age’的数据value增加4
(integer) 24
127.0.0.1:6379> hsetnx myhash name tt #myhash中如果存在‘name’字段取消,不存在则执行添加命令
(integer) 0
127.0.0.1:6379> hgetall myhash
1) "name"
2) "Jacob"
3) "age"
4) "24"
5) "province"
6) "LN"

注意:由于Hash表的特殊性,它适合存储对象类数据。

2.3 List数据类型的使用

增:左增 (lpush)、 右增(rpush)、前插入(linsert key before pivot insertValue)、后插入(linsert key after pivot insertValue)、获取最后元素加入新的列表(rpoplpush oldList newList)

删:按值删除 (lrem key count value)

改:更改值(lset key index newValue)

查:按索引范围查 (lrange key start stop) 、按索引查(lindex key index)、从左边弹出(lpop)、从右边弹出(rpop)

长度相关:获取长度(llen)、按索引截取保留部分(ltrim key start stop)

127.0.0.1:6379> lpush  mylist 1,2,3,4,5 #创建一个key为mylist的列表,左增一个元素
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1 #查看mylist的所有元素
1) "1,2,3,4,5"
127.0.0.1:6379> rpush mylist -1 #在mylist中,右增一个元素-1
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "1,2,3,4,5"
2) "-1"
127.0.0.1:6379> lpush mylist -2
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "-2"
2) "1,2,3,4,5"
3) "-1"
127.0.0.1:6379> lpop mylist #弹出mylist中左边第一个元素
"-2"
127.0.0.1:6379> lrange mylist 0 -1
1) "1,2,3,4,5"
2) "-1"
127.0.0.1:6379> rpop mylist #弹出mylist右边第一个元素
"-1"
127.0.0.1:6379> lrange mylist 0 -1
1) "1,2,3,4,5"
127.0.0.1:6379> lindex mylist 0 #获取mylist中索引0的数据
"1,2,3,4,5"
127.0.0.1:6379> llen mylist #获取mylist的长度
(integer) 1
127.0.0.1:6379> lrem mylist 1 1,2,3,4,5 #移除mylist中‘1,2,3,4,5’元素1个
(integer) 1
127.0.0.1:6379> lrange mylist 0 -1
(empty list or set)
127.0.0.1:6379> lpush mylist 1 2 3 4 5 #在mylist中左增多个元素
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> ltrim mylist 1 2 #截取mylist中索引1到2的部分保留
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
2) "3"
127.0.0.1:6379> lset mylist 1 5 #更改mylist中索引1位置的元素为5
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
2) "5"
127.0.0.1:6379> rpoplpush mylist mylist2 #将mylist中最后一个元素加入一个新的列表mylist2中
"5"
127.0.0.1:6379> lrange mylist2 0 -1
1) "5"
127.0.0.1:6379> lrange mylist 0 -1
1) "4"
127.0.0.1:6379> linsert mylist before 4 3 #在mylist的元素值为4前插入3
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "3"
2) "4"
127.0.0.1:6379> linsert mylist after 4 5 #在mylist的元素值为4后插入元素5
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "3"
2) "4"
3) "5"

注意:

  • 添加多个数据时,数据之间用空格分开。
  • list数据类型相当于双端队列。
2.4 Set数据类型的使用

​ 增:添加元素(zadd)

​ 删:删除指定元素(srem key data)、随机删除元素(spop)

​ 改:移动指定元素到新集合(smove oldSet newSet data)

​ 查:查看所有元素(smembers)、查看某一元素是否存在(sismember)、查看长度(scard)

​ 集合操作:差集(sdiff set1 set2)、交集(sinter set1 set2)、并集(sunion set1 set2)

127.0.0.1:6379> sadd myset a b c c d #创建一个key为myset的集合,添加a,b,c,d四个元素
(integer) 4
127.0.0.1:6379> smembers myset #查看myset中的元素
1) "a"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> sismember myset a #查看a是否在myset中
(integer) 1
127.0.0.1:6379> scard myset #查看myset的长度
(integer) 4
127.0.0.1:6379> srem myset a #移除myset中的元素a
(integer) 1
127.0.0.1:6379> smembers myset 
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> srandmember myset #随机获取myset中的一个元素
"d"
127.0.0.1:6379> srandmember myset
"d"
127.0.0.1:6379> srandmember myset
"c"
127.0.0.1:6379> 
127.0.0.1:6379> spop myset #随机删除myset中的元素
"d"
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
127.0.0.1:6379> smove myset myset1 c #将元素c从myset中移动到myset1中
(integer) 1
127.0.0.1:6379> smembers myset1
1) "c"
127.0.0.1:6379> keys *
 1) "num"
 2) "province"
 3) "num1"
 4) "myhash"
 5) "myset1"
 6) "age"
 7) "lpush"
 8) "myset"
 9) "mylist2"
10) "name"
11) "mylist"
127.0.0.1:6379> sadd myset a c d e
(integer) 4
127.0.0.1:6379> smembers myset
1) "a"
2) "d"
3) "c"
4) "b"
5) "e"
127.0.0.1:6379> sadd myset1 a c e f b
(integer) 4
127.0.0.1:6379> smembers myset1
1) "f"
2) "e"
3) "a"
4) "c"
5) "b"
127.0.0.1:6379> sdiff myset myset1 #求解myset和myset1的差集
1) "d"
127.0.0.1:6379> sdiff myset1 myset
1) "f"
127.0.0.1:6379> sinter myset myset1 #求解myset与myset1之间的交集
1) "e"
2) "a"
3) "b"
4) "c"
127.0.0.1:6379> sunion myset myset1 #求解myset与myset1之间的并集
1) "f"
2) "e"
3) "a"
4) "d"
5) "b"
6) "c"

注意:

  • set数据类型集合操作非常方便,可以求交集、并集和差集
  • A与B的差集与B与A的差集不一定相同,交集可用于求共同关注等需求
2.5 zSet数据类型的使用

​ 增:添加数据(zadd)

​ 删:删除数据(zrem)

​ 查: 按从大到小的顺序(zrevrange)排列、按从小到大的顺序排列(zrangebyscore)、查看元素个数(zcard)、查询值在指定区间的个数(zcount key min max)

127.0.0.1:6379> zadd myzset 1 one 2 two 3 three #添加一个key为myzset的有序集合,one赋予1分,two赋予2分,three赋予3分
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1 #查看myzset的所有元素
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrangebyscore myzset -inf +inf #让myzset中元素从小到大排序
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrange myzset 0 -1 
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrevrange myzset 0 -1 #myzset中元素从大到小排序
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> zrem myzset one #移除myzset中的元素one
(integer) 1
127.0.0.1:6379> zrevrange myzset 0 -1
1) "three"
2) "two"
127.0.0.1:6379> zcard myzset #统计myzset中元素的个数
(integer) 2
127.0.0.1:6379> zcount myzset 1 1 #统计myzset中值为1的个数
(integer) 0
127.0.0.1:6379> zcount myzset 1 2
(integer) 1

注意:

  • 添加数据时赋予元素一定的分数
  • 可用于元素的排序

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