资料来源:http://www.atguigu.com/download.shtml

一,Redis是什么?

Redis:REmote DIctionary Server(远程字典服务器),是一个用C语言编写的,遵守BSD协议,高性能的(key/value)分布式内存数据库(开源),基于内存运行并支持持久化,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。

二,redis的特点

  • 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  • Redis支持数据的备份,即master-slave模式的数据备份

三,永远的hello world

安装redis就不多说了,解压安装包之后再在解压目录make,makeinstall。查看默认安装目录(注,多余的rdb文件和log文件是我自己新建的):

这里写图片描述

  • redis-benchmark: 性能测试工具

  • redis-check-aof:修复有问题的AOF文件

  • redis-check-dump:修复有问题的dump.rdb文件

  • redis-cli:客户端,操作入口

  • redis-sentinel:redis集群使用

  • redis-server:Redis服务器启动命令

    为了不改变默认配置,将redis.conf(redis的解压目录中)拷贝出来,保存在其他目录,如我保存在/root/myredis目录下。

修改redis.conf文件将里面的daemonize no 改成 yes,让服务在后台启动。

启动redis:


redis-server /root/myredis/redis.conf 
 #设置Redis服务端启动配置文件

redis-cli -p 6379 
#启动Redis客户端进程

测试连通性

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 

helloworld示例:

127.0.0.1:6379> set hello HelloWorld
OK
127.0.0.1:6379> get hello
"HelloWorld"

四,杂项知识

  • redis默认16个数据库,类似数组下标从零开始,初始默认使用零号库

  • Select 命令切换数据库

  • Dbsize 查看当前数据库的key的数量

  • Flushdb:清空当前库

  • Flushall:通杀全部库

  • 统一密码管理:每一个数据库都是同样密码

  • redis索引都是从零开始,启动端口默认是6379

五,redis的key和五大数据类型

key
keys * 查看数据库中所有的键

127.0.0.1:6379> keys *
1) "hello"

exists key hello 判断某个key是否存在

127.0.0.1:6379> exists key hello
(integer) 1

expire key 秒钟:为给定的key设置过期时间

ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期

数据类型之String类型:string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。一个redis中字符串value最多可以是512M

set/get/del/append/strlen,添加、查询、修改、删除字符串以及得到字符串长度

127.0.0.1:6379> set key1 val1
OK
127.0.0.1:6379> get key1
"val1"
127.0.0.1:6379> strlen key1
(integer) 4
127.0.0.1:6379> append key1 haha
(integer) 8
127.0.0.1:6379> get key1
"val1haha"
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> keys *
1) "hello"

incr/decr/incrby/decrby,对字符串进行加减,一定要是数字才能进行加减

127.0.0.1:6379> incr key2
(integer) 2
127.0.0.1:6379> get key2
"2"
127.0.0.1:6379> decr key2
(integer) 1
127.0.0.1:6379> get key2
"1"
127.0.0.1:6379> incrby key2 3
(integer) 4
127.0.0.1:6379> get key2
"4"
127.0.0.1:6379> decrby key2 3
(integer) 1
127.0.0.1:6379> get key2
"1"

getrange: 获取指定范围内的值,从零到负一表示全部

setrange: 设置指定区域内的值

 127.0.0.1:6379> set key3 abcd123
OK
127.0.0.1:6379> GETRANGE key3 0 -1
"abcd123"
127.0.0.1:6379> SETRANGE key3 4 efgh
(integer) 8
127.0.0.1:6379> get key3
"abcdefgh"

setex(set with expire)键秒值/setnx(set if not exist)
setex:设置带过期时间的key,动态设置。格式:setex 键 秒值 真实值
setnx:只有在 key 不存在时设置 key 的值。

127.0.0.1:6379> setex k4 10 v4
OK
127.0.0.1:6379> ttl k4
(integer) 5

mset/mget/msetnx

mset:同时设置一个或多个 key-value 对。

mget:获取所有(一个或多个)给定 key 的值。

msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k4 v4 k5 v5
(integer) 0
127.0.0.1:6379> mget k4 k5
1) (nil)
2) "v5"

数据类型之list: List(列表)底层实际是个链表

lpush/rpush/lrange,生成链表,lpush最先保存的序号在最前面

127.0.0.1:6379> LPUSH list01 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE list01 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> RPUSH list02 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE list02 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

lpop/rpop,得到最左边的值和最右边的值

127.0.0.1:6379> lpop list01
"5"
127.0.0.1:6379> rpop list01
"1"
127.0.0.1:6379> lrange list01 0 -1
1) "4"
2) "3"
3) "2"

lindex,按照索引下标获得元素(从上到下),llen获取list的大小

127.0.0.1:6379> LINDEX list01 2
"2"
127.0.0.1:6379> LLEN list01
(integer) 3

