redis-启动后杂项基础知识

1. 单进程

  • 单进程模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率;
  • epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率;

2. redis数据库的一些概念及操作 

  • 默认16个数据库,类似数组下表从零开始,初始默认使用零号库;
  • 统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上,redis默认端口是6379
  • select命令切换数据库:select 0-15
  • dbsize:查看当前数据库的key的数量;
  • flushdb:清空当前库;
  • flushall;通杀全部库;

 Redis数据类型

  • redis的五大数据类型

1. string(字符串)

  • string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value;
  • string类型是二进制安全的。意思是redis的string可以包含任何数据。如jpg图片或者序列化的对象 ;
  • string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M;

2. list(列表)
redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。它的底层实际是个链表。

3. set(集合)
redis的set是string类型的无序集合。它是通过HashTable实现的。

4. hash(哈希,类似java里的Map)

  • redis的hash 是一个键值对集合;
  • redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象;
  • 类似Java里面的Map<String,Object>;

5. zset(sorted set:有序集合)

  • redis的zset 和 set 一样也是string类型元素的集合,且不允许重复的成员;
  • 不同的是每个元素都会关联一个double类型的分数;
  • redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复;

常见数据类型操作命令参考网址(大Redis 命令参考 — Redis 命令参考

redis常用命令

keys *:查看所有key;
exists key 的名字:判断某个key是否存在;
move key dbID(0-15): 当前库就没有了,被移除了;
expire key 秒钟: 为给定的key设置过期时间;
ttl key: 查看还有多少秒过期,-1表示永不过期,-2表示已过期;
type key: 查看你的key是什么类型;

config get maxmemory: 获取redis的内存配置情况

confog set maxmemory 1: 设置redis的内存 单位是字节

redis 字符串(String) --(常用命令介绍)

set/get/del/append/strlen
Incr/decr/incrby/decrby:一定要是数字才能进行加减;(对数字进行加减,直接跟上key就好,默认加1)
getrange/setrange

  • getrange:获取指定区间范围内的值,类似between and的关系从零到负一表示全部;
  • setrange:设置指定区间范围内的值,格式是setrange key 位置值 具体值

setex(set with expire) 键 秒值 值/setnx(set if not exist) 键

  • setex:设置带过期时间的key,动态设置 : setex 键 秒值 真实值
  • setnx:只有在 key 不存在时设置 key 的值:setnx 键 值

mset/mget/msetnx

  • mset:同时设置一个或多个 key-value 对。
  • mget:获取所有(一个或多个)给定 key 的值。
  • msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在(如果存在key,则都不会操作,因为msetnx是原子性型操作)。

getset:将给定 key 的值设为 value ,并返回 key 的旧值(old value)。简单一句话,先get然后立即set。(先获取原来存在key的值,再将这个新的值设置到这个key中)

redis 列表(List) --(常用命令介绍)

lpush/rpush/lrange
lpop/rpop,移除列表key的头/尾元素;
lindex,按照索引下标获得元素(从上到下)(格式:lindex key index);
llen:返回列表 key 的长度(格式:llen key);
lerm:根据参数 count 的值,移除列表中与参数 value 相等的元素(格式: lerm key count value);

  • count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
  • count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
  • count = 0 : 移除表中所有与 value 相等的值。

ltrim ,截取指定范围的值后再赋值给key(格式:ltrim key start stop);
rpoplpush,移除列表的最后一个元素,并将该元素添加到另一个列表头部并返回(格式:rpoplpush source—key destination—key);
lset,将列表 key 下标为 index 的元素的值设置为 value(格式:lset key index value);
linsert,(格式:linsert key before|after pivot value)将值 value 插入到列表 key 当中,位于值 pivot 之前或之后;

  • 当 pivot 不存在于列表 key 时,不执行任何操作。
  • 当 key 不存在时, key 被视为空列表,不执行任何操作。
  • 如果 key 不是列表类型,返回一个错误。

性能总结
它是一个字符串链表,left、right都可以插入添加;

  • 如果键不存在,创建新的链表;
  • 如果键已存在,新增内容;
  • 如果值全移除,对应的键也就消失了。
  • 链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

redis 集合(Set) --(常用命令介绍)

sadd/smembers/sismember,格式:

  • sadd key member [member ...]
  • smembers key
  • sismember key member

scard:获取集合里面的元素个数(格式:scard key);
srem:删除集合中元素(格式:srem key member [member ...]);
srandmember,(格式:srandmember key [count])(不会修改set集合)

  • 如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素;
  • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合;
  • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值;

spop,移除并返回集合中的一个随机元素(格式:spop key);
smove,(格式:smove source destination member)将 member 元素从 source 集合移动到 destination 集合;(这个新的集合不存在就会新创建
数学集合类

  • 差集:sdiff(格式:sdiff key [key ...])(这里的数值只能一个一个的添加,要不然不会出现效果)
  • 交集:sinter(格式:sinter key [key ...]
  • 并集:sunion(格式:sunion key [key ...]

redis 哈希(Hash) --(常用命令介绍)

hset/hget/hmset/hmget/hgetall/hdel,格式:

  • hset key field value:将哈希表 key 中的域 field 的值设为 value ;
  • hget key field:返回哈希表 key 中给定域 field 的值;
  • hmset key field value [field value ...]:同时将多个 field-value (域-值)对设置到哈希表 key 中;
  • hmget key field [field ...]:返回哈希表 key 中,一个或多个给定域的值;
  • hgetall key:返回哈希表 key 中,所有的域和值;
  • hdel key field [field ...]:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略;

hlen,返回哈希表 key 中域的数量(格式:hlen key);
hexists,查看哈希表 key 中,给定域 field 是否存在(格式:hexists key field);
hkeys/hvals,格式:

  • hkeys key:返回哈希表 key 中的所有域;
  • hvals key:返回哈希表 key 中所有域的值;

hincrby/hincrbyfloat,格式:

  • hincrby key field increment:为哈希表 key 中的域 field 的值加上增量 increment;
  • hincrbyfloat key field increment:为哈希表 key 中的域 field 加上浮点数增量 increment ;

hsetnx,将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在(格式:hsetnx key field value

redis 有序集合Zset(sorted set) --(常用命令介绍)

zadd/zrange,格式:

  • zadd key score member [[score member] [score member] ...]:将一个或多个 member 元素及其 score 值加入到有序集 key 当中;
  • zrange key start stop [WITHSCORES]:返回有序集 key 中,指定区间内的成员,其中成员的位置按 score 值递增(从小到大)来排列;

zrangebyscore:(格式:zrangebuscore key min max [WITHSCORES] [LIMIT offset count]),返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员;
zrem:移除有序集 key 中的一个或多个成员,不存在的成员将被忽略(格式:zrem key member [member ...]);
zcard/zcount /zrank/zscore,格式:

  • zcard key:返回有序集 key 的基数;
  • zcount key min max:返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量;
  • zrank key member:返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列,排名以 0 为底,也就是说, score 值最小的成员排名为 0 ;
  • zscore key member:返回有序集 key 中,成员 member 的 score 值;

zrevrank:返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序,排名以 0 为底,也就是说, score 值最大的成员排名为 0 (格式:zrevrank key member);
zrevrange:返回有序集 key 中,指定区间内的成员,其中成员的位置按 score 值递减(从大到小)来排列(格式:zrevrange key start stop [WITHSCORES]);
zrevrangebyscore:返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列(格式:zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]);

总结:

  1.  redis是一个当进程的非关系型数据库,但是底层是用的是多路复用的io操作
  2. redis是有5种数据结构分别为:string、list、hash、set、zset、BigMap、HyperLogLog、ego
  3. 以上是redis5种数据结构常用的命令,多用就会才能记住。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值