码迷,mamicode.com
首页 > 其他好文 > 详细

ridts08

时间:2021-06-28 20:25:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:管理   连接   替换   复杂   系统调用   exist   基于   除了   idt   

Cluster 管理工具

redis-trib.rb的功能集成到redis-cli,增加了一个backup命令。

除了redis-cli,其实另一个工具的优化就是redis-benchmark

[root@mini redis6]# ./redis-benchmark --help
Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n ......
 --threads <num>    Enable multi-thread mode.
 --cluster          Enable cluster mode.

支持 SSL 连接

Amazon 提供的一个功能,在 Redis 6 中 merge 进来。没有提及细节,不清楚对性能有多大影响。

IO多线程

Redis 终于实现多线程了!?先打住,多线程是不可能多线程的,这辈子都不可能多线程(后面这句是我加的)。

作者先简单解释了为什么不能多线程(复杂性、锁的效率等等),然后提到就是有一个事情可以做成多线程,就是针对客户端的这部分。这个操作通过系统调用写操作,将客户端的输入输出缓冲中的数据通过多线程IO与客户端交互。作者说这部分通常能够占到CPU负载的50%,将这部分通过其他线程进行处理,核心流程还是单线程,实现起来也比较简单,性价比超高,所以就做了。
这样能进一步提升单实例的性能,使用4核、8核等来分散写压力,不过再多几个核估计收益比不高了。如果真正想发挥多核性能,还是老路子——Cluster。

Proxy

针对 Cluster 的代理,这么多年了,仍然有不少人在Cluster的接入方式上挣扎,因为缺少合适的驱动而无法使用Cluster。所以开发了这个Proxy功能。作者也强调,虽然这个Proxy 让 Cluster 拥有了像单实例一样的接入方式,但是本质上还是 Cluster,不支持的命令还是不会支持,比如跨 slot 的多Key操作。
其实社区早已有过不少 Proxy 方面的尝试,而且有些做的还不错。那么这个官方的 Proxy 究竟会给我们带来什么惊喜呢?还是让我们拭目以待吧。

Disque

这个本来是作者几年前开发的一个基于 Redis 的消息队列工具,但多年来作者发现 Redis 在持续开发时,他也要持续把新的功能合并到这个Disque 项目里面,这里有大量无用的工作。因此这次他在 Redis 的基础上通过 Modules 功能实现 Disque。

如果业务并不需要保持严格消息的顺序,这个 Disque 能提供足够简单和快速的消息队列功能。

技术图片
##### 操作数据库
1. set 插入数据  
        127.0.0.1:6379> set host linux
        OK
2. get 查询数据  
        127.0.0.1:6379> get host
        linux
        127.0.0.1:6379> get sssss
        
        127.0.0.1:6379> 
    **获取一个不存在的值返回空nil**
3. del 删除键值  
        127.0.0.1:6379> del  host
        1
        127.0.0.1:6379> del  host
        0
4. exists 验证键是否存在  
        127.0.0.1:6379> exists host
        1
        127.0.0.1:6379> del  host
        1
        127.0.0.1:6379> exists host
        0
5. setnx 设置 key 对应的值为 string 类型的 value。如果 key 已经存在,返回 0,nx 是 not exist 的意思。
        127.0.0.1:6379> setnx name 1111
        0
        127.0.0.1:6379> setnx name11 1111
        1
    **设置成功返回1**
6. setex 设置 key 对应的值为 string 类型的 value,并指定此键值对应的有效期
        127.0.0.1:6379> setex red 10 red
        OK
        127.0.0.1:6379> get red
        red
        127.0.0.1:6379> get red
        
        127.0.0.1:6379> exists red
        0
7. setrange 设置指定 key 的 value 值的子字符串。
        127.0.0.1:6379> get name
        liudehua
        127.0.0.1:6379> setrange name 3 yifei
        8
        127.0.0.1:6379> get name
        liuyifei
        127.0.0.1:6379> setrange name 30 yifei
        35
        127.0.0.1:6379> get name
        liuyifeiyifei
        127.0.0.1:6379> setrange name 30 dehua
        35
        127.0.0.1:6379> get name
        liuyifeidehua
    **其中的 数字 是指从下标为数字(包含 数字)的字符开始替换(0开始)**
8. mset 一次设置多个 key 的值,成功返回 ok 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。
        127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
        OK
        127.0.0.1:6379> get k1
        v1
        127.0.0.1:6379> get k2
        v2
        127.0.0.1:6379> get k3
        v3
9. msetnx 一次设置多个 key 的值,成功返回 ok 表示所有的值都设置了,失败返回 0 表示没有任何值被设置,但是不会覆盖已经存在的 key。
        127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3
        0
        127.0.0.1:6379> msetnx k1111 v1 k2 v2 k3 v3
        0
        127.0.0.1:6379> exists k1111
        0
    **一个失败则全部设置失败,如果这条命令返回 0,那么里面操作都会回滚,都不会被执行。**
10. getset 设置并返回原来的值
        127.0.0.1:6379> get name
        liuyifeidehua
        127.0.0.1:6379> getset name liudehua
        liuyifeidehua
        127.0.0.1:6379> get name
        liudehua
11. getrange 获取指定 key 的 value 值的子字符串。
        127.0.0.1:6379> getrange name 1 3
        iud
        127.0.0.1:6379> getrange name 3 99999
        dehua
        127.0.0.1:6379> getrange name -7 -1
        iudehua
    **字符串左面下标是从0开始的 字符串右面下标是从-1 开始的 当下标超出字符串长度时,将默认为是同方向的最大下标**
12. mget 一次获取多个 key 的值,如果对应 key 不存在,则对应返回 nil。
        127.0.0.1:6379> mget k1 k2 k3 k4
        v1
        v2
        v3
        
        127.0.0.1:6379> 
13.  incr 自增操作 对 key 的值做加加操作,并返回新的值。注意 incr 一个不是 int 的 value 会返回错误,incr 一个不存在的 key,则设置 key 为 1  
        ```sbtshell
        127.0.0.1:6379> set age 10
        OK
        127.0.0.1:6379> incr age
        11
        127.0.0.1:6379> incr age
        12
        127.0.0.1:6379> incr name
        ERR value is not an integer or out of range
        
        127.0.0.1:6379> incr ageA
        1
        127.0.0.1:6379> incr ageA
        2
        ```
        
14. incrby 同 incr 类似,加指定值 ,key 不存在时候会设置 key,并认为原来的 value 是 0
        127.0.0.1:6379> incrby ageA 10
        12
        127.0.0.1:6379> incrby ageAB 10
        10
15. decr 对 key 的值做的是减减操作,decr 一个不存在 key,则设置 key 为-1
        127.0.0.1:6379> decr age
        11
        127.0.0.1:6379> decr age
        10
        127.0.0.1:6379> decr ageABC
        -1
        127.0.0.1:6379> decr ageABC
        -2
16. decrby 减指定值 ,key 不存在时候会设置 key,并认为原来的 value 是 0
        127.0.0.1:6379> decrby ageABC -5
        3
        127.0.0.1:6379> decrby ageABCD -2
        2

ridts08

标签:管理   连接   替换   复杂   系统调用   exist   基于   除了   idt   

原文地址:https://www.cnblogs.com/huaobin/p/14942121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!