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"
- 4.1 进行修改
-
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)
暂时就写这么多,很晚了,要睡觉了