Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
1.String(字符串)
这是redis中最基本的数据类型,格式有点像键值对,一个key对应一个value,声明格式如下:
set key value
,例如:set key1 "hello world!"
,此时会生成一个值为world的名为key1的键值对。
我们使用get关键字获得该键值对的值:get key1
,可以看到redis输出了我们之前设定好的值。
getrange
关键字用于获得字符串中的子字符串,getrange的具体格式和参数为getrange key start end
,例如 getrange key1 0 3
获得0到3的字符,注意字符串从0开始。
getset
关键字用于键值对的更新和旧值的输出,具体格式为 getset key value
,例如 getset key1 "goodbye!"
此时key1的值已经变为goodbye,我们使用get查看一下:
发现已经是修改后的值了。
getbit
和setbit
是对于值的二进制码的操作,英文字符1个字节8个二进制位,中文字符2个字节16个二进制位。
例如hello的二进制码(ascii码的二进制格式)为01101000 01100101 01101100 01101100 01101111
getbit
是获取一个键值对中任意一位的二进制码,setbit
则是修改一个键值对中任意一位的二进制码,注意此时的位数是转换为二进制码以后的位数!
mget
可以获取多个键值对的值,如果输入的键名有不存在的,对应的值会返回特殊值nil
其他String的关键字可以去下方网站寻找
String教程
2.Hash(哈希)
hash实际上可以理解为是String字符串的集合,也就是键值对的集合,我们可以在一个hash对象中存储多个键值对。
使用hmset 关键字进行定义,例如hmset key2 field1 "jack" field2 "rose" field3 "tony"
,这样就生成了一个名为key2的hash对象。
使用hget关键字进行值的获取,例如hget key2 field3
,可以获取到key2这个hash中field3键的值,redis输出“tony”
但是hget每次只能获得一个键值对,如果获得多个会报错
hdel
关键字可以对hash对象中的一个或者多个键值对进行删除。例如hdel key2 field1 field2
hexists
关键字用于查看hash对象中是否存在该字段。例如hexists key2 field1
,如果有该字段,redis会返回1,没有会返回0。
hgetall
关键字会返回当前指定hash对象的所有字段。例如hgetall key2
,redis会输出key2这个hash对象拥有的所有字段。
其他关键字可以点击下方网站查看
Hash教程
3.List(列表)
List在逻辑结构上类似栈,采用先进后出的策略。
通过lpush
关键字,创建并压入一个值。
为了更清楚的理解list的逻辑结构,我们多压入几个值。
lpush key3 why
lpush key3 yes
lpush key3 no
lpush key3 safe
lpush key3 dangerous
此时key3这个list中有五个值,分别是why,yes,no,safe,dangerous。
我们使用lrange
关键字输出前5个值lrange key3 0 5
,结果为
我们可以发现,顺序是倒过来的,这样不太直观,我们可以使用另一个关键字lpop,这个关键字可以弹出list对象第一个元素,弹出的意思是获取他的值然后将它从list中删除。
我们输入lpop key3
,结果为
此时我们发现弹出的第一个元素仍然是我们输入的最后一个元素dangerous。
为了体现弹出的特性,我们再使用lrange
关键字输出第一个到第五个元素的输出
此时list中只有4个元素,说明dangerous元素已经被删除。
用图片简单解释一下原理:
此时压入第一个元素why,why位于list的最底部,我们再压入第二个元素yes
可以看到是这样的情况,我们再将后续元素都压入:
然后我们弹出第一个元素,注意,弹出是从list最上方,也就是栈顶弹出。
此时位于最上方的元素是最后压入的元素dangerous,所以弹出元素dangerous。
其他List对象关键字可以点击下方网址查看
List教程
4.Set(集合)
set对象中只能存放String对象
set和list的区别是set对象中不能出现重复的元素,并且是无序的。其余和list较为相似。
使用sadd
关键字可以添加元素
sadd key4 java
sadd key4 c++
sadd key4 c#
sadd key4 python
sadd key4 java
因为之前添加过java这一元素,所以此时最后一次添加不会成功,redis会返回0。
其他Set对象的关键字可以点击下方网址查看
Set教程
5.Sorted Set(有序集合)
sorted set对象与set的区别是set对象是无序的,但是sorted set对象是有序的。他同样具有set的特点——只能存放String对象且不允许重复元素出现。
sorted set对象实现有序排序依赖一个特有的属性——分数(score),分数是一个double类型的值,sorted set对象允许score重复,但是不允许存放对象的值重复。
我们使用zadd
关键字进行对象的插入和更新。例如:
此时我们看最后一次输入的score值为4,但是成员java是重复的,redis返回0。
使用zrange关键字进行输出,通过withscores由分数进行排序。
我们发现,此时java的score变成了4,说明之前的zadd
关键字对java这个对象的score值进行了更新。