redis 基础学习

redis基础语句的学习和记录

启动redis-server

启动redis命令客户端的三种方式

  1. 直接启动,会读默认配置,启动端口号为6379。
  2. 配置启动redis-server --port 6380 设置启动端口号为6380。如多个配置(redis-server --configKey1 configValue1 --configKey2 configValue2)
  3. 配置文件启动,redis-server /opt/redis/redis.conf 读取配置文件中的配置启动

redis的一些基本配置

  1. port 启动端口
  2. logfile 日志文件
  3. dir redis工作目录,存放持久化文件和日志文件
  4. daemonize 是否以守护线程的方式启动redis
  5. 例如redis-cli -h 127.0.0.1 -p 6379 表示连接到这个ip,这个端口的redis服务

基准测试工具 redis-benchmark redis

AOF持久化文件检测和修复工具 ** redis-check-aof redis **

RDB持久化文件检测和修复工具 ** redis-check-dump redis **

启动redis sentinel redis-sentinel

redis 基础命令和5种基础结构

redis基础命令

  1. keys 查看所有键。复杂度为O(n) 由于redis是单线程的,所以线上禁止使用;
  2. dbsize 获取键的总数 。不会遍历所有键,内存中有存储键的总数,直接读;
  3. exists key 检查键是否存在。存在返回值返回1,不存在返回0;
  4. del key 删除键;
  5. expire key seconds 设置键过期。例如expire hello 10,就是设置过期时间是10秒;
  6. type key 获取键的数据结构类型。如果不存在返回none;

一:字符串结构

  1. 设置值:set key value [ex 或者 px] [nx 或者 xx]
key含义
ex为键设置秒级的过期时间
px为键设置毫秒级的过期时间
nx键必须不存在,才能设置成功,用来做添加。可以用来实现分布式锁
xx键必须存在,才可以设置,用来做更新。
  1. 获取值:get key 不存在则返回nil;
  2. 批量设置值:mset key value key value 。例如mset a 1 b 2 c 3 设置了3个key a,b,c。值分别为1,2,3。
  3. 批量获取值:mget key key key 。批量操作时尽量用mset和mget,mset和mget只需要一次网络连接,而多次get或者set会进行多次网络连接,造成时间的浪费。如果批量数据特别大,建议分多次进行,避免处理时间过长,造成redis堵塞或者网络拥塞。
  4. 用来计数:**incr key ** 值不是整数的时候,返回错误,如果值时整数,返回自增后的结果,键不存在,新增一个键,值按照0自增,返回自增后的结果。因为redis时单线程的,线程安全,所以可以用来做秒杀系统等。
  5. 自减:decr key
  6. 自增指定数字:incrby key
  7. 自减指定数字:decrby key
  8. 自增浮点数:incrbyfloat key
  9. 追加值:append key value
  10. 获取字符串长度:strlen key。返回字符串的长度;
  11. 设置并返回原值:getset key value
  12. 返回指定位置的字符串:setrange key offeset value,例如setrange redis 0 b ,就是把key为redis的值的第0位改为b。
  13. 获取部分字符串:getrange key start end,例如getrange redis 0 1 ,获取值前两位的字符。
内部编码
  1. int 8个字节的长整型;
  2. embstr 小于等于39个字节的字符串;
  3. raw大于39个字节的zifuchuan。

二:哈希

  1. 设置值:hset key field value ,例如hset user name tom 。成功返回1,失败返回0。hsetnx 同字符串一样的功能,添加的时候用,如果没有这个key,返回错误。
  2. 获取值:hget key field ,例如hget user name ,返回tom,如果key或者field不存在,返回nil;
  3. 删除哈希里面的field:hdel key field,可以删除一个或者多个field,返回删除成功的个数;
  4. 计算field的个数:hlen key
  5. 批量设置或者获取field - value:hmget key field field / hmset key field value field value
  6. 判断field是否存在:hexists key field
  7. 获取所有field:hkeys key
  8. 获取所有field对应的value: hvals key
  9. 获取所有的field - value:hgetall key 不建议使用该功能,会遍历所有的key,value,造成堵塞;
  10. field对应的value自增: hincrby key field,同字符串一样,也有自减和各种指定增减,其命令前加h;
  11. 计算field对相应的value的长度:hstrlen key field
