从零学习redis(0)--- 初识

redis 刘宇帅 5年前 阅读量: 1061

Redis 全称是 Remote Dictionary Server,是一个使用C编写的开源、支持网络、基于内存、可选持久化的键值对存储系统。可以别用作数据库、缓存和消息中间件。

Redis支持的数据结构及基本命令展示

这里只是展示最基本的操作,更多内容请参考redis文档

string

string类型是redis支持的最基本的数据类型,string类型的值可以是任何类型的字符串(包括二进制数据),例如你可以在一个建里保存一张jpeg图片。值的长度最大不能超过512MB。
set命令基本展示

127.0.0.1:6379> SET hello world // 设置一个值
OK
127.0.0.1:6379> get hello // 查询一个值
"world"
127.0.0.1:6379> DEL hello // 删除一个值
(integer) 1
127.0.0.1:6379> get hello // 查询一个不存在的值
(nil)
127.0.0.1:6379> EXISTS hello // 查询一个key是否存在
(integer) 0

list

list就是列表即有序元素的序列。Redis Lists基于Linked Lists实现,意味着不管list包含多少元素,在头部和尾部添加一个新元素的操作的复杂度都是常数级别的。
lists命令展示

127.0.0.1:6379> RPUSH mylist A // 往lists里添加一个元素
(integer) 1
127.0.0.1:6379> RPUSH mylist B // 往lists里添加一个元素
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1 // 查看lists全部元素
1) "A"
2) "B"
127.0.0.1:6379> RPUSH mylist C D E 1 "hello" // 往lists里添加多个元素
(integer) 7
127.0.0.1:6379> LRANGE mylist 0 -1  // 查看lists全部元素
1) "A"
2) "B"
3) "C"
4) "D"
5) "E"
6) "1"
7) "hello"
127.0.0.1:6379> RPOP mylist // 从后面删除一个元素
"hello"
127.0.0.1:6379> LPOP mylist // 从前面删除一个元素
"A"

lists在实际应用中可以用来作为消息队列,列表分页,推荐系统等。

hash

Redis hash看起来就像一个“hash"的样子,由键值对组成,Hash便于表示objects,实际上你可以放入一个hash的域数量没有限制(除了可用内存除外)。所以你可以任何方式使用hash。
hash命令展示:

127.0.0.1:6379> HSET user:1 name yushuai // 设置hash单个值
(integer) 0
127.0.0.1:6379> HMSET user:1 sex male age 25 // 设置hash多个值
OK
127.0.0.1:6379> HGET user:1 name // 获取hash单个值
"yushuai"
127.0.0.1:6379> HMGET user:1 name age // 获取hash多个值
1) "yushuai"
2) "25"
127.0.0.1:6379> HDEL user:1 name // 删除hash单个值
(integer) 1
127.0.0.1:6379> HGET user:1 name // 获取hash不存在的域值
(nil)

如上面展示所示,我们在日常业务中可以用hash存储用户的各类信息。

set

Redis Set是String的无需排列,集合成员是唯一的。Redis Set是通过哈希表实现的,所以添加删除修改的时间复杂度都是O(1)。集合最大的成员数是2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
set命令展示:

127.0.0.1:6379> SADD database mysql // 往set添加一个原素
(integer) 1
127.0.0.1:6379> SADD database redis mongodb sqlite // 往set添加多个元素
(integer) 3
127.0.0.1:6379> SMEMBERS database // 获得set的所有元素
1) "mysql"
2) "redis"
3) "mongodb"
4) "sqlite"
127.0.0.1:6379> SISMEMBER database memcache // 判断一个元素是否在set中
(integer) 0
127.0.0.1:6379> SISMEMBER database redis // 判断一个元素是否在set中
(integer) 1
127.0.0.1:6379> SPOP database // 删除一个元素
"mongodb"
127.0.0.1:6379> SCARD database // 获得元素数量
(integer) 3

sorted set

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
Sorted sets命令展示:

127.0.0.1:6379> ZADD database1 1 mysql // 添加一个元素
(integer) 1
127.0.0.1:6379> ZADD database1 2 redis // 添加一个元素
(integer) 0
127.0.0.1:6379> ZADD database1 3 mongodb // 添加一个元素
(integer) 1 
127.0.0.1:6379> ZRANGE database1 0 3 // 获得元素列表
1) "mysql"
2) "redis"
3) "mongodb"

bitmap

bitmap 并不是一种数据结构,他实际上存储的一个字符串,只是我们可以按位来设置字符串的每个位是0还是1。bitmap 一个 key 对应的字符串最大是 512MB 即 2^32 个位。
bitmap 一般用来作为标识位使用,比如根据用户 ID 作为标识位,比如如果 ID 为 100 的用户上线我们可以把key user:online 对应的第 100 位标识为 1。当然我们可以为该用户使用key user:online:100 设置 string 值 1 来表示用户在线,但是使用 bitmap 比较节省空间,使用 string 类型关 key 占据的空间就不容小觑,而 bitmap 只为每个用户分配一个位的空间。

127.0.0.1:6379> setbit user:online 100 1 // 标识用户 100 上线
(integer) 0
127.0.0.1:6379> setbit user:online 101 1 // 标识用户 101 上线
(integer) 0
127.0.0.1:6379> bitcount user:online // 查看在线用户数量
(integer) 2
127.0.0.1:6379> setbit user:online 100 0 // 标识用户 100 下线
(integer) 1
127.0.0.1:6379> bitcount user:online // 查看在线用户数量
(integer) 1

HyperLogLogs

HyperLogLogs 是用来做基数统计的,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的 12 KB,可以计算 2^64 个不同元素的基数,但是 HyperLogLogs 不记录具体元素。 什么是基数,基数就是一个集合中去重之后的数量。HyperLogLogs 可以用来计算每天 UV 数、IP 数、PV等。

127.0.0.1:6379> pfadd uv:2018-11-29 100
(integer) 1
127.0.0.1:6379> pfadd uv:2018-11-29 101
(integer) 1
127.0.0.1:6379> pfadd uv:2018-11-29 102
(integer) 1
127.0.0.1:6379> pfcount uv:2018-11-29
(integer) 3

geospatial

geospatial 是用来存储地理空间的,并提供距离和半径查询的功能。

127.0.0.1:6379> geoadd city 116.3 39.9 beijing 118.78 32.04 nanjing 117.2 39.1 tianjin // 添加 北京、南京、天津的坐标到 city
(integer) 3
127.0.0.1:6379> geodist city beijing nanjing km // 计算北京到天津的距离
"902.1791"
127.0.0.1:6379> geopos city beijing // 读取北京的坐标
1) 1) "116.30000084638595581"
   2) "39.90000009167092543"
127.0.0.1:6379> georadius city 116.3 39.9 100 km // 查找坐标 116.3,39.9 100公里内的城市
1) "beijing"
127.0.0.1:6379> georadius city 116.3 39.9 1000 km // 查找坐标 116.3,39.9 1000公里内的城市
1) "nanjing"
2) "tianjin"
3) "beijing"

提示

功能待开通!


暂无评论~