ltrim:截取指定索引区间的元素,格式是ltrim list的key 起始索引 结束索引,截取当前范围的值再赋值给key

rpoplpush 源列表 目的列表,移除列表的最后一个元素,并将该元素添加到另一个列表并返回

数据类型Set,无序集合

127.0.0.1:6379> sadd set01 1 1 2 2 3 3
(integer) 3
127.0.0.1:6379> SMEMBERS set01 
1) "1"
2) "2"
3) "3"
#判断是否是set01集合成员
127.0.0.1:6379> SISMEMBER set01 1
(integer) 1

scard,获取集合里面的元素个数

srem key value 删除集合中元素

127.0.0.1:6379> SCARD set01
(integer) 3
127.0.0.1:6379> SREM set01 3
(integer) 1
127.0.0.1:6379> SMEMBERS set01
1) "1"
2) "2"

srandmember key 某个整数(随机出几个数)

spop key 随机出栈

smove key1 key2 在key1里某个值 , 作用是将key1里的某个值赋给key2

 127.0.0.1:6379> sadd set02 1 2 3 6 7 8
(integer) 6
127.0.0.1:6379> smembers set02
1) "1"
2) "2"
3) "3"
4) "6"
5) "7"
6) "8"
127.0.0.1:6379> sadd set01 1 2 3 4 5 6 7
(integer) 5
127.0.0.1:6379> smove set01 set02 5
(integer) 1
127.0.0.1:6379> smembers set02
1) "1"
2) "2"
3) "3"
4) "5"
5) "6"
6) "7"
7) "8"

交集(sinter key1 key2)/并集(sunion key1 key2)/差集(sdiff key1 key2)

数据类型之Hash:Hash(哈希,类似Java里的Map


127.0.0.1:6379> hset user id 11
(integer) 1
127.0.0.1:6379> hget user id
"11"
127.0.0.1:6379> hmset user id 11 name zhangsan sex male 
OK
127.0.0.1:6379> hgetall user
1) "id"
2) "11"
3) "name"
4) "zhangsan"
5) "sex"
6) "male"
127.0.0.1:6379> hmget user id name
1) "11"
2) "zhangsan"
127.0.0.1:6379> hdel user sex
(integer) 1
127.0.0.1:6379> hgetall user
1) "id"
2) "11"
3) "name"
4) "zhangsan"

hlen:获取hash列表的键值对数目

127.0.0.1:6379> hmset user id 11 name zhangsan sex male age 22
OK
127.0.0.1:6379> hgetall user
1) "id"
2) "11"
3) "name"
4) "zhangsan"
5) "sex"
6) "male"
7) "age"
8) "22"
127.0.0.1:6379> hlen user
(integer) 4

hexists key 在key里面的某个值的key

hkeys/hvals key,获取某个hash列表的key值和value值

hincrby key key1 n,hash列表某个key的value值加n

127.0.0.1:6379> hexists user id
(integer) 1
127.0.0.1:6379> hkeys user
1) "id"
2) "name"
3) "sex"
4) "age"
127.0.0.1:6379> hvals user
1) "11"
2) "zhangsan"
3) "male"
4) "22"
127.0.0.1:6379> hincrby user age 2
(integer) 24
127.0.0.1:6379> hvals user
1) "11"
2) "zhangsan"
3) "male"
4) "24"

数据类型之zset:sorted set,有序集合,在set基础上,加一个score值。之前set是k1 v1 v2 v3,现在zset是k1 score1 v1 score2 v2。

127.0.0.1:6379> zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5
(integer) 5
127.0.0.1:6379> zrange zset01 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
127.0.0.1:6379> zrange zset01 0 -1 withscores
 1) "v1"
 2) "60"
 3) "v2"
 4) "70"
 5) "v3"
 6) "80"
 7) "v4"
 8) "90"
 9) "v5"
10) "100"

zrangebyscore key 开始score 结束score

127.0.0.1:6379>  zrangebyscore zset01 60 90
1) "v1"
2) "v2"
3) "v3"
4) "v4"

limit用法:

127.0.0.1:6379>  zrangebyscore zset01 60 90 limit 2 2
1) "v3"
2) "v4"

zrem key 某score下对应的value值,作用是删除元素

zcount key score区间/zrank key values值,作用是获得下标值。zscore key 对应值,获得分数

127.0.0.1:6379> zrank zset01 v4
(integer) 3
127.0.0.1:6379> zcount zset01 60 90
(integer) 4
127.0.0.1:6379> zscore zset01 v4
"90"

逆序获得zset集合值

127.0.0.1:6379> zrevrange zset01 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"

根据分数逆序获取value值

127.0.0.1:6379> zrevrangebyscore zset01  90 60
1) "v4"
2) "v3"
3) "v2"
4) "v1"

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