最近在学习 redis, 做了比较详细的学习笔记, 分享给大家, 欢迎一起讨论和学习
第一部分, 简单介绍 redis 和 redis 的基本操作
NoSQL 的特点 :
数据库种类繁多, 但是一个共同的特点都是去掉关系数据库的关系型特性.
数据之间无关系, 这样就非常容易扩展, 也无形之间, 在架构的层面上带来了可扩展的能力.
NoSQL 无需事先为要存储的数据建立字段, 随时可以存储自定义的数据格式,
而在关系型数据库里, 曾删字段是一件很麻烦的事情, 数据量大就容易卡死.
redis 是什么, 能干什么
redis 是一个基于内存的以 key-value 存储的并且支持持久化 nosql 数据库,
可以用来做缓存, 消息队列, 等
一, redis 基本操作命令
get key -- 得到 key
set key string -- 设置 key
keys * -- 查看所有的 key
EXISTS key -- 判断这个 key 是否存在
move key db -- 移动 key 到某个库, 当前库就没有了
expire key -- 给 key 设置过期时间, 单位秒, 过期后 key 就清除
ttl key -- 查看 key 还有多少秒过期,-1 表示永不过期,-2 表示已过期, 其他的数字是单位秒.
type key -- 查看 key 是什么数据类型.
DEL key -- 删除某个 key
redis 数据类型
1,String -- 单 key 单 value
set/get/del/append/strlen
incr 自加 1,
decr 自减 1
incrby 加上多少
decrby 减去多少
-- 必须是数字才能进行加减
getrange -- 获取指定区间内的值, 类似于截取字符串, getrange key 0 3; 获取 key 第 0 到第 3 个中间的字符串.
setrange -- 设置指定区间范围内的值, setrange key 位置 具体值. 原来位置的值将被替换.
-- 加入 test="abcdef", setrange test 0 xxx, 把 test 从第 0 位开始, 设置成 xxx4. 结果是 "xxxdef"
setex(set with expire) 键秒值, set k1 10 abc, 设置一个键是 k1, 值是 abc, 存活 10 秒,
setnx(set if not exist),setnx k1 abc , 如果 k1 存在, 就不会设置.
mset(more set) -- 同时设置多个 key, mset k1 a k2 b k3 c
mget -- 同时 get 多个 key, mget k1 k2 k3
msetnx -- 同时设置多个值, 只要其中有一个 key 重复的, 就不成功, 所有 key 不存在的才成功.
getset(先 get 再 set) --
2,List -- 单 key 多 value
lpush --lpush list0 1 2 3 4 5 6 7, 从左边开始依次写入数据,(先进后出)
rpush --rpush list1 1 2 3 4 5 6 7, 从右边开始依次写入数据,(先进先出)
lrange --lrange list0 0 -1, 从左边, 依次取出数据.
lpop -- 从左边, 取出第一个值, 清除
rpop -- 从右边, 取出第一个值, 清除
lindex -- 根据索引下标获得元素,(从上到下), 索引从 0 开始.
llen -- 获取 list 的长度
lrem key -- 删除 N 个 value, lrem list0 2 a, 在 list 里面删除 2 个 a.
ltrim key -- 截取指定范围的值后再复制给 key.index 开始, index 结束
rpoplpush 源 目标 --rpoplpush list0 list1,list0 右边出站一个, 从左边追加上 list1 上;
lset key index value -- 给某个下标设置具体的值;
insert key before 值 after -- 把 befrore 和 after 插入到已经存在的值前后.
List 总结:
它是一个字符串链表, left,right 都可以插入添加,
如果键不存在, 创建新的链表; 键存在, 新增内容; 如果值全部移除, 对应的键也消失;
链表的操作无论是头和尾效率都高, 但对中间元素操作, 效率就低;
3,Set -- 单 key 多 value
sadd -- 添加 set 元素; sadd set01 1 1 2 2 3 3, 重复的会不添加;
smembers -- 取出 set 元素; SMEMBERS set01
sismember --sismember key 元素, 判断是否存在元素
scard --scard key; 获取集合里面的元素的个数.
srem key value -- 删除集合中某个元素; srem set01 1
srandmember key 某个整数 (例如: 3) -- 在 key 里面, 随机出 3 个 value;
spop key -- 随机出栈, 一次出一个;
smove key1 key2 key1 某个值 -- 把 key1 里面某个值移到 key2, 值的迁移;
数学集合类:
差集: sdiff key1 key2 -- 在第一个 set 里面, 不在第二个 set 里面
交集: sinter -- 都在两个 set 里面
并集: sunion -- 在 key1, 或在 key2 里面, 有去重功能
4,Hash --kv 模式不变, 但 v 是一个键值对;
- hset --hset user id 11(key 是 user,value 是 id:11),
- hget --hget user id:
hmset -- 同时设置多个 k v,hmset cust id 11 name xiepng sex man
hmget -- 同时获取多个 key 的值, hmget cust id name sex
hgetall -- 获取这个 key 里面的所有的 k v, hgetall cust
hdel -- 删除这个 key 里面的额某个 k v ;
hlen -- 计算设个 key 的长度, 里面有几个 k v ;
hexists key -- 在 key 里面是否存在某个值, hexists cust id
hkeys key -- 获取这个 key 下面所有的 keys,, hkeys cust;
hvals key -- 获取这个 key 下面所有的 values,, hvals cust;
hincrby -- 某个指定的 key 加上某个整数 (加小数会报错)
hincrbyfloat-- 某个指定的 key 加上某个小数 (加正数也不会报错)
hsetnx -- 如果不存在就 set 某个可以; 重复了不添加 (只能加单个 key)
5,ZSet --(有序集合, sorted set)
在 set 基础上, 加一个 score.
之前 set 是 k1 v1 k2 v2
现在是 k1 score v1 k2 score v2
- zadd --zadd zset1 60 v1 70 v2 80 v3 90 v4 100 v5
- zrange --zrange zset1 0 -1
- ZRANGE zset01 0 -1 withscores ,
zrangebyscore key 开始 score 结束 score ,withscores(, 不包含 limit 开始下标, 多少个;
-- ZRANGEBYSCORE zset1 (60 (90 limit 0 1
返回 zset1 里面 score 是 60 到 90 之间的 (不包含 60 和 90), 范围是从第 0 个开始, 截取 1 个
zrem key 某个 score 下对应的 value 值; 作用是删除元素;-- ZREM zset1 v5
zcard --ZCARD zset1 ; 计算这个 key 里面有多少个 kv 对
zcount key score 区间; --ZCOUNT zset1 60 90, 计算这个 key 里面的 score 在这个范围内的有多少个;
zrank key values 值, 作用是获取下标值, 这个 value 是第几个下标;--ZRANK zset1 v4
zscore key 对应值, 获取分数;--ZSCORE zset1 v2
zrevrank key values 值, 作用是逆序获得下标值; -- ZREVRANK zset1 v4
zrevrange 逆转取出指定范围内的值 ; --ZREVRANGE zset1 0 -1
zrevrangebyscore key score2 score1 ; 逆转取出 score 范围内的值 --ZREVRANGEBYSCORE zset1 90 60
要删除 zset 整个集合, 直接 del key 即可;
来源: http://www.bubuko.com/infodetail-2544806.html