文章目录
CLI 命令行
cli是redis自带的一个客户端命令。是一个控制台式的交互命令。
启动方式上一次直接安装完成后也配置好了环境变量。那么这次启动直接运行即可。
redis-cli
需要了解的是通过帮助可以看到其他redis-cli 登录时使用的参数
redis-cli -h 通过这个命令可以查看redis-cli的所有启动配置参数。
常用启动参数
- -h < hostname > Server hostname (default: 127.0.0.1).
指定登录的主机名称 - -p < port > Server port (default: 6379).
指定主机的端口号 - -n < db > Database number.
指定登录的数据库号,redis与其他数据库一样默认也是有“库”这个概念的。而登录完成后进入的是redis的“0号”库。登录完成后也可以使用select命令来切换不同的库的
在redis中默认是有16个这个库的,不过也是可以通过配置文件进行配置修改来改变这些数量。但是唯一的0号库是不能修改的。
服务的关闭
通过cli客户端程序我们可以直接关闭redis的服务程序
redis-cli shutdown 关闭默认的服务。
redis-cli -p 端口 shutdown 关闭指定端口服务。
帮助命令的使用。
登录完成后以后可以调用help命令来查看redis中所有的指令以及使用方式。
输入help命令以后会返回
To get help about Redis commands type:
"help @< group >" to get a list of commands in < group >
"help < command >" for help on < command >
"help < tab >" to get a list of possible help topics
"quit" to exitTo set redis-cli preferences:
“:set hints” enable online hints
“:set nohints” disable online hints Set your preferences in ~/.redisclirc
说明命help名的操作以及方式。
- 通过@ 组的名称来查看当前组下的命令。
- 直接查看具体命令
- 按tab 键对名进行补全
- quit 命令直接退出客户端
全局的命令 @generic
通过 help @generic 命令可以获取 generic下的所有全局命令。具体的可以自己执行使用。
具体的命令可以参考 redis命令参考 查看,里面有详细的说明以及使用用例。我这抄也没意思了。
但是需要理解的一个点:
String类型命名
通过 help @string 可以获取string 类型分组下的所有的命令。具体使用方式也可以通过帮助或是命令参考链接进行查询。
但是关于String其实再有三大类的区分
字符串类型 String
需要知道最常用的命令方式
-
SET 设置一个key
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]- EX second :设置键的过期时间为 second 秒。
- PX millisecond :设置键的过期时间为 millisecond 毫秒。
- NX :只在键不存在时,才对键进行设置操作。 S
- XX :只在键已经存在时,才对键进行设置操作。
一个简单的分布式锁,因为redis是单线程的操作,所以通过set 和NX的配合使用可以是一个最简单的分布式锁,因为多并发来,指定nx最先set key成功的就可以认为获取到了此锁,其他线程当发现NX操作 key值已经存在那么就等于获取到锁失败
-
GET key 获取指定key内容
-
MSET key value [key value …] 批量设置
-
MGET key [key …] 批量获取
-
APPEND key value 在指定key后追加value
-
GETRANGE key start end 截取指定key的 数据长度
- 这里有一点就是redis是有反向索引的。比如对 hello 这个字符串当安装正向索引时为0位h4位o, 反向则 0位-1 h为-5,见下表:
符 正向索引 反向索引 h 0 -5 e 1 -4 l 2 -3 l 3 -2 o 4 -1 - 若GETRANGE key 2 4 获取的是llo;
那么 GETRANGE key 2 -1的结果是一样的。
或者 GETRANGE key -3 -1 。 - 只要明白索引值为负值时指的就是反向索引。
-
STRLEN key 获取指定key的value长度。这里获取的是字节长度。
数值类型 int
针对于redis 中的key ,可以理解为里面有一个属性type 指的就是这个key对应值的类型。具体可以通过generic 组的命令TYPE来查看。
TYPE key 返回 key 所储存的值的类型。
还有一个就是OBJECT 方法 可以通过方法
OBJECT ENCODEING key 查看key的编码方式
对于这个补充可以参考,以下结果:
127.0.0.1:6379> set ke1 hello
OK
127.0.0.1:6379> set ke2 999
OK
127.0.0.1:6379> type ke1
string
127.0.0.1:6379> type ke2
string
127.0.0.1:6379> object encoding ke1
“embstr”
127.0.0.1:6379> object encoding ke2
“int”
对于ke2 他的编码就是int类型,而对于int类型的编码也有着自己的方法
对于数值型的常用方法:
- INCR key 对key数值进行+1操作
- INCRBY key decrement 对key的数值进行增加 decrement 操作
- DECR key 对key值进行-1操作
- DECRBY key decrement 对key值进行减少指定decrement 操作
- INCRBYFLOAT key increment 对key值进行增加浮点数操作
但是需要注意的一点是因为都是数值型操作那么对于数值参数是可以允许有负值的。
对于数据类型的场景一般都是做数据统计型的用处都会很多。比如秒杀,抢购,评论数,点赞数,等这些都是用于数据递增或者数据递减来完成的;因为redis的单进程单线程特性,完全可以规避掉这种并发引起的事物操作。
位图类型 bitmap
首先要说一下
再通过客户端访问redis时候,通过socket传入的是二进制数组,这些都是字节码,而redis保存的数据也是字节码。
所以只要传输双方都约定好一种编码方式,按照字节码进行传输,传输完成后按照编码方式进行转码,数据就不会被破坏。
这个就是二进制安全。
不安全的是字符流,按照字符进行编码,比如gbk的对汉子的编码和utf-8对字符的编码长度就不一样。
关于bitmap的模型
首先要知道1个字节有8位组成。那么bitmap实际操作的就是字节中位的下标对应的值。而位只有0,1两种值。
而对于redis中bitmap操作的只要不超过8位那么初始长度是1,所以命令STRLEN出来的是字节长度。那么实际的操作用的是字节中位的下标。
- SETBIT key offset value 设置一个位的值
这里的offset就是字节中位的下标,而value的取值也只能是0或者1
使用如 setbit k1 9 0 - BITPOS key bit [start] [end]获取位的下标
bit取值 0或1 start 指的是字节的下标 end也是字节的下标。返回的是位的下标。 - BITCOUNT key [start end] 统计1 出现的次数
可选的start 与 end 都指的是字节的下标 - BITOP operation destkey key [key …] 二进制计算
operation 操作标识 【and |or | not | xor】 与 或 非 异或;
destkey目标key 就是计算完的结果放到哪个key里面。
bitmap的使用场景
- 用户登录状态登记与统计。
- 通过位图来保存用户的登录情况,登录为1 未登录为0,那么通过位图来保存可以有效记录用户所有的登录情况。并且可以进行随机统计。
- 原先的关系型数据库统计需要创建一张用户表,每一条需要记录用户的ID与登录时间的记录。统计后进行count操作。
- 通过bitmap可以设计为,一个用户id就是一个key。而以后的每一个位就用来记录用户的登录状态。通过bitcount来统计指定字节中的位数就可以获取实际的登录时间统计。
其实对于位图的应用就是将关系型数据转换为二维表格存于redis中。其中需要知道容易变动的作为key那列,而不怎么变的以bitmap的值为状态存入bitmap中而不同的1与0代表两种相反的状态。最后通过bitmap的计算方法功能。进行求和或者与或非等操作进行计算获取需要的结果。当然这也有一定局限性。不过具体问题还是需要看具体的需求与相对于的实现了。
其他的命令
- GETSET key value 获取当前值并把value 更新为当前值
- MSETNX key value [key value …] 与MSET不同的是。这个是原子操作。当有某个key set失败的时候就全部失败