redis基础

redis基础

NoSQL非关系型数据库

  1. 方便扩展,数据之间没有关系
  2. 大数据高性能(redis一秒可以读取8万次)
  3. NoSQL是一种细粒度的缓存,性能会比较高
  4. 数据类型是多样性的,不需要事先设计数据库
  5. 传统的RDBMS
  • 结构化组织
  • SQL
  • 数据和关系都存在单独的表中 row column
  • 数据定义语言
  • 严格的一致性
  • 基础的事务
  1. NoSQL
  • 不仅仅是数据
  • 没有固定的查询语言
  • 键值对存储、列存储、文档存储、图形数据库
  • 最终一致性
  • CAP定理4和BASE理论 (异地多活)
  • 高性能、高可用性、高可扩展性
  1. 3V:海量、多样、实时/3高:高并发、高可扩、高性能
  2. RDBMS + NoSQL一起使用
  3. 在应用和底层数据元之间,构建一层代理
    10.文档型数据库
  • MongoDB基于分布式文件存储的数据库,C++编写,用来处理大量的文档
  • MongoDB是一个介于关系型数据库和非关系型数据库之间的产品
  • ConthDB
  1. 列存储数据库
  • HBase
  • 分布式文件系统
  1. 图关系数据库

redis基础

  1. redis是非关系型数据库、缓存数据库、远程字典服务、也被称为结构化数据库
  2. 基于网络,可基于内存可持久化的key-value数据库,提供多种语言的api
  3. 用处
  • 内存存储、持久化
  • 效率高可用于高速缓存
  • 发布订阅系统
  • 地图信息分析
  • 计时器、计数器(浏览量)
  1. redis-benchmark官方压力测试工具
  2. redis是单线程的

redis命令

  1. 关机shutdown
  2. select 1切换数据库,默认16个数据库
  3. DBSIZE 查看DB大小
  4. 启动ps -ef|grep redis redis-server redis-config/redis.conf redis-cli -p 6379
  5. 查看所有的key *
  6. 清空当前数据库flushdb
  7. 清空所有数据库flushall
  8. 是否存在keyexists name
  9. 将数据移动到数据库1move name 1
  10. 10秒?10个滴答 过期expire name 10 time to live ttl
  11. 追加 append key1 "hello"
  12. 加一操作incr num 减一操作decr num
  13. 指定数值操作incrby num 10 decrby num 4
  14. 截取字符串getrange key1 0 3
  15. 替换相应位置的字符串 setrange key1 1 abc
  16. setex key3 30 "hello"设置过期时间
  17. setnx key3 "redis"如果不存在再创建key3,如果存在直接创建失败
  18. 批量设置,批量获取,mset mget,原子性操作一个不成功,全部都不成功,或者全部成功
  19. 设置一个对象set user:1{name:zhangsan, age:2}设置一个对象,值为jsonmset user:1:name zhangshang user:1:age 2
  20. getset先get再set
  21. 操作命令记录
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    127.0.0.1:6379[1]> dbsize #占用内存大小
    (integer) 0
    127.0.0.1:6379[1]> set name luxinwei
    OK
    127.0.0.1:6379[1]> get name
    "luxinwei"
    127.0.0.1:6379[1]> dbsize
    (integer) 1
    127.0.0.1:6379[1]> keys *
    1) "name"

    127.0.0.1:6379> getset db redis 如果不存在则返回nil,并设置新的
    (nil)
    127.0.0.1:6379> get db
    "redis"
    127.0.0.1:6379> getset db mongodb 如果存在则返回原来的值,并设置新的
    "redis"
    127.0.0.1:6379> get db
    "mongodb"

list基本的数据类型,相当于双向队列

  1. lpush,rpush 尾部插入
  2. lpop,rpop 移除尾部
  3. lrange,rrange 范围
  4. lindex,rindex 下标
  5. ltrim,rtrim修剪,list截断
  6. rpoplpush 移除列表的最后一个元素,移动到新的列表中
  7. 列表存在,才能使用lset list 0 item
  8. linsert list before two twotwo插入
  9. 在收尾插入或改动值效率最高,中间元素效率较低
  10. 消息队列lpushrpop
  11. 栈lpushlpop

hash key-map集合

  1. hash更适合对象的存储
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    127.0.0.1:6379> hset myhash field hash1
    (integer) 1
    127.0.0.1:6379> hget myhash field
    "hash1"
    127.0.0.1:6379> hmset myhash field1 hello field2 world #批量创建
    OK
    127.0.0.1:6379> hmget myhash field1 field2
    1) "hello"
    2) "world"
    127.0.0.1:6379> hgetall myhash #获取全部数据
    1) "field"
    2) "hash1"
    3) "field1"
    4) "hello"
    5) "field2"
    6) "world"
    127.0.0.1:6379> hdel myhash field #删除指定字段
    (integer) 1
    127.0.0.1:6379> hexists myhash field2 #判断hash中是否存在指定字段
    (integer) 1
    127.0.0.1:6379> hset myhash field3 5
    (integer) 1
    127.0.0.1:6379> hincrby myhash field3 5 #指定增量
    (integer) 10
    127.0.0.1:6379> hsetnx myhash field3 hello #如果存在不可以设置
    (integer) 0
    127.0.0.1:6379> hsetnx myhash field4 hello #如果不存在可以设置
    (integer) 1

Zset有序集合

  1. 在set基础上增加了一个值,set k1 v1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    127.0.0.1:6379> zadd myset 1 one
    (integer) 1
    127.0.0.1:6379> zadd myset 2 two 3 three
    (integer) 2
    127.0.0.1:6379> zadd salary 2500 a
    (integer) 1
    127.0.0.1:6379> zadd salary 1999 b
    (integer) 1
    127.0.0.1:6379> zadd salary 3000 c
    (integer) 1
    127.0.0.1:6379> zrangebyscore salary -inf +inf #正向排序
    1) "b"
    2) "a"
    3) "c"
    127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
    1) "b"
    2) "1999"
    3) "a"
    4) "2500"
    5) "c"
    6) "3000"
    127.0.0.1:6379> zrevrangebyscore salary +inf -inf #反向排序
    1) "c"
    2) "a"
    3) "b"
    127.0.0.1:6379> zrem salart b #移除元素
    (integer) 1
    127.0.0.1:6379> zcard salary #获取成员数量
    (integer) 3
    127.0.0.1:6379> zadd myset 1 hello
    (integer) 1
    127.0.0.1:6379> zadd myset 2 world 3 aaaa
    (integer) 2
    127.0.0.1:6379> zcount myset 1 3 #获取指定区间的成员数量
    (integer) 3

set排序作用

  1. 存储成绩表、工资表排序
  2. 排行榜
  3. 重要消息,带权重进行判断
WhitneyLu wechat
Contact me by scanning my public WeChat QR code
0%