String命令介绍笔记(4)
来源:互联网 发布:开淘宝店进货渠道 编辑:程序博客网 时间:2024/06/10 17:50
1. 数据最大容量是512M。 【网络带宽】
static int checkStringLength(redisClient *c, long long size) {
if (size > 512*1024*1024) {
addReplyError(c,"string exceeds maximum allowed size (512MB)");
return REDIS_ERR;
}
return REDIS_OK;
}
2. 赋值与取值 【get/set】
3. incr key 【递增】 ++i/i++
有些公司会用incr来生成订单号。【原子性递增】
4. incrby key increment
默认自增指定的值。
5. decr key 默认的自减-decrby key decrement
6. 增加指定浮点数 incrbyfloat
7. append key value =>C# String.Concat (+)
8. StrLen 获取字符串的长度
9. MGET,MSET 一次性设置多个值 节省带宽
10. SetRange => Replace
GetRange => SubString => SubStr
11. SetEx => Set + Expire 【秒为单位】
PSetEx=> Set + PExpire【毫秒为单位】
二 String命令中二进制的妙用
一:二进制运算
1. GetBit key offset 获取二进制中offset这个位置的“0,1”状态。
2. SetBit key offset value 设置二进制中offset这个位置的“0,1”状态。
3. Bitcount key 获取二进制中1的个数。
4. BitOp operation 二进制位的操作(^ & |)
二:Redis中二进制有两个坑。
1. 你所输入的数字全部用char类型表示, 2 => ascII形式展现【50】,
所以2是字符的“2”。
sample: 2 0 0 1 0 bitcount= 1 错。 bitcount=3。
2. 一般来说2这个字符的二进制位,采用的顺序是(从右到左。)
但是在redis是从(从左到右)
2=> '2' => 50 => 0 0 1 1 0 0 1 0 32+16+2
请看图
3. setbit num1 7 1 => 0 0 1 1 0 0 1 1 32+16+2+1 => 51 ('3')
4. BitOp 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
二:妙用
1. '2' => 50 => 0 0 1 1 0 0 1 0 //二进制位中,要么是1,要么是0
日 六 五 四 三 二 一
2. 0 0 0 0 1 0 0 1 char
三:深入剖析String类型
1. Redis采用C语言编写。
2. C语言是怎么标识string的呢???char[]
3. 如果说redis采用char[] 会有什么样的弊端
StrLen: 是不是要遍历 char[] 数组 O(N)
Append: 是不是也需要遍历char[],然后在char[]中追加。 O(N)
Redis的目标就是高性能,高并发。
4. Redis的解决方案呢??? 自己封装了一下char[],封装类型SDS (简单对象类型)
struct sdshdr {
unsigned int len; //记录char[]实际使用的长度<=buf[].length
unsigned int free; //free记录着buf[]中未使用的坑位。
char buf[];
};
5. StrLen => return sh->len; O(1)
6. 看看string类型如何包装sds。
typedef struct redisObject {
unsigned type:4;
unsigned encoding:4;
unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */
int refcount; //垃圾回收(GC)
void *ptr;
} robj;
看下图
- String命令介绍笔记(4)
- SortedSet命令介绍笔记(8)
- tcl/tk学习笔记:字符串(二)string命令集
- linux命令介绍(4)
- Hash的命令介绍与源代码剖析笔记(5)
- Set的命令介绍与代码剖析笔记(7)
- redis命令(string)
- 4.redis入门命令以及string类型介绍
- Linux shell命令示例介绍-个人笔记
- Java String类常用方法介绍(4)
- String介绍
- String介绍
- 第十二节:Scanner类与String类介绍(讲师笔记)
- 【JavaSE学习笔记】常用类介绍_01_Object,Scanner,String
- Android adb命令学习笔记(一)——adb介绍以及关于传输文件等相关基本命令
- iOS海哥开发笔记 (海哥原创,iOS 之mac终端命令大全介绍 )
- python中if命令简单介绍及注意事项(含笔记)
- ConstraintLayout介绍(笔记)
- linux之C编程学习——进程,进程,进程!
- c++ struct与class区别
- Map Serialization and Deserialization with Jackson
- TCP流量控制
- 利用Python进行数据处理 笔记
- String命令介绍笔记(4)
- 一个典型的SSH登录与增删改查demo详解+源代码
- 【L,R的特点】codeforce 822C Hacker, pack your bags!
- python小程序-0005
- JSP提交到mysql数据库的中文乱码
- Memeory Monitor ---内存分配
- Python中进程创建的两种方式
- webpack
- python基础2之数据类型---元组