redis是一个nosql的产品,支持的存储数据的类型(value)很多,常见的类型有
string 字符串、
link 链表、
hash(类似php里面关联数组)、
set一组数据的集合(无序性、唯一性、确定性)、
sorted set:对无序集合的一个升级,里面的集合元素需要按照一定的权值(按照某个规则来排序)来排序
所有redis也叫作结构化的nosql数据库。
单独注意:如何设计redis下的key?
例如在mysql里面设计一张user表:
id | name | password | sex | |
1 | asion | admin88 | [email protected] | m |
4 | ruby | admin | [email protected] | f |
如果要把上面的user表转换成redis里面的key-value来保存,该如何设计key?
答:分如下几部
- 把mysql里面的表的名称换成redis里面key的前缀user:
- 把mysql里面的表的主键字段名称换成后缀后台的第二个字符 user:id:
- 把对应记录的主键id记录换成key的第三个部分 user:id:1:
- 把mysql里面其他的字段换成key的第四个部分 user:id:1:name
对应上面mysql表里面的数据,该这样保持在redis里面:
取出数据:
取id为1的用户名:
redis的数据类型:
①-string类型:
设置指定 key 的值 SET key value
获取指定 key 的值 GET key
将 key 中储存的数字值增1 $i++,注意:value的值必须是整数, 如果key不存在则从0开始 INCR key
②-hash类型:
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 – 1 键值对(40多亿)。
redis里面value的hash类型完类似php里面的关联数组
array(‘name’=>’asion’, ‘age’=>12);
js
var json = {‘name’:’caoyang’, ‘age’:12}
将哈希表 key 中的字段 field 的值设为 value 。 HSET key field value
获取存储在哈希表中指定字段的值。 HGET key field
同时将多个 field-value (域-值)对设置到哈希表 key 中。 HMSET key field1 value1 [field2 value2 ]
获取在哈希表中指定 key 的所有字段和值 HGETALL key
③-link链表类型:
将一个或多个值插入到列表头部 LPUSH key value1 [value2]
在列表中添加一个或多个值 RPUSH key value1 [value2]
获取列表指定范围内的元素 0代表第一个下标,-1代表最后一个下标 LRANGE key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 LTRIM key start stop
移出链表里面头部的第一个元素,并返回该元素 LPOP key
删除链表里面尾部的最后一个元素,并返回该元素 RPOP key
④-set类型:
一般来说我们口头上说的集合基本都是指的是无序集合
集合:
无序性 元素的位置没有讲究
唯一性 里面的元素不能重复
确定性 元素的个数是确定的
向集合添加一个或多个成员,并查看 SADD key member1 [member2]
获取集合的成员数 SCARD key
返回给定所有集合的差集 SDIFF key1 [key2]
返回给定所有集合的交集 SINTER key1 [key2]
返回所有给定集合的并集 SUNION key1 [key2]
⑤-sorted set类型:
向有序集合添加一个或多个成员,或者更新已存在成员的分数 score分数,权值 member成员元素 ZADD key score1 member1 [score2 member2]
通过索引区间返回有序集合成指定区间内的成员 WITHSCORES代表分数值递增(从小到大)来排序 ZRANGE key start stop [WITHSCORES] 下标参数 start 和 stop 都以 0 为底 负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
返回有序集中指定区间内的成员,通过索引,分数从高到底 成员的位置按分数值递减(从大到小)来排列,命令的其他方面和 ZRANGE 命令一样 ZREVRANGE key start stop [WITHSCORES]
redis的一些命令
- keys * 看所有的key
- del 删除key(成功返回1 不成功返回0)
- exists 检测key是否存在(存在返回1 不存在返回0)
- type 查看value的类型
- flushdb 清空当前数据库所有的key,只在测试的时候使用,线上千万不要使用。
- 当前数据库,注意redis默认是有16个数据库(下标从0开始),但是这个不怎么使用。使用select NUmber做切换
- flushall 清除所有数据库的key,千万慎用
- dbsize 查看当前数据库的key的个
- Expire 为给定 key 设置过期时间,以秒计。例:EXPIRE key 60