Redis入门介绍
-
Redis是什么?
Redis:REmote DIctionary Server(远程字典服务器)
是完全开源免费的,用C语言编写的,遵守BSO协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器。 -
Redis的三个特点:
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启时开源再次加载进行使用。
2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。 -
Redis能干什么?
1 .内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务。
2.取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面。
3.模拟类似于HttpSeesion这种需要设定过期时间的功能
4.发布,订阅信息系统
5.定时器,计时器 -
下载路径
1.Http://redis.io/(英文)
2.Http://www.redis.cn/(中文)
3.检验是否启动成功可以在命令行输入ping,显示PONG说明启动成功。
-
Redis启动后杂项基础知识
1.Redis是单进程
– 单进程模型来处理客户端的请求,对读写等事件的响应
– 是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行
– Epoll是Liunx内核为处理大批量文件描述符而做了改进的epoll,是Liunx下多路复用IO接口setlet/poll的增强版本,它能显著提高程序在大量并发连接中只有少数活跃的情况下的系统CPU利用率。
2.默认16个数据库,类似数组下标从零开始,初始默认使用零号库。
3.Select命令切换数据库
4.Dbsize查看当前数据库key的数量
5.Flushdb清空当前库
6.Flushall清空全部库
7.统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上
8.Redis索引都是从零开始
9.默认端口号6379
Redis数据类型
- Redis的五大数据类型
–String(字符串)
string是redis最基本的类型,可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的,意思是redsi的string可以包含任何数据。比如jpg图片或者序列化的对象
string类型是redis最基本的数据类型,一个redis中字符串value最多可以是512M
–Hash(哈希,类似java里的Map)
Redis hash是一个键值对集合
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类型java里面的Map<String,Object>
–List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)
它的底层实际是个链表
–Set(集合)
Redis的Set是String类型的无需集合,他是通过HashTable实现的。
–Zset(sorted set:有序集合)
Redis zset和set一样也是string类型的集合,且不允许重复的成员。
不同的是每一个元素都会关联一个double类型的分数
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复 - 获得redis常用数据类型操作命令:Http://redisdoc.com/ (大范围)
- 关于Keyd的操作(小范围)
– 1.exists key 测试指定key是否存在
– 2.del key1 key2 …keyN 删除给定key
– 3.type key 返回给定key的value类型
– 4.keys pattern 返回匹配指定模式的所有key
– 5.rename oldkey newkey 改名字
– 6.dbsize 返回当前数据库的key的数量
– 7.expire key seconds 为key指定过期时间
– 8.ttl key 返回key的剩下过期秒数(-1表示永不过期,-2表示以过期)
– 9.select db-index 选择数据库(一共有16个数据库,下标索引从0开始)
– 10.move key db-index 将key从当前数据库移动指定数据库
– 11.flushdb 删除当前数据库中所有key
– 12.flushall 删除所有数据库中的所有key
- 关于String类型的操作
– 1.set key value 设置key对应的值为String类型的value
– 2. mset key1 value1 …keyN valueN 一次设置多个key的值
– 3.mget key1 key2 …keyN 一个获取多个key的值
– 4.incr key 对key的值做加加操作,并返回新的值
– 5.decr key 对key的值做减减操作,并返回新的值
– 6.incrby key integer 同incr,加指定值
– 7.decrby key integer 同decr,减指定值
– 8.append key value 给指定key的字符串追加value(在原有字符串后追加)
– 9.substr key start end 返回截取过的key的字符串值- 性能总结:
– 字符串可以包含任何数据,包括jpg图片或者序列化对象
–单个value值最大上限是1G字节
- 性能总结:
- 关于List列表的操作(单值多列)
– 1.lpush key string 在key对应list的头部添加字符串元素
– 2.rpop key 从list的尾部删除元素,并返回删除元素
– 3.llen key 返回key 对应list的长度,key不存在返回0,如果key对应类型不是list返回错误
– 4.lrange key start end 返回指定区域内的元素,下标从0开始
– 5.rpush key string 同上 在尾部添加
– 6.lpop key 从list的头部删除元素 ,并返回删除元素
– 7.ltrim key start end 截取list,保留指定区间内元素
– 8.lrem key N value 删除N个value
– 9.lset key index value 为指定下标索引元素设置值
– 10.linsert key before /after 值1 值2 在指定元素前面/后面插入元素 - 性能总结:
– 它是一个字符串双向链表,通过push,pop操作从链表的头部或尾部添加删除元素
– list既可以做栈,也可以做队列
- 关于Set集合类型操作(单值多value)
– 1.sadd key member 添加一个string元素到key对应的set集合中,成功返回1,
如果元素已经在集合中,返回0,key对应的set不存在返回错误。
– 2.srem key member [member]从key对应set中移除给定元素,成功返回1
– 3.smove p1 p2 member 从p1对应set中移除member并添加到p2对应set中
– 4.scard key 返回set的元素个数
– 5.sismember key member 判断member是否在set中
– 6.sinter key1 key2 …keyN 返回所有给定key的交集
– 7.sunion key1 key2 …keyN 返回所有给定key的并集
– 8.sdiff key1 key2 …keyN 返回所有给定key的差集
– 9.smembers key 返回key对应set的所有元素,结果是无序的
- 关于Hash类型操作(KV模式不变,但V是一个键值对)
– 1.hset key(类似于集合变量) value(类似于map中的键) value(类似于map中的值) 向一个集合中添加 键值对
– 2.hget key(类似于集合变量) value(类似于map中的键) 从集合中通过键找值
– 3.hmset 原理同上1,但可以设置多个值
– 4.hmget 原理同上2,当可以获取多个值
– 5.hgetall key获取变量中的所有键值对
– 6.hdel key value 通过键值删除集合中指定值
– 7.hlen key 获取集合长度
– 8.hkeys key 获取所有的键
– 9.hvals key 获取所有的值
– 10.hincrby key value number在集合中给指定键所对应的值增加number(整数)
– 11.hincrbyfloat key value number在集合中给指定键所对应的值增加number(小数)
– 12.hsetnx key value value 判断集合中是否存在键值对,如果存在,操作无效,反之就添加
(集合中存在age所以就添加失败,map集合键是唯一的)
(集合中不存在所以添加成功)