一. String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M。
常用指令:
set k1 v1
get k1
del k1 //删除键k1
append k1 abc //在k1的value后追加abc,get k1 结果为v1abc
strlen k1 //获取k1的value字符串的长度
incr //自增,要求值为数字
incrby 5 //自增5
decr //自减
decrby 5 //自减5
getrange:获取指定区间范围内的值,类似between......and的关系从零到负一表示全部
getrange key 0 -1
setrange:设置指定区间范围内的值,格式是setrange key 具体值
setex 键 过期时间(秒) 真实值 //添加键值对,并指定过期时间
setnx k1 100 //如果不存在对应的键,则添加键值对,如果存在,则不添加
mset:同时设置一个或多个 key-value 对 mset k1 v1 k2 v2 k3 v3
mget:获取所有(一个或多个)给定 key 的值。 mget k1 k2 k3
getset:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
简单一句话,先get然后立即set
二. List
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个链表。
常用指令:
lpush list1 1 2 3 4 5 //从左往右插入,
rpush list2 1 2 3 4 5 //从右往左插入,
lrange list1 //从左往右输出
输出结果:5 4 3 2 1
lpop list1 //弹出k1列表最左边第一个值
rpop list1 //弹出k1列表最右边第一个值
lindex list1 1 //按照索引下标获得元素(从上到下)
llen list1 //获得list1长度
lrem list1 2 1 //从左往右删除list1中2个值为1的元素,返回实际删除的个数
lrem list1 0 值 //表示删除全部指定的值
ltrim list1 start stop //截取指定范围的值在赋值给list1
rpoplpush list1 list2 //将list1右边第一个元素弹出,并压入到list2左边
lset list1 2 abc //将list1左边第二个值(从0开始)设置为abc
linsert key before/after 值1 值2 //在值1前或者值1后添加值2
性能总结:
它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了
三. Hash(哈希,类似java里的Map)
Hash(哈希)
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>
常用指令:
hset stu1 name zhangsan //往key值stu1中插入一个键值对
hget stu1 name //获取键为name的值
>zhangsan
hmset stu2 name lisi age 21 //往key值stu2中插入多个键值对
hmget stu2 name age //获取多个值
hgetall stu2 //获取stu2中所有值
hdel stu2 age //删除stu2中键值为age的键值对
hlen stu2 //获取stu2的长度
hexists stu2 gender //判断stu2中是否有gender键
hkeys //获取hash中的所有属性
hvals //获取hash中的所有属性值
hincrby //整形属性值增加
hincrbyfloat //浮点形属性值增加
hsetnx stu2 k1 v1 // 不存在则添加属性,存在则不添加属性
四. Set
Set(集合)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的
不能存放重复内容,无序集合
常用指令:
sadd set1 a b c //如果set1存在,则在set1中添加新成员;如果set1不存在,则创建set1并添加
smembers set1 //查看set1中所有成员
sismember set1 haha //判断haha是否是set1中的成员
scard set1 //查看set1中的元素个数
srem set1 a //删除集合中的元素a
srandmember key 某个整数(随机出几个数)
//从set集合里面随机取出2个
//如果超过最大数量就全部取出,
//如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值。
spop set1 5 //随机弹出5个数
smove set1 set2 a //将set1中的a移动到set2中
差集:sdiff 在第一个set里面而不在后面任何一个set里面的项
交集:sinter 在第一个set里面且在后面的set里面的项
并集:sunion 在第一个set里面或者在其他set里面的 项
五. Zset
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
成员相同的话,后面设置的分数会覆盖前面的分数
常用指令:
zadd zset1 10 a 20 b 25 c 30 d 50 e
zrange zset1 0 -1 withscores //输出zset1中成员和相应分数
zrangebyscore zset1 10 30 withscores //c查询分数在10到30之间,且包含10和30
zrangebyscore zset1 (10 30 withscores //查询10到30之间,不包含10
zrangebyscore zset1 20 +inf withscores //查询大于20的所有,+inf表示无穷
limit作用是返回限制
zrem zset1 b
zcard :获取集合中元素个数
zcount :获取分数区间内元素个数,zcount key 开始分数区间 结束分数区间
zrank: 获取value在zset中的下标位置
zscore:按照值获得对应的分数
zrevrank key values值,作用是逆序获得下标值
zrevrange zset1 0 -1 withscores //逆序输出
zrevrangebyscore key 结束score 开始score