> 数据库 > Redis >

三.Redis五大类型及方法详细介绍

1.String类型
 
1.1 简介:
 
1.String类型是Redis的最基本的数据类型,一个Redis中的字符串value最多可以是512M
2.String类型是二进制的,表示Redis的String可以包含任何数据,比如jgp图片或者序列化的对象
3.String的数据结构为简单的动态字符串SDS(Simple Dynamic String)是可以修改的字符串,
  内部结构类似于java的Arraylist
 

 
1.2 常用命令:
 
#查看所有的key
keys *       
 
#添加键值对                      
set key value     
    
#同时设置多个键值对              
mset key1 value key2 value2    
 
#查询对应key的键值对   
get key   
 
#将指定的value追加到key原值的末尾如:(原值为:acb key值为:edf  执行后结果为:abcdef)                          
append key value   
 
#获取key值的长度               
strlen key  
 
#只有key不存在时,才设置key的值为value                      
strnx key value
 
 #获取值的范围(如:0-2)                    
getrange key 0(起始位置) 2(结束位置)
 
#在起始位置后添加相对应的value值 
setrange key 3(起始位置) value
 
#设置过期时间单位为秒       
setex key 20(过期时间) value
 
#用新value换掉对应 key的旧value         
getset key value
 
#同时设置多个键值对,只有key不存在时并且有一个失败则都失败                    
msetnx key1 value key2 value2
 
#将key中储存的数字增1 ,只能对数字值操作,如果为空新增值为1       
incr key
 
 #将key中储存的数字减1 ,只能对数字值操作,如果为空新增值为-1                            
decr key
 
#将key中储存的数字增加相对应的步长值如:(原value值为500,当前步长为20,结果为520)                           
incrby key 步长
 
#将key中储存的数字减少相对应的步长值如:(原value值为500,当前步长为20,结果为480)                     
incrby key 步长                     
 


 
2.List类型(列表)
 
2.1 简介:
 
1.Redis列表是简单的字符串列表,按照顺序插入排序,可以添加一个元素到列表的头部(左边)或者
2.尾部(右边)
3.它的底层实际是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能较差
4.List的数据结构为快速链表quickList
5.首先在列表元素较少的情况下使用一块内存存储,这个结构是ziplist,也即是压缩列表
5.当数据量比较大时才会改成quicklist
 



 
2.2 常用命令:
 
#从左边插入一个或多个值
lpush key1 value1 value2
 
#从右边插入一个或多个值          
rpush key3 value1 value2
 
#从左边取出一个值(值在键在,值光键亡)             
lpop key
 
#从右边取出一个值(值在键在,值光键亡)                              
rpop key
 
#从key1的右边取出一个值插入到key2左边                            
rpoplpush key1 key2
 
#按照下标位置获得对应key的元素(从左到右,0到-1代表取所有的)                   
lrange key 0(1下标位置) -1(2下标位置)
 
#获取对应key对应下标的元素   
lrange key 0(下标位置)
 
#获取key的列表长度                 
llen key
 
#在value后面插入一个newvalue值(是一个单独的value)                              
linsert key after value newvalue
 
#在value前面插入一个newvalue值(是一个单独的value)       
linsert key befor value newvalue
 
#从左边删除n个对应的value值      
lrem key n value
 
#将列表key下标为index的值替换成value                      
lset key index value                 
 


 
3. Set类型(集合)
 
3.1 简介:
 
1.Redis set对外提供的功能与list类似的是一个列表的功能,特殊之处在于set是可以自动排重
  的,当你需要储存一个列表数据,又不需要出现重复的数据时,set是一个很好的选择
2.set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的
3.Redis的Set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加,删
除,查找的复制度都是o(1)
4.Set结构是dict字典,字典是用哈希表实现的
5.java中的HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象Redis
的Set结构也是一样的
 



 
3.2 常用命令:
 
#将一个或多个元素加入到集合key中
sadd key value1 value2
 
#取出key集合的所有值       
smembers key
 
#判断集合key是否含有该value值,有返回1没有返回0                 
simember key value
 
#返回该集合的元素个数           
scard key
 
 #删除集合中的某个元素                    
srem key value value
 
#随机从该集合吐出一个值(值取完key则不存在)        
spop
 
#随机从该集合中取出n个值,不会从集合中删除                         
srandmember key n
 
#把key1集合中的value1从一个集合(key1)移动到另一个集合(key2)            
smove key1 key2 value1
 
#返回两个集合的交集元素       
sinter key1 key2
 
#返回两个并合的交集元素             
sunion key1 key2
 
#返回两个集合的差集元素             
sdiff key1 key2              
 

 
4. Hash类型(哈希)
 
4.1 简介:
 
1.Redis hash 是一个键值对集合
2.Redis hash 是一个String类型的field和value的映射表,hash特别适合用于储存对象类似
  java里面的Map<String,Object>
3.Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表).当field-value
  长度较短且个数较少时,使用ziplist否则使用hashtable
 


 
4.2 常用命令:
 
#给key集合中的field赋键值value
hset key field value
 
#从key集合field取出value               
hget key field value
 
#批量设置值               
hmset key field value1 value2
 
#查看哈希表key中是否存在该field      
hexists key field
 
#列出该hash集合的所有field                  
hkeys key
 
#列出该hash集合的所有value                          
hvals key
 
#给哈希表key中的域field的值增加上增量2如:(field为valeu为2,执行后的value结果为4)                           
hincrby key field 2
 
#将哈希表中key中的域field的值设置为value(field的value不存在时才生效)              
hsetnx key field value             
 


 
5. Zset类型(有序集合)
 
5.1 简介:
 
1.Redis有序集合的zset与普通的set非常相似是一个没有重复元素的字符串集合
2.不同之处,有序集合的每个成员都关联了一个评分(score),被用来按照从最低分到最高分的方式
  排序集合中的成员,集合的成员是唯一的但是评分是可以重复的
3.因为元素是有序的,可以很快的根据评分(score)或者次序(position)来获取一个范围的元素
4.访问有序集合的中间元素也是非常快的
5.zset底层使用了两个数据结构:
   (1):hash,hash的作用就是关联元素value和权重scope,保障元素value的唯一性,可以通过value找到对应的scope值
   (2):跳跃表,跳跃表的目的在于给元素的value排序,根据scope的范围获取元素列表
 


 
5.2 常用命令:
 
#将一个或多个元素及score值加入到有序集合key当中
zadd key score1 value1 score2 value
 
#返回有序key中下标在star与stop之间的元素    
zrange key star stop
 
#返回有序key中下标在star与stop之间的元素和score(评分)                   
zrange key star stop withscores
 
#返回有序集合key中,所有scope值介于min和max之间的成员(包括等于min与max的)        
zrangebyscores key min max
 
#返回有序集合key中,所有scope值介于min和max之间的成员和评分(scope)(包括等于min与max的)             
zrangebyscores key min max withscores
 
#改为同大到小排序  
zrevrangebyscores key max min
 
#为元素的scope增n           
zincrby key n value
 
#删除集合中key指定的value元素                    
zrem key value
 
#统计该集合下,min与max内的元素个数                        
zcount key min/max  
 
#返回改值在集合中的排名,从0开始                   
zrank key value                       
 


(责任编辑:IT)