Redis的五大数据类型:String(字符串),hash(哈希,类似java里的Map),list(列表),set(集合),zset(sorted set:有序集合)。
String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
操作命令
- set/get/del/append/strlen
- Incr/decr/incrby/decrby 一定要是数字才能进行加减(increase,加;decrease,减)
- getrange/setrange getrange:获取指定区间范围内的值,类似between......and的关系,从零到负一表示全部
setrange设置指定区间范围内的值,格式是SETRANGE key offset value 用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。(range:范围) - setex(set with expire)键秒值/setnx(set if not exist) setex:设置带过期时间的key,动态设置。setex 键 秒值 真实值 。setnx:只有在 key 不存在时设置 key 的值。
- mset/mget/msetnx mset:同时设置一个或多个 key-value 对。mget:获取所有(一个或多个)给定 key 的值。msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
-
getset(先get再set) 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。简单一句话,先get然后立即set
Hash(哈希)
Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>
操作命令
-
hset/hget/hmset/hmget/hgetall/hdel
-
hlen 元素个数
-
hexists key field 判断在key里面的某个值的key是否存在
-
hkeys/hvals 获取全部key/value
-
hincrby/hincrbyfloat 一定要是数字才能进行加减(increase,加;decrease,减)
-
hsetnx 不存在赋值,存在不生效。
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个链表(有序,有重复)
操作命令
- lpush/rpush/lrange lpush/rpush存值 , lrange 取值
- lpop/rpop 一次只弹出一个值 ,出栈之后list中就没了
- lindex,按照索引下标获得元素(从上到下)
- llen
- lrem key n v1 删N个value, 从left往right删除n个值等于v1的元素,返回的值为实际删除的数量,
LREM list3 0 v1,表示删除全部给定的值。零个就是全部值 - ltrim key 开始index 结束index,截取指定范围的值后再赋值给key
- rpoplpush 源列表 目的列表 从list01 中弹出一个值放到lsit02中
- lset key index value
- linsert key before/after v1 v2 在v1的前面添加v2
list性能小结:list是一个字符串链表,left、right都可以插入添加;如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
Set(集合)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的(无序,无重复)。
操作命令
- sadd/smembers/sismember sadd 存值 ,smembers取值,sismember判断set是否存在该值
- scard,获取集合里面的元素个数
- srem key value 删除集合中元素
-
srandmember key n(整数) 从set集合里面随机取出n个元素, 如果超过最大数量就全部取出,如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值。
-
spop key 随机出栈(出栈之后set中的该值就没了)
-
smove key1 key2 在key1里某个值 作用是将key1里的某个值赋给key2
-
数学集合类,差集:sdiff,交集:sinter,并集:sunion
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
操作命令
- zadd/zrange 在set基础上,加一个score值。set是k1 v1 v2 v3,zset是k1 score1 v1 score2 v2
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT index count]
- zrem key 某score下对应的value值,作用是删除元素
- zcard :获取集合中元素个数;zcount :获取分数区间内元素个数;zrank: 获取value在zset中的下标位置; zscore:按照值获得对应的分数
- zrevrank key values值,作用是逆序获得下标值
- zrevrange
- zrevrangebyscore key 结束score 开始score