• redis中所有数据类型都是键值对形式存在
    • 键都是字符串型,值可以为各种类型
  • Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    常用命令

    1. 删除一个键值对 创建数据类型时如果键已存在会报错
    2. del 键名 命令执行后输出 (integer) 1,否则将输出 (integer) 0
    3. flushdb 清空数据库(清空当前库)
    4. flushall 清除全部库的数据
    5. select index index>0 切换数据库,不同库 16个库
    6. keys * 输出所有键
    7. clear 清屏
    8. expire 秒数 设置键值对过期时间
    9. ttl 查看key的剩余时间。存在但是未设置时效为-1。过期为-2,查不存在的key也为-2.因为键过期即被删除不存在
    10. type 查看数据类型
    11. exists 查看key是否存在
    12. move 把一个key移动到其他库
    13. ping 测试连接,正常返回PONG
    14. auth 密码 使用密码
    15. redis-cli.exe -a 密码 连接时就指定密码

    bigkey

  • 如果一个 key 对应的 value 所占用的内存比较大,那这个 key 就可以看作是 bigkey。除了会消耗更多的内存空间,bigkey 对性能也会有比较大的影响

    • string 类型的 value 超过 10 kb,复合类型的 value 包含的元素超过 5000 个(对于复合类型的 value 来说,不一定包含的元素越多,占用的内存就越多) 就算bigkey
  • 可以通过分析rdb文件找bigkey

  • string 是 redis 最基本的类型

  • 字符串引号是可有可无的,但是推荐字符串作为值时加引号
  • string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
  • string 类型的值最大能存储 512MB。同时一个键也是最大能存储 512MB
  • 字符串键貌似不能为中文,值可以为中文 ```shell set name “饶泽东” ok get name “饶泽东”

incr 键 将数字值+1 decr 键 数字 -1 decrby 键 值 数字值减少指定值 incrby 键 值 数字增加值 append 键 值 字符串值追加值

  1. <a name="pcdVl"></a>
  2. # 哈希
  3. - 哈希类似Map,是一组键值对的集合,所以特别适合用于存储对象
  4. - **哈希中的键值对的值都是字符串**
  5. - 每个 hash 可以存储 232 -1 键值对(40多亿)
  6. ```shell
  7. 创建
  8. hmset 对象名 属性1 属性1值 属性2 属性2值 ...
  9. 获取对象属性
  10. hget 对象名 属性名
  11. 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 输出所有元素

  1. <a name="N4Khd"></a>
  2. # Set
  3. - Redis 的 Set 是 string 类型的无序集合。不允许重复值。通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
  4. - 集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
  5. ```shell
  6. sadd 键 值 插入一个到set中,无则创建。成功返回 1,如果元素已经在集合中返回 0
  7. (integer) 1
  8. smembers 键 输出所有元素

zset 有序集合

  • Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
    • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数大小来为集合中的成员进行从小到大的排序。
    • 如果多个分数相同,此时貌似又是无序输出
  • zset的成员是唯一的,但分数(score)却可以重复。即插入已存在元素,值会被过滤不会再插入,但是分数会刷新

    1. zadd #插入一个元素
    2. 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的位的数量

  1. ```java
  2. bitop 位运算操作 保存结果的键值 key/[key ...]
  3. 位运算操作有AND 、 OR 、 NOT 、 XOR 这四种操作
  4. 运算结果会自动创建并存储到设置的键值对
  5. key可以是一个bitmap或者多个bigmap,多个时用空格分隔
  6. 127.0.0.1:6379> setbit 20210308 1 1
  7. 127.0.0.1:6379> setbit 20210308 2 1
  8. 127.0.0.1:6379> setbit 20210309 1 1
  9. #统计 20210308~20210309 总活跃用户数(应该是一直活跃的意思): 1
  10. bitop and desk1 20210308 20210309 #即011与010&运算,得010
  11. bitcount desk1 #结果1
  12. #统计 20210308~20210309 在线活跃用户数: 2
  13. 127.0.0.1:6379> bitop or desk2 20210308 20210309,得011
  14. (integer) 1
  15. 127.0.0.1:6379> bitcount desk2
  16. (integer) 2

  • nil即null