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