Redis基础概念和数据类型

84 阅读6分钟

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的常见数据类型操作命令

手册:redisdoc.com/

常见的常见数据类型及案例

key

  • keys * 查看当前数据库的所有key
  • exists key的名字 判断某个key是否存在
  • move key db 将某个key移至目标db,当前bd就不保存该key了
  • expire key 秒钟 为给定的key设置过期时间
  • ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已经过期(移除内存系统)

String(字符串)

第一组:

  • set key value 为key赋值value
  • get key 获取key的值
  • del key 删除key
  • append key value 在key的值后面再加上value
  • strlen key 获取key的value字符串的长度

第二组

  • incr key key的值每次自增1
  • decr key key的值每次自减1
  • incrby key value key的值每次增加value
  • decrby key value key的值每次减少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...赋值给集合key
  • smembers 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 删除

image.png

第二组

  • hlen key 获取hash的长度

第三组

  • hexists key filed[key] 判断filed是否存在,0表示不存在,1表示存在

第四组

  • hkeys key 获取key的所有键-key
  • hvals key 获取key的所有值-value

第五组

  • hincrby key filed increment key的filed值增加increment
  • hincrbyfloat key filed increment key的filed值增加increment

image.png

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 -image.png

第二组

  • zrangebyscore key start_score stop_score 获取score的范围是[start_score,stop_score]的数,数字前面加(则表示不包含,limit m n的含义是从截取结果的第m个开始选n个 image.png

第三组

  • zrem key value 删除元素

第四组

  • zcard key 统计key中元素的个数
  • zcount key min max 统计key中在范围[min,max]中的元素个数
  • zrank key value 获取key中value对应的下标 image.png

第五组

  • zrevrange key start stop 逆序获得范围内的元素 image.png

第六组

  • zrevrank key value 逆序获得下标值 image.png