走进redis的大门

1.什么是redis

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。属于非关系型数据库。与我们经常用到的mysql,oracle等关系型数据库不一样。NoSql非关系型数据库。是不是感觉有学到了。

2.安装redis

对于其安装我就不在这里造轮子了,网上百度一大堆,我在这里就是为了对自己学习redis和在生产过程中运用redis的过程做一个记录。如果有问题请联系我。

  • 2.1 redis的启动,通过下载包下载下来以后,一般都需要重新make编译一下,当然也可以直接下载不需要编译的包,其目录结构一般如下:
    ├── 00-RELEASENOTES
    ├── bin
    ├── BUGS
    ├── CONTRIBUTING
    ├── COPYING
    ├── deps
    ├── dump.rdb
    ├── INSTALL
    ├── Makefile
    ├── MANIFESTO
    ├── README.md
    ├── redis.conf
    ├── runtest
    ├── runtest-cluster
    ├── runtest-sentinel
    ├── sentinel.conf
    ├── src
    ├── tests
    └── utils

  • 2.2 我们的命令行都在src目录下,简单介绍一下主要的命令:

./redis-benchmark //用于进行redis性能测试的工具
./redis-check-dump //用于修复出问题的dump.rdb文件
./redis-cli //redis的客户端
./redis-server //redis的服务端
./redis-check-aof //用于修复出问题的AOF文件
./redis-sentinel //用于集群管理

3.redis的简单运用

3.1 redis的数据结构

redis是一种高级的key:value存储系统,其中value支持五种数据类型:
1.字符串(string)
2.字符串列表(list)
3.字符串集合(set)
4.有序字符串集合(sorted sets)
5.哈希(hash)

对于key值的设置,有几点特别的说明:
1.key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率;
2.key也不要太短,太短的话,key的可读性会降低;
3.在一个项目中,key最好使用统一的命名模式,一般按照项目名:模块:具体的方法
例如:Apoll:person:personCode 这种格式,这样方便我们用redis的可视化工具去查看,同一个项目
中的key值都在一个目录下的不同层级里面, 很清晰明了,要不然key值会特别乱。

3.2 数据结构之 字符串

字符串(Strings)是Redis的基本数据结构之一,由key和value组成。我们可以这样类比成编程语言的变量:key代表变量名,value代表变量值。

基本方法

  • 1.存储一个数据
    set key value
127.0.0.1:6379[15]> set test 'nihao'
OK

  • 2 获取数据
    get key
127.0.0.1:6379[15]> get test
"nihao"
  • 3 获取所有的key值
    keys *
127.0.0.1:6379[15]> keys *
1) "test"
  • 4.修改key对应的value值

    • 4.1 进行修改
      set key newValue 如果key值存在则修改,如果key值不存在就创建
      127.0.0.1:6379[15]> set test 'buhaol'
      OK
    

    如果我们不希望set命令覆盖旧值,这时候我们可以在上面的命令后面加上 NX参数
    set key value NX 当key存在时,就不会覆盖旧值

     127.0.0.1:6379[15]> set test 'good' NX
     (nil)
    
    • 4.2 进行数据增添
      append key value 命令在key存在的情况下,value值会在旧值后面追加
     127.0.0.1:6379[15]> append test ' really?'
    (integer) 14
    127.0.0.1:6379[15]> get test
    "buhaol really?"
    --- 对数字而言
    127.0.0.1:6379[15]> set test1 23
    OK
    127.0.0.1:6379[15]> append test1 12
    (integer) 4
    127.0.0.1:6379[15]> get test1
    "2312"
    
    • 4.3 对数字的操作
      incr key 加1
      decr key 减一
      incrby key n 加N
      decrby key n 减N
     127.0.0.1:6379[15]> set num1 12
    OK
    127.0.0.1:6379[15]> incr num1
    (integer) 13
    127.0.0.1:6379[15]> get num1
    "13"
    127.0.0.1:6379[15]> incrdy num1 12
    (error) ERR unknown command `incrdy`, with args beginning with: `num1`, `12`, 
    127.0.0.1:6379[15]> INCRBY num1 12
    (integer) 25
    127.0.0.1:6379[15]> get num1
    "25"
    127.0.0.1:6379[15]> decr num1
    (integer) 24
    127.0.0.1:6379[15]> get num1
    "24"
    127.0.0.1:6379[15]> decrby num1 11
    (integer) 13
    127.0.0.1:6379[15]> get num1
    "13"
    
  • 5 删除数据
    del key 如果key存在则返回1,否则返回0

127.0.0.1:6379[15]> del num
(integer) 1
127.0.0.1:6379[15]> get num
(nil)
127.0.0.1:6379[15]> del num
(integer) 0

3.3 数据结构之Hash表

Redis hash 是一个string类型的field和value的映射表(key任然为key),hash特别适合用于存储对象,每个 hash 可以存储 232 - 1 键值对(43多亿)。使用Hash表不仅能够减少Redis中key的个数,还能优化存储空间,占用的内存要比字符串小很多

基本方法介绍

  • 1.添加数据
hset key field value
127.0.0.1:6379[15]> hset hh name 'tom'
(integer) 1
127.0.0.1:6379[15]> hget hh name
"tom"

--- 如果不想设置的field对应的value被覆盖,可以使用hsetnx
hsetnx key field value 
127.0.0.1:6379[15]> HSETNX hh name 'tom'
(integer) 0
127.0.0.1:6379[15]> hget hh name
"ben"
  • 2 一次性添加多个键值对信息
hset key field value [field1 value1]
127.0.0.1:6379[15]> hset hh name ben age 18
(integer) 1
  • 3 获取一个key对应的值
hget key field
127.0.0.1:6379[15]> hget hh name
"tom"
  • 4 获取多个key对应的值
hmget key field field1
127.0.0.1:6379[15]> hmget hh name age
1) "ben"
2) "18"
  • 5 获取所有key以及其对应的value
hgetall key
127.0.0.1:6379[15]> hgetall hh
1) "name"
2) "ben"
3) "age"
4) "18"
  • 6.获取所有的key值或者所有values值
hvals key
hkeys key
127.0.0.1:6379[15]> hvals hh
1) "ben"
2) "18"
127.0.0.1:6379[15]> hkeys hh
1) "name"
2) "age"
  • 7 获取hash表中的字段长度
hlen key
127.0.0.1:6379[15]> HLEN hh
(integer) 2
  • 8 判断key中field是否存在
hexists key field 如果存在返回1 不存在返回0
127.0.0.1:6379[15]> HEXISTS hh name
(integer) 1
127.0.0.1:6379[15]> HEXISTS hh age
(integer) 1
127.0.0.1:6379[15]> HEXISTS hh age1
(integer) 0
  • 9 删除表中对应的field
hdel key field [field1] 可以多个
127.0.0.1:6379[15]> HDEL hh age
(integer) 1
127.0.0.1:6379[15]> hlen hh
(integer) 1
127.0.0.1:6379[15]> hget hh age
(nil)

暂时就写这么多,很晚了,要睡觉了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值