redis(Remote dictionary server):是一个基于键值对(key-value)的NoSQL是一个开源软件 redis的数据是存储在内存当中,可用于好俗缓存,消息队列。redis主要的数据类型有5种; 字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset);
redis的优点 1.速度快 读的速度大约110000/s,写的速度大约85000/s; 2.数据类型多样,可以实现的功能多 3.简单稳定,代码量少,单线程进行工作 4.支持的语言多,perl,python,java,lua等等; 5.持久化 6.主从复制 7.高可用和分布式
缺点:由于数据存储在内存当中,大规模的数据存放在redis中,内存成本太高
set key value [EX seconds] [PX milliseconds] [NX|XX] EX:设置键值对是添加键过期,单位是秒 PX:设置键值对是添加键过期,单位是微秒
NX:表示这个键是新的,是之前不存在的(用于创建键值对) XX:表示这个键是存在的(用于修改键值对的值)
redis全局命令: keys * 查询所有的键 dbsize 统计键的数量总和 exists key 查看这个key是否存在 del key 删除键值对
redis的数据结构类型: 1.字符串 2.hash 3.列表(list) 4.集合(set) 5.有序集合(zset)
键过期:已经存在的键值对设置过期时间:expire key 数字 (单位是秒),当超过过期时间,这个键自动删除; ttl key:查看这个键的过期时间,如果返回的数字大于0表示还有数字秒过期,返回数字为1表示没有给这个键设置过期时间,返回2,表示这个键不存在或已过期
5种数据结构类型; 在redis中,所有的key都是字符串类型的数据 1.字符串(string):指的是值的数据类型是字符串,包含简单的字符串和复杂的字符串,以及数字、图片、声音、视频等这些二进制; 特点:一个key对应一个value。 单个值大小不超过512M; 命令格式: 1.设置字符串:set key value [ex seconds] [px milliseconds] [nx|xx] 2.获取值: get key 3.查询键是否存在:exists key 4.批量设置键值对:mset key value key value… 5.批量获取值:mget key1 key2… 6.计数: (1)incr key :对整数数字有效,给key的值增加1,如果这个键不存在,这个命令会设置这个键并且默认值是从0开始增加1; (2)decr key :自减1,其余和上面保持一致; (3)incrby key 数字:给key加上数字; (4)decrby key 数字:给key减去数字; (5)incrbyfloat 小数 :给key加上小数
7.append key value:给key的值垢面再加上一个字符串; 8.strlen key:显示key对应的value字符串长度 9.getset key newvalue:更新key的值并返回原值; 10.setrange key offset str:更新value某一个位置上的字符串;(如果我们要设置的offset已经超出value的长度,它仍然会把新的字符串添加到下标指定的位置。从value最后一位到指定下标位置全部用“x00”来填充); 11.getrange key start end:获取部分value;
字符串的内部编码:redis 根据key对应的value的长短、类型来判断使用哪种内部编码 int: 8字节长度的整数; embstr: 小于等于39个字节的字符串; raw: 大于39个字节的字符串
object encoding key:查看key对应value的内部编码
哈希(hash): key-value=(filed1,value1 filed2,value2…) key对应的不是一个value,而是一组或几组(filed,value)
hash命令格式 设置键值:hset key field value 成功返回1,不成功返回0
获取filed值: hget key field
删除filed值 hdel key filed1 filed2 .。。
统计field的个数 hlen key
批量设置和获取filed value hmset key filed1 value1 filed2 value2.。。
获取所有filed hkeys key
获取所有filed的值 hvals key
获取所有的filed和value: hgetall key
filed的value如果是整数 hincrby key filed count 给filed添加一个数字,如果filed不存在,会创建filed hincrbyfloat key filed float 给filed添加一个小数;
计算value的字符串长度 hstrlen key filed
hash内部编码: ziplist:当hash类型元素(filed和value的和)个数不小于512个,单个value的长度小于64字节; hashtable(哈希表):不满足ziplist的条件 object encoding key 查看内部编码; 列表list:key-(一组有序排列的元素)a b c d e这一组元素他是有序排列的,所以可以通过下标来获取对应的元素,元素最多不超过2^32-1个;
列表类型 的2个特点:1.元素的有序性 2.元素可重复
列表的命令: 添加元素: lpush key value1 value2 … 从列表的左边添加元素; rpush key value1 value2 …从列表的右边添加元素 linsert key before | after pivot value 在原有的某个元素前边/后边添加一个新的元素
查看列表里的元素: lrange key start end
lindex key index 获取下标为index的元素 获取列表元素的个数: llen key 删除列表元素: lpop key 从列表左边删除一个元素 rpop key 从列表右边删除一个元素 lrem key count value 删除指定元素,count>0表示从列表的左端开始删除,count表示删除这个元素的个数;count<0表示从列表右端开始删除,count的相反数表示删除这个元素的个数,count=0表示删除列表内所有的这个元素,如果想要删除的元素不存在,则不删除。
修改: lset key index newvalue 修改列表index对应的值
阻塞操作: blpop key timeout 从左边删除,如果key里的元素被删光了就会阻塞timeout秒 brpop key timeout 从右边删除,如果key里的元素被删光了就会阻塞timeout秒
列表的内部编码: ziplist:元素个数不超过512,每个元素的长度不超过64字节 linkedist(链表):不满足ziplist条件就会用linkedist
集合(set):集合也是用来保存多个字符串元素的,他的元素不能重复,他的元素是无序的,不能通过下标查看元素,元素不超过512个,每个元素的长度不能超过64字节; 能够进行集合间的运算:交集、差集、并集 {0,1,2,3,4} {1,4,5,7,8} 交集:{1,4} 差集:{0,2,3,5,7,8} 并集:{0,1,2,3,4,5,7,8}
命令: 1、添加元素: sadd key member1 member2… 2.删除元素 srem key member1 member2… 3.统计元素 scard key 4.随机从集合中返回指定个数的元素: srandmember key [count] count 不写默认返回1个 5.随机删除集合中指定个数的元素: spop key [count] 6.查看集合内所有元素 smembers key
集合间的操作: 交集:sinter key1 key2… 差集:sdiff key1 key2… 并集:sunion key1 key2…
差集:key1的元素-key1和key2共同有的元素
myset3 [a b c d e f] myset4 [a b c d i h k] myset3-myset4 [e f] myset4-myset3 [i h k]
集合的内部编码 intest(整数集合):当集合中的元素都是整数且元素个数少于512,redis会使用intest来保存数据 hashtable:
有序集合(zset):和集合一样元素不重复,不同的是它通过给元素加上一个分数(score)来进行排序
命令: 1.添加成员: zadd key score member…
2.统计有序集合元素个数 zcard key
3.获取某个成员的分数 zscore key member
4.获取成员排名 zrank key member 分数由低到高来排 返回数字就是排名(从0开始) zrevrank key member 分数由高到低来排 5.删除成员 zrem key member1 member2.。。
6.增加元素的分数 zincrby key incr-score(增加的分数) member
7.查询指定排名范围的成员: zrange key start end [withscores] 由低到高 zrevrange key start end [withscores] 由高到低
8.查询指定分数范围的成员: zrangebyscore key minscore maxscore [withscores] [limit offset count] 由低到高 zrevrangebyscore key minscore maxscore [withscores] [limit offset count] 由高到低
-inf:无限小 inf:无限大
9.查询指定分数范围的成员个数 zcount key min max
10.删除指定排名范围的成员: zremrangebyrank key start ent
11.删除指定分数范围的成员 zremrangebyscore key min max
集合间的操作: 交集:zinterstore destination key1 key2 [weights num1 num2] [aggregate sum|min|max]
numkeys:交集计算的有序集合的个数 weights:权重
并集:zunionstore destination numkeys key1 key2 [weight num1 num2] [aggregate sum|min|max]
内部编码: ziplist:元素个数2^32-1,单个元素长度不超过64M skiplist(跳跃表):
另开终端
多开redis