Redis学习笔记-03String字符串

2020-12-23  本文已影响0人  惊天动地猪儿虫

Redis有以下几种数据类型,这里从String字符串来开始。

1 介绍

字符串是Redis中最基本的数据类型,能存储字符串,包括二进制数据。一个键对应的值,最大是512MB。而且字符串是其他4种数据类型的基础,其他数据类型都是在从不同的角度来组织字符串。
String是一个Key对应一个Value,String类型是二进制安全的。Redis的String可以包含任何数据,比如jps图片或者序列化的对象。


2 命令操作

以下是字符串类型常用的几种操作命令。

API方法名 作用
set 设置key对应的值为string类型的value
setnx 设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not exist的意思。
setex 设置key对应的职位String类型的value,并指定此键值对应的有效期【秒】。
setrange 设置指定key的value值的子字符串
mset 一次设置多个key的值,成功返回OK表示所有的值都设置了, 失败返回0表示没有任何职被设置。
msetnx 一次性设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key。
get 获取key对应的string值,如果可以不存在返回nil
getset 设置key的值,并返回key的旧值
getrange 获取key的value值的子字符串
mget 一次获取多个key的值,如果对应key不存在则对应返回nil
incr 对key的值做加加操作(自增),并返回新的值。
incrby 同incr类似,加指定值,key不存在时候回设置key,并认为原来的value是0。
decr 对key的值做减减操作
decrby 同decr类似,减指定值
append 给指定key的字符串追加value,返回新字符串的长度
strlen 取指定key的value值的长度

2.1 set和get

127.0.0.1:6378> set name hello
OK
127.0.0.1:6378> set passwd world
OK
127.0.0.1:6378> get name
"hello"
127.0.0.1:6378> get passwd
"world"
127.0.0.1:6378> setnx name hello1
(integer) 0
127.0.0.1:6378> get name
"hello"
127.0.0.1:6378> 
127.0.0.1:6378> setex name1 10  hello    # 设置为10s
OK
127.0.0.1:6378> get name1   #10秒内
"hello"
127.0.0.1:6378> get name1   #10秒外
(nil)
127.0.0.1:6378> 

2.2 incr

原子性递增,可以用来生成订单号。

127.0.0.1:6378> set nums 1000
OK
127.0.0.1:6378> incr nums
(integer) 1001
127.0.0.1:6378> incr nums
(integer) 1002
127.0.0.1:6378> incr nums
(integer) 1003
127.0.0.1:6378> incrby nums 2000
(integer) 3003
127.0.0.1:6378>

2.3 decr

原子递减

127.0.0.1:6378> set num1 1000
OK
127.0.0.1:6378> decr num1
(integer) 999
127.0.0.1:6378> decr num1
(integer) 998
127.0.0.1:6378> decrby num1 500
(integer) 498
127.0.0.1:6378> 

2.4 append

127.0.0.1:6378> get name
"hello"
127.0.0.1:6378> append name " world"   # 注意append第二个参数,添加双引号的区别
(integer) 11
127.0.0.1:6378> get name
"hello world"
127.0.0.1:6378> 
127.0.0.1:6378> set name my
OK
127.0.0.1:6378> get name
"my"
127.0.0.1:6378> append name World   #注意append第二个参数,不添加双引号的区别
(integer) 7 
127.0.0.1:6378> get name
"myWorld"
127.0.0.1:6378> 

3 位操作

一个字节有8个二进制位组成,Redis提供了4个命令可以直接对二进制位进行操作。

3.1 GETBIT key offset

获取二进制中offset这个位置的“0,1”状态。

[root@master ~]# redis-cli -p 6378
127.0.0.1:6378> set num1 2
OK
127.0.0.1:6378> getbit num1 0
(integer) 0
127.0.0.1:6378> getbit num1 1
(integer) 0
127.0.0.1:6378> getbit num1 2
(integer) 1
127.0.0.1:6378> getbit num1 3
(integer) 1
127.0.0.1:6378> getbit num1 4
(integer) 0
127.0.0.1:6378> getbit num1 5
(integer) 0
127.0.0.1:6378> getbit num1 6
(integer) 1
127.0.0.1:6378> getbit num1 7
(integer) 0
127.0.0.1:6378> 
# 这里二进制是从0~7  高位到低位

解释:2 在Redis中以字符串2存储,根据ASCII码表,二进制表示为0 0 1 1 0 0 1 0
其过程如下:2=> '2' => 50 => 0 0 1 1 0 0 1 0 32+16+2

3.2 SETBIT key offset value

设置二进制中offset这个位置的“0,1”状态。

127.0.0.1:6378> setbit num1 7 1
(integer) 0
127.0.0.1:6378> get num1
"3"
127.0.0.1:6378> 

解释:修改二进制的第8位为1。其过程表示如下:
0 0 1 1 0 0 1 0 => 0 0 1 1 0 0 1 1 => 32+16+2+1 => 51 ('3')

3.3 BITCOUNT key [start] [end]

获取二进制中1的个数。
127.0.0.1:6378> bitcount num1
(integer) 3
127.0.0.1:6378>

3.4 BITOP operstion destkey key [key...]

二进制位的操作(^ & |)

127.0.0.1:6378> set num1 3
OK
127.0.0.1:6378> set num2 2
OK
127.0.0.1:6378> bitop and num3 num1 num2
(integer) 1
127.0.0.1:6378> get num3
"2"
127.0.0.1:6378> 

解释 num1 & num2 根据下面的规则运算结果为 2

   0  0  1  1  0  0  1  1  num1 = 3
&  0  0  1  1  0  0  1  0  num2 = 2
__________________________
   0  0  1  1  0  0  1  0  num3= 2

Redis中的二进制注意点:

上一篇下一篇

猜你喜欢

热点阅读