Redis
REmote DIctionary Server(远程字典服务器)
是完全开源免费的,用C语言编写的,遵守BSD协议,
是一个高性能的(key/value)分布式内存数据库,基于内存运行
并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,
也被人们称为数据结构服务器
作用:
1:内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
2:取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面
3:模拟类似于HttpSession这种需要设定过期时间的功能
4:发布、订阅消息系统
5:定时器、计数器
特点:
1: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
2: Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
3:Redis支持数据的备份,即master-slave模式的数据备份
如何获取redis
1: http://redis.io/
2: http://www.redis.cn/
Key关键字指令
常用指令:key
Keys *:指令 查看当前这个库中所有的key值
exists key名字: 判断某个key值是否存在 0表示不存在 1表示存在
move key名字 数据库的索引下标: 将某个值移除到指定的库中
Redis默认有16个库,我们可以通过修改redis配置文件redis.conf来改变库的数量
Select 下标可以切换不同的数据库: select 下标
expire key名字 秒:设定指定的key的存活时间
ttl key名字:查看当前的key还有多少存活时间 -1 表示永不过期,-2表示已经过期
type key名字: 查看当前key的类型(key String,Object)
String类型数据指令
Set key名字 value值: 设置单一键值对(key值相同会覆盖原来的值,类似于map集合)
Get key名字 :获取指定key的值
Del key名字 :删除指定名称 key
Append key名字 新值: 在原有的值的基础上添加新的值
Strlen key名字: 获取字符串的长度
(value值必须是数字)
Incr(value值自动加1) : incr key名字;
decr(value值自动减1) :decr key名字;
incrby 递增值: incrby key名字 数字;
decrby 递减值:decrby key名字 数字;
Getrange : GETRANGE key start end: 获取value值的一部分
Setrange :SETRANGE key 起始位置 值: 从起始位置开始替换值
Setex: SETEX key名字 存活时间 值: 设定一组值同时设定存活时间(单位秒);
Setnx: SETNX key名字 值: 设置永久存活的一组值。(key值冲突无法存入值--返回值为0)
Mset: mset key 值 key 值.... 一次设定多组值,如果key值存在也会覆盖
Mget: mget key key 一次获取多个key的值
Msetnx: 一次设定多组key值,如果有key值存在无法添加完成
List类型(添加 删除内容):
Lpush: 向集合中添加内容 lpush 集合的名字 值 显示的顺序和添加的顺序相反。
Rpush: 向集合中添加内容 rpush 集合的名字 值 添加顺序就是显示顺序
Lrange 集合的名字 起始位置 结束位置(-1代表到集合的末尾)
Llen: llen 集合的名字 查看集合的长度
Lpop: lpop 集合的名称 移除集合中的第一个元素
Rpop: rop 集合的名称移除集合中的最后一个元素
lindex : 获取制定索引的值 lindex 集合的名称 索引数值
Lrem :删除指定数量的值: lrem 集合的名称 个数 值(集合中有重复值);
Set集合
Sadd:添加值 sadd 集合名称 值....
Smembers:查看值 smembers 集合名称
Scard : 集合中元素个数 scard 集合名称
Srem : 删除集合中的某个值 srem 集合名称 值;
SPOP: 随机从集合中移除一个数据 spop 集合名称
Smove: 将集合中的某个值赋给另外一个集合: SMOVE 集合1 集合2 值;
Sdiff: 差集
Sinter:交集
Sunion:并集
Hash(哈希)(key value(key value))
redis hash是一个键值对的集合, 是一个string类型的field和value的映射表,适合用于存储对象(key value(key,value))
Hset:存放一组键值对 hset key 值的名称 具体的值;(重复添加会覆盖原来的值)
Hget:获取一个值: hget key 值的名称
Hmset: 设定多组键值对 HMSET customer id 1 name zs address beijing
Hmget: 获取过个键对应的值 hmget customer id name address
Hgetall: 获取所有的数据 hgetall key值;
Hdel: 删除某个指定的key的一组value hdel customer id
Hlen: 当前的key 有几组对应的键值对
Hexists: 判断当前key中是否有指定名称的键值对: hexists customer id;
Hkeys:获取所有的key
Hvals: 获取所有的值
Hincrby: 增加指定步长的数据 hincrby customer age 2;
Hincrbyfloat: 在原有的基础上增加指定的小数。 hincrbyfloat customer course 0.5
Hsetnx: 如果value中的key重复不能添加到集合中。
Zset
zset(sorted set 有序集合) 是string类型的有序集合,也不可重复
sorted set中的每个元素都需要指定一个分数,根据分数对元素进行升序排序,如果多个元素有相同的分数,则以字典序进行升序排序,sorted set 因此非常适合实现排名
Zadd:创建集合并设定标准 zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5(等级划分的数据)
游戏 : 青铜 白银 黄金。。。
普通 vip
Zrange: 查询所有的标准 ZRANGE zset01 0 -1 , ZRANGE zset01 0 -1 withscores
ZRANGEBYSCORE :根据分数查询内容
ZRANGEBYSCORE zset01 60 90 (注意如果前面添加”(” 表示不包含节点的意思) withscores limit 起始位置 数量.zrangebyscore zs01 (10 30
Zrem :删除元素 zrem 集合 某score下对应的value值。ZREM zset01 v5
Zcard: 统计有几个键值对 zcard 集合
Zcount: zcount 集合 数值1 数值2 统计区间的值
Zrank : 统计对应的下标 zrank 集合名 values zrank zs01 v3
Zscore : zscore 集合名 values 获取对应的分数 zscore zs01 v1
事务控制
开启事务:
Multi
提交事务
Exec
回滚事务
Discard
Redis事务不具备原子性,只要是正常执行的指令就会正常执行,遇到错误跳过错误,后面指令继续执行。