- redis中所有数据类型都是键值对形式存在
- 键都是字符串型,值可以为各种类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
常用命令
删除一个键值对 创建数据类型时如果键已存在会报错del 键名 命令执行后输出 (integer) 1,否则将输出 (integer) 0flushdb 清空数据库(清空当前库)flushall 清除全部库的数据select index index>0 切换数据库,不同库 默 认16个库keys * 输出所有键clear 清屏expire 键 秒数 设置键值对过期时间ttl 键 查看key的剩余时间。存在但是未设置时效为-1。过期为-2,查不存在的key也为-2.因为键过期即被删除不存在type 键 查看数据类型exists 键 查看key是否存在move 键 把一个key移动到其他库ping 测试连接,正常返回PONGauth 密码 使用密码redis-cli.exe -a 密码 连接时就指定密码
bigkey
如果一个 key 对应的 value 所占用的内存比较大,那这个 key 就可以看作是 bigkey。除了会消耗更多的内存空间,bigkey 对性能也会有比较大的影响
- string 类型的 value 超过 10 kb,复合类型的 value 包含的元素超过 5000 个(对于复合类型的 value 来说,不一定包含的元素越多,占用的内存就越多) 就算bigkey
可以通过分析rdb文件找bigkey
- redis-rdb-tools(opens new window) :Python 语言写的用来分析 Redis 的 RDB 快照文件用的工具
- rdb_bigkeys(opens new window) : Go 语言写的用来分析 Redis 的 RDB 快照文件用的工具,性能更好。
字符串
string 是 redis 最基本的类型
- 字符串引号是可有可无的,但是推荐字符串作为值时加引号
- string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
- string 类型的值最大能存储 512MB。同时一个键也是最大能存储 512MB
- 字符串键貌似不能为中文,值可以为中文 ```shell set name “饶泽东” ok get name “饶泽东”
incr 键 将数字值+1 decr 键 数字 -1 decrby 键 值 数字值减少指定值 incrby 键 值 数字增加值 append 键 值 字符串值追加值
<a name="pcdVl"></a># 哈希- 哈希类似Map,是一组键值对的集合,所以特别适合用于存储对象- **哈希中的键值对的值都是字符串**- 每个 hash 可以存储 232 -1 键值对(40多亿)```shell创建hmset 对象名 属性1 属性1值 属性2 属性2值 ...获取对象属性hget 对象名 属性名hset key 属性 value 设置某个属性
List
- 一个键有很多个值的类型
- list的插入顺序类似栈,先插入的会在最下面输出
- 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。 ```shell lpush 键 值 插入一个,没有则创建
lrange 键 int1 int2 输出索引1-2之间的元素 list可以看成是0索引开始的集合 如0 2 即输出第一个和第二个 0 0 即输出第一个
lrange 键 0 -1 输出所有元素
<a name="N4Khd"></a># Set- Redis 的 Set 是 string 类型的无序集合。不允许重复值。通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。- 集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。```shellsadd 键 值 插入一个到set中,无则创建。成功返回 1,如果元素已经在集合中返回 0(integer) 1smembers 键 输出所有元素
zset 有序集合
- Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数大小来为集合中的成员进行从小到大的排序。
- 如果多个分数相同,此时貌似又是无序输出
zset的成员是唯一的,但分数(score)却可以重复。即插入已存在元素,值会被过滤不会再插入,但是分数会刷新
zadd 键 分 值 #插入一个元素zrangebyscore
bitmap
bitmap 存储的是连续的二进制数字(0 和 1),通过 bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态。总之相当于一组bit数组,数组只能存储0或者1(索引0开始,默认为0)
- 适合用于存储状态等信息,用户 ID 为 offset
- rdm里面要看bitmap,使用binary格式(二进制) ```sql setbit xx 7 1 #如果bitmap长度小于7+1,则扩充;设置第七位为0 (integer) 0 #会返回之前存储的值,默认为0 getbit xx 7 #获取第七位的值 (integer) 1
bitcount xx #统计bitmap里为1的位的数量
```javabitop 位运算操作 保存结果的键值 key/[key ...]位运算操作有AND 、 OR 、 NOT 、 XOR 这四种操作运算结果会自动创建并存储到设置的键值对key可以是一个bitmap或者多个bigmap,多个时用空格分隔127.0.0.1:6379> setbit 20210308 1 1127.0.0.1:6379> setbit 20210308 2 1127.0.0.1:6379> setbit 20210309 1 1#统计 20210308~20210309 总活跃用户数(应该是一直活跃的意思): 1bitop and desk1 20210308 20210309 #即011与010&运算,得010bitcount desk1 #结果1#统计 20210308~20210309 在线活跃用户数: 2127.0.0.1:6379> bitop or desk2 20210308 20210309,得011(integer) 1127.0.0.1:6379> bitcount desk2(integer) 2
空
nil即null