内部编码
  1. ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认是512),同时所有值都小于hash-max-ziplist-value配置(默认64字节)时,redis会使用ziplist作为哈希的内部实现;ziplist比较节省内存;
  2. hashtable(哈希表) :当ziplist不满足是用hashtable作为内部实现。

三:列表

  1. 基础用法:lpush(左插入)、lpop(左弹出)、rpush(右插入)、rpop(右弹出);
  2. 获取长度:llen key
  3. 获取列表中自定位置的value:lrange key 2 3 ,这个就是获取左边第三个和第四个value;
  4. 根据下标获取value:lindex key 4,获取左边第5个的value;
  5. 删除:lrem key count value, count等于0删除所有等于value的值,count大于0,从左到右删除count个元素,count小于0,从右到左删除count个元素;
  6. 修改:lset key 1 b ,把左边下标为1的value修改为b;
  7. 指定位置插入:linsert key before|after pivot value ,会从列表中找到等于pivot的元素,在其之前或之后插入value;
  8. 按照索引范围获取数据:ltrim key start end,例如ltrim key 1 3,只保留从左边开始第2个到第四个元素;
  9. 阻塞获取:blpop/brpop ,可用于实现生产者消费者模式,该方法获取不到数据,就会堵塞,直到获取到数据返回;

列表可以用来存储多个有序可重复的字符串,可以对列表两端进行插入和弹出。灵活运用列表可以实现多种结构比如:

  1. lpush+lpop=Stack(栈)
  2. lpush+rpop=Queue(队列)
  3. lpsh+ltrim=Capped Collection(有限集合)
  4. lpush+brpop=Message Queue(消息队列)
内部编码
  1. ziplist 同hash一样
  2. linkedlist 链表:当不满足ziplist的时候,就用linkedlist
  3. redis3.2 版本提供新的编码 quicklist 结合了ziplist和linkedlist两者的优势

四:集合

集合的特点:元素不能重复,存储没有顺序。

  1. 添加元素:sadd key element ,也可以用来添加多个element;
  2. 删除元素:srem key element
  3. 计算元素的个数:scard key
  4. 判断元素是否在集合中:sismember key element
  5. 随机从集合中返回指定个数的元素:srandmember key count ,count不写默认是1;
  6. 从集合中随机弹出元素:spop key ,弹出就等于删除了,集合内的元素就没了;
  7. 获取所有元素 :smembers key
  8. 集合间的操作:
namekey
获取交集sinter key key key
获取并集suinon key key key
获取差集sdiff key key key
内部编码
  1. intset(整数集合):当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512)时,redis会选用intset作为内部实现,从而减少内存。
  2. **hashtable **(哈希表):当上面的集合无法满足是,用这个作为内部实现

五:有序集合

特点:不能重复,存储有序,排序规则时根据一个score值来进行排序。

  1. 添加成员:zadd key score member score member ,可以插入多个值,也可以使用nx、xx,但是针对的时member;
  2. 获取成员个数:zcard key
  3. 获取某个成员的分数:zscore key member
  4. 获取成员的排名:(zrank key member)/(zrevrank key member),从分数低到高返回排名/从高到低;
  5. 删除成员:zrem key member
  6. 增加成员的分数:zincrby key increment member ,例如zincrby user 9 tom,给tom加9分;
  7. 返回指定排名的成员:zrange/zrevrange key start end withscores ,zrange从低到高,zrevrange从高到低,withscores输出分数,end==-1 输出所有的成员;
  8. 返回指定分数范围的成员:zrangebyscore/zrevrangebyscore key min max withscores [limit offset count] (限制输出位置和个数);
  9. 返回指定分数范围成员个数:zcount key min max
  10. 删除指定排名内的升序元素:zremrangebyrank key start end
  11. 删除指定分数范围的成员:zremrangebyscore key min max
  12. 集合间的操作:
    交集:zinterstore destination numkeys key [key …] [weights weight [weight …]] [aggregate sum|min|max]
    destination: 交集计算结果保存到这个键;
    numkeys:需要做交集计算键的个数;
    key[key …]:需要做交集计算的键;
    weights weight[weight …] :每个键的权重,在做交集计算时,每个键中的每个member会将自己的分数乘以这个权重,每个键的默认权重时1;
    aggregate sum|min|max:计算成员交集后,分值可以按照sum、min、max做汇总,默认时sum;

并集:zunionstore destination numkeys key [key …] [weights weight [weight …]] [aggregate sum|min|max]
规则同交集一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值