Redis基础概念
Redis是单进程的
- redis是单进程模型来处理客户端请求的,对读写等时间的响应是通过对Linux系统中的epoll函数的包装来做到的,redis的实际处理速度完全依靠主进程的执行效率
- Epoll是Linux内核为处理大批量文件描述符而做了改进的epoll,是Linux下多路复用IO接口select/poll的增强版,他能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
基础知识,redis命令知识tab自动补全
- redis默认有16个数据库,下标是0-15,可以通过
select 下标来选择当前数据库,该信息可以通过查看redis的配置文件redis.conf来查看 Dbsize查看当前数据库的key的数量FLUSHDB清空当前数据库的key,FLUSHALL清空所有数据库的key(不要用!!)
Redis数据类型
Redis的五大数据类型
String(字符串)
- String是redis最基本的类型,可以理解与memcached一模一样的类型,一个key对应一个value
- String类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片和序列化的对象
- String类型是redis最基本的类型,一个redis中字符串的value最多可以是512M
Hash(hash,类似于Java中的map)
- redis中的Hash是一个键值对集合
- redis中Hash是一个string类型的filed和value的映射表,Hash特别适合存储对象,类似于Java中的Map<String,Object>
List(列表)
- redis列表是简单的字符串列表,按照插入顺序排序,可以在列表的头部或者尾部添加元素,它的底层实际上是一个链表
Set(集合)
- redis的Set是string类型的无序不可重复集合,是通过hashtable来实现的
Zset和Set(有序集合)
- redis的Zset和Set一样也是string类型元素的集合,且元素不可重复
- 不同的是,每个元素都会关联一个double类型的分数,redis正是通过这些分数来为集合中的成员进行从小到大的排序,Zset的成员是唯一的,但分数(Score)却可以重复
Redis的常见数据类型操作命令
常见的常见数据类型及案例
key
keys *查看当前数据库的所有keyexists key的名字判断某个key是否存在move key db将某个key移至目标db,当前bd就不保存该key了expire key 秒钟为给定的key设置过期时间ttl key查看还有多少秒过期,-1表示永不过期,-2表示已经过期(移除内存系统)
String(字符串)
第一组:
set key value为key赋值valueget key获取key的值del key删除keyappend key value在key的值后面再加上valuestrlen key获取key的value字符串的长度
第二组
incr keykey的值每次自增1decr keykey的值每次自减1incrby key valuekey的值每次增加valuedecrby key valuekey的值每次减少value
第三组
getrange key start stop获取key指定区间范围的值,类似于between...and...的关系,0 -1是获取全部数据setrange key index value在key的第index+1位后值替代为为value的字符串
第四组
setex key value 秒值(set with expire)设置key的值为value并且设置key的过期时间setnx key value(set if not exit)如果当前的key已存在则该指令无效,如果不存在则创建
第五组
mset k1 v1 k2 v2...多组key赋值mget k1 k2 ...获取多组key的值msetnx k1 v1 k2 v2...多组key赋值,若有已经存在的key则全部赋值失败
List(列表)-- 单值多value
第一组
lpush key v1 v2 v3...从列表key的头插入数据v1 v2 v3...(数据输出的顺序与输入顺序相反)rpush key v1 v2 v3...从列表key的尾插入数据v1 v2 v3...(数据输出的顺序与输入顺序相同)lrange key start stop获取列表key指定区间范围的值,0 -1是获取全部数据
第二组
lpop key从列表key的头取出一个数据rpop key从列表key的尾取出一个数据
第三组
lindex key index获取下标为index的数据
第四组
llen key获取key的数据长度
第五组
lrem key N value删除key中N个值value的数据
第六组
ltrim key start stop截取指定范围的值后再将截取的值赋给key
第七组
rpoplpush key1 key2将key1中的尾部数据取出压到key2的头部
第八组
lset key index value将key中下标为index的值改为value
第九组
linsert key before/after value1 value2在key的value1值前面/后面插入值value2
Set(集合)
第一组
sadd key v1 v2 v3...将不重复的值v1 v2...赋值给集合keysmembers key获取集合key的值sismember key value判断集合set是否包含值为value的数据,若包含则返回1,不包含则返回0
第二组
scard key获取集合内的元素个数
第三组
srem key value删除集合中的元素srandmember key N在集合key中随机获取N个值(注意不是取出数据)spop key N随机取出N个数据smove key1 key1 key1中的value将key1中的value取出并赋值给key2
第四组(数学集合类)
sdiff key1 key1差集,只在key1内,不在key2内的元素sinter key1 key1交集sunion key1 key1并集
Hash(重要!!)-- KV模式不变,但V是一个键值对
第一组
hset key filed[key value]赋值hget key filed[key]取值hmset key filed1[key1 key2...] filed2[key value]...批量赋值hmget key filed[key1 key2 ...]批量取值hgetall key获取key的全部键值对hdel key filed删除
第二组
hlen key获取hash的长度
第三组
hexists key filed[key]判断filed是否存在,0表示不存在,1表示存在
第四组
hkeys key获取key的所有键-keyhvals key获取key的所有值-value
第五组
hincrby key filed incrementkey的filed值增加incrementhincrbyfloat key filed incrementkey的filed值增加increment
Zset(有序集合)
注: Zset是在set基础上,加一个score值,set是key v1,v2,v3...,Zset是key socre1 v1,score2 v2,score3 v3...
第一组
zadd key socre1 v1,score2 v2,score3 v3...赋值zrange key start stop(withscores)获取指定范围内的值,加withscores就会带上分数,不加就只显示value -
第二组
zrangebyscore key start_score stop_score获取score的范围是[start_score,stop_score]的数,数字前面加(则表示不包含,limit m n的含义是从截取结果的第m个开始选n个
第三组
zrem key value删除元素
第四组
zcard key统计key中元素的个数zcount key min max统计key中在范围[min,max]中的元素个数zrank key value获取key中value对应的下标
第五组
zrevrange key start stop逆序获得范围内的元素
第六组
zrevrank key value逆序获得下标值