Redis系列学习笔记2 Redis字符串
来源:互联网 发布:数据透视表数据更新 编辑:程序博客网 时间:2024/05/22 11:36
字符串
设置值
SET key value [NX|XX][NX|XX]为可选。NX:仅在键key不存在的情况下,才进行设置操作,如果键存在,那么将不做任何动作。XX:仅在键key已经存在的情况下,才进行设置操作,如果键key不存在,那么不做任何动作
SET key value NX和SETNX key value效果一样
SET key value XX和SETXX key value效果一样
获取字符串的值
GET key
多个键值对
设置多个键值对
MSET key value [key value …]
获取多个键值对
MGET key [key …]
设置新值并返回旧值
GETSET key new-value
redis中存在 key value键值对,执行GETSET key new-value会将key的值设置为new-value,同时返回值为value
追加内容到字符串末尾
APPEND key value
示例:SET key valueAPPEND key -1最后的值为value-1
返回值的长度
STRLEN key
字符串索引
正数索引
以hello字符串为例索引值:0 1 2 3 4字符串:h e l l o
负数索引
以hello字符串为例索引值:-5 -4 -3 -2 -1字符串: h e l l o
SETRANGE key index value
从索引index开始,用value覆写给定键key所储存的字符串值
例:
redis>SET msg "hello"redis>SETRANGE msg 1 "appy"redis>GET msg"happy"
GETRANGE key start end
返回键 key 储存的字符串值中,位于 start 和 end 两个索引之间的内容(闭区间,start 和 end 会被包括在内)。和SETRANGE 只接受正数索引不同,GETRANGE的索引可以是正数或者负数。
数字操作
只要储存在字符串键里面的值可以被解释为 64 位整数,或者 IEEE-754 标准的 64 位浮点数,那么用户就可以对这个字符串键执行针对数字值的命令。
INCRBY key increment
将key的值增加increment
DECRBY key decrement
将key的值减少decrement
注意:键不存在时,键的值初始化为0,然后再执行加减操作
INCR key
将key的值加1
DECR key
将key的值减1
API
IdGenerator(name,client): 设置id生成器的名字和客户端IdGenerator.gen(): 生成一个新的自增idIdGenerator.init(n):保留前n个id,IdGenerator.init(10000),这样生成器创建的id就会从10001开始
INCRBYFLOAT key increment
increment为浮点数
当用户针对一个数字值执行APPEND、STRLEN、SETRANGE和GETRANGE命令时,Redis会先将数字值转换为字符串,然后再执行命令。
SETBIT key index value
将给定索引上的二进制位的值设置为value,命令返回被设置的位原来存储的旧值
例如将10110000设置第2位为1SETBIT bits 2 110110000变成10110100
GETBIT key index
返回给定索引上的二进制位的值
BITCOUNT key [start][end]
计算并返回字符串键存储的值中,被设置为1的二进制位的数量
BITOP operation destkey key[key …]
对一个或者多个保存二进制位的字符串键执行位元操作,并将结果保存在destkey上。operation可以是AND、OR、NOT、XOR这四种操作中的任意一种:
逻辑操作
在线用户统计应用示例
目前这个实现的优点:
- 将用户设置为在线的速度非常快, O(1) 。
- 即使用户数量非常大,占用的内存也不多:记录一百万用户仅需一百万位,也即是 0.125 MB;记录一千万用
户仅需一千万位,也即是 1.25 MB 。 - 可以在现有程序的基础上,做进一步的操作。举个例子,我们可以使用 BITOP AND 命令,将多个在线记录作
为输入,计算出全勤用户的数量(全勤指的是,用户在所有输入的在线统计记录中,都显示为在线)。
目前这个实现的缺点:
- 每次进行统计的复杂度为 O(N) 。
- 没办法轻易地获取所有在线用户的名单,只能遍历整个二进制值,复杂度为 O(N) ,其中 N 为二进制位数
量。
进一步的优化:
- 用户量不大并且需要获取在线用户名单的话,可以使用之后介绍的集合数据结构来实现。
- 不需要获取在线用户名单,并且不需要精确的在线统计数量,可以使用之后介绍的 HyperLogLog 来实现。
存储中文时的注意事项
STRLEN、SETRANGE 和 GETRANGE 不适用于中文
- Redis系列学习笔记2 Redis字符串
- Redis系列学习笔记-1 Redis介绍
- Redis学习笔记---字符串类型
- redis学习笔记2
- redis学习笔记(2)
- redis学习笔记-2
- Redis系列学习笔记18 Redis持久化
- Redis系列学习笔记19 Redis多机功能
- Redis学习笔记2-Redis的集群
- Redis 学习笔记2-redis数据类型
- Redis学习笔记(2)-Redis数据类型
- Redis系列学习笔记3 散列
- Redis系列学习笔记4 列表
- Redis系列学习笔记5 集合
- Redis系列学习笔记6 有序集合
- Redis系列学习笔记7 HyperLogLog
- Redis系列学习笔记8 数据库
- Redis系列学习笔记11 流水线
- SPRING中的线程池ThreadPoolTaskExecutor
- [Python]第11讲:列表生成式
- BZOJ2733 永无乡
- 秒杀多线程第十篇 生产者消费者问题
- [公告] 装机员系统下载合集(五月更新发布)!
- Redis系列学习笔记2 Redis字符串
- Lua Table 多字段排序
- json解析总结
- C++内置类型的机器实现
- EventBus3.0源码解读
- C++中定义一维二维数组
- web服务器之iis,apache,tomcat三者之间的比较
- iOS 多线程 GCD
- DEDECMS后台Link模板