笔记-数据库-redis
笔记-数据库-redis
1. redis简介
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
它支持多种类型的数据结构,如 strings,hashes,lists,sets,有序集合sorted sets 。
数据库已经有很多了 ,db2,oracle,mysql,为什么还需要redis呢?
设计源自需求,redis的面对的需求是跨程序的内存级别的数据共享和管理,简单来说,有一小部分数据需要能够拥有内存速度级别的快速访问,又要能够跨程序访问,具有一定管理功能,最好还能够在需要的时候可以向硬盘写入和读取;
实现方法就是内存数据库了,redis是其中一种实现模式,类似的还有memcached。
总而言之,redis是一款优秀的nosql(非关系型),key-vlaue,内存级别的数据库!redis是单线程,操作是安全的。
常用场景是热数据,计数器,队列,分布式锁,最新列表等。
1.1. redis优点
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
2. redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- String(字符串)
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
- Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
每个 hash 可以存储 2^32 -1 键值对(40多亿)。
- List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
列表最多可存储 2^32 - 1 元素 (4294967295, 每个列表可存储40多亿)。
- Set(集合)
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd 命令
添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
- zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
3. redis 安装、启动及连接
3.1. 安装
3.1.1. windows环境
- 下载安装包;
- 解压,进入目录;
- cmd下执行redis-server.exe redis.windows.conf
3.1.2. linux环境
- 下载安装包;
- tar –xzf redis-….gz
- cd redis….
- make
- .src/redis-server
3.2. start redis及连接
启动redis-server
连接/查看是否启动成功redis-cli
4. 数据库管理
4.1. 启动/关闭/查看状态
- 启动:redis-server redis-conf
- 关闭:redis-cli shutdown
- 查看是否运行:ps aux|grep redis
- 设置密码后,上述关闭命令无效:
redis-cli -a [password]
回车后输入:shutdown
即可关闭redis,输入exit 退出。
4.2. 连接
本地连接数据库:redis-cli
远程连接:redis-cli –h 192.168.. –p 6379
4.3. 配置管理
redis配置文件是redis-conf;
4.3.1. 远程访问管理
需要做两点配置,首先将protected-mode 置为no;然后注释或修改访问限定IP
bind项。
4.3.2. 添加访问密码
- 添加密码
在配置文件中找到requirepass,添加密码即可
格式是requirepass password
注意,重启后可能启动redis失败,报错为打不开redis.conf,在启动时输入文件全路径即可。
- 带密码访问
连接命令不变,但连接后执行命令时会报错:(error) NOAUTH Authentication required.
使用auth password命令进行授权即可。
5. 数据操作/管理命令
5.1. 键命令
命令的基本语法如下:
command key_name
- keys pattern 查看符合模式的键;
- del keyname 删除键
- rename keyname newkeyname 修改键名
- type key 返回key的类型
- dump key 序列化给定的key,返回序列化后的值;
- exists key 是否存在key
- expire key seconds 为key设定过期时间,单位秒;
- expireat key timestamp 设置过期时间,timestamp是unix时间戳;
- pexpire key milliseconds 设置过期时间,单位毫秒;
- move key db 将key移动到指定数据库db中;
- persist key 移除过期时间;
- pttl key 返回剩余过期时间,单位毫秒;
- ttl key返回剩余过期时间,单位秒;
- randomkey 从当前数据库中随机返回一个key;
- renamenx key newkey 仅当newkey不存在时,将key改名为newkey;
5.2. string命令
键命令的基本语法如下:
command key_name
- set key value
- get key
- getrange key start end
- getset key value 将key的值设为value,并返回旧值;
- getbit key offset
- mget key1 [key2] 获取多个key的值
- setbit key offset value
- setex key seconds value 将value关联到key,并将key的过期时间设置为seconds,单位为秒;
- setnx key value 只有在key不存在的时候设置key的值;
- setrange key offset value
- strlen key
- mset key value [key value] 同时设置一个或多个key的值;
- msetnx key value [key value] 同时设置一个或多个key的值,当且仅当所有key不存在;
- psetex key milliseconds value 类似setex,但单位是毫秒;
- incr key 将key中储存的数字加1;
- incrby key increment
- incrbyfloat key increment
- decr key 数值减1
- append key value
5.3. hash命令
redis hash是一个string类型的field和value的映射表;
- hdel key field1 [field2]
- hexists key field
- hget key field
- hgetall key
- hincrby key field increment 为key中指定字段的整数值增量increment;
- hincrbyfloat key field incrment
- hkeys key 获取key所有的field
- hlen key
- hmget key field1 [field2]
- hmset key field1 value1 [field2 value2]
- hset key field value
- hsetnx key field value
- hvals key 获取哈希表中所有值
- hscan key cursor [match pattern ] [count count] 迭代哈希表中的键值对;
5.4. 列表命令
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
- blpop key1 [key2] timeout 移出并获取列表的第一个元素,如果列表没有元素会阻塞至超时或有元素;
- brpop key1 [key2] timeout 与上一命令类似,不过移出最后一个元素;
- brpoppush source destination timeout 从列表中弹出一个值,将弹出的元素插入另外一个列表并返回它,如无元素阻塞至超时;
- lindex key index 通过索引获取列表中的元素;
- linsert key before|after pivot value 在列表的元素前/后插入元素
- llen key
- lpop key
- lpush key value [value2]
- lpushx key value
- lrange key start stop
- lrem key count value
- lset key index value
- ltrim key start stop 修剪列表,只保留指定区间内的元素;
- rpop key
- rpoplpush source destination
- rpush key value [value2]
- rpushx key value
5.5. set
redis set是strin类型的无序集合,集合成员是唯一的。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
- sadd key member1 [member2] 添加成员
- scard key 获取成员数
- sdiff key [key2] 返回给定所有集合的差集
- sdiffstore destination key1 [key2] 返回给定集合的差集并存储在destination中;
- sinter key1 [key2] 返回给定集合的交集;
- sinterstore destination key1 [key2]
- sismember key member 判断member是否集合key的成员;
- smembers key 返回集合所有成员;
- smove source destintion member 将member元素从source移动到destination
- spop key 随机移除并返回key中一个元素;
- srandmember key [count] 随机返回集合中一个或多个元素
- srem key member1 [member2] 移除集合中一个或多个成员;
- sunion key1 [key2] 返回给定集合的并集
- sunionstore destination key1 [key2]
- sscan key cursor [match pattern] [count count]
5.6. sorted set
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
1 |
ZADD key score1 member1 [score2 member2] |
2 |
ZCARD |
3 |
ZCOUNT key min |
4 |
ZINCRBY key |
5 |
ZINTERSTORE |
6 |
ZLEXCOUNT key |
7 |
ZRANGE key start |
8 |
ZRANGEBYLEX |
9 |
ZRANGEBYSCORE |
10 |
ZRANK key |
11 |
ZREM key |
12 |
ZREMRANGEBYLEX |
13 |
ZREMRANGEBYRANK |
14 |
ZREMRANGEBYSCORE |
15 |
ZREVRANGE key |
16 |
ZREVRANGEBYSCORE |
17 |
ZREVRANK key |
18 |
ZSCORE key |
19 |
ZUNIONSTORE |
20 |
ZSCAN key cursor |
附录
6.
其它
6.1.
redis与memcached的区别
- redis与 memcached相比,redis支持key-value数据类型,同事支持list、set、hash等数据结构的存储。
- redis支持数据的备份,即master-slave模式的数据备份。
- redis支持数据的持久化。
- redis在很多方面支持数据库的特性,可以这样说他就是一个数据库系统,而memcached只是简单地K/V缓存。
- 它们在性能方面差别不是很大,读取方面尤其是针对批量读取性能方面memcached占据优势。当然redis也有他的优点,如持久性、支持更多的数据结构。
- 所以在选择方面如果有持久方面的需求或对数据类型和处理有要求的应该选择redis。
- 如果简单的key/value 存储应该选择memcached。
笔记-数据库-redis的更多相关文章
- SpringBoot学习笔记:Redis缓存
SpringBoot学习笔记:Redis缓存 关于Redis Redis是一个使用ANSI C语言编写的免费开源.支持网络.可基于内存亦可以持久化的日志型.键值数据库.其支持多种存储类型,包括Stri ...
- redis相关笔记(三.redis设计与实现(笔记))
redis笔记一 redis笔记二 redis笔记三 1.数据结构 1.1.简单动态字符串: 其属性有int len:长度,int free:空闲长度,char[] bur:字符数组(内容) 获取字符 ...
- SQL笔记 --- 数据库设计步骤(转)
SQL笔记 --- 数据库设计步骤 目录 总体设计过程需求分析概念结构设计逻辑结构设计数据库物理设计数据库实施数据库运行和维护 总体设计过程 0 » 下一篇:vim 命令集 posted @ 2012 ...
- 缓存数据库-redis数据类型和操作(list)
转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...
- linux --- 8. mysql数据库,redis 数据库
一. mysql 数据库 1.安装方式 ①yum安装 ②源代码编译安装 ③rpm包安装 yum安装的前提条件,是准备好yum源,可以选择163源,清华源,阿里云源,等等等 .安装mariadb的yum ...
- 涂抹mysql笔记-数据库中的权限体系
涂抹mysql笔记-数据库中的权限体系<>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确.mysql验证用户需要检查3项值:用户名.密码和主机来源(user.password. ...
- MySQL学习笔记-数据库文件
数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...
- MySQL学习笔记-数据库内存
数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...
- MySQL学习笔记-数据库后台线程
数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...
随机推荐
- 《Head First 设计模式》之观察者模式——天气显示
观察者模式(Observer) ——在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新. (出版者Subject+订阅者Observer=观察者模式) 特点 ...
- 用gethub下载ardupilot的最新源码
1进入gethub的官方网站https://github.com/作者:恒久力行 QQ:624668529 在搜索框内输入ardupilot并点击搜索点回车 2会看到很多工程,选择那 ...
- 对CSRF的理解及防范
对CSRF的理解: 假定a是一个银行网站, b是一个危险网站. 当用户在访问a, 并且session并未结束的情况下, 去访问b网站, b网站就可以通过隐藏的url或者是表单来伪造用户对a的get或者 ...
- sonarque下载和安装使用
参考地址: https://www.cnblogs.com/qiumingcheng/p/7253917.html https://www.cnblogs.com/cjsblog/p/10735800 ...
- 索引是否也能提高UPDATE,DELETE,INSERT速度 解释
insert 不会提高,insert 用不到索引,只会增加维护索引的时间. update ,更新索引列不会提高,少量更新非索引列,会有提高 : 更新索引列,索引要重新维护,更新非索引列,倒是没什么影响 ...
- v-if与v-show的区别
一.区别 v-if 动态的向DOM树内添加或者删除DOM元素:“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建:在初始渲染条件为假时,什么也不做. v-sho ...
- idea字体模糊
用jdk1.8的jre替换idea的jre64,但是记得在lib里加上jdk的lib中的tools.jar. 如图: 然后 将原来jre64的TOOLS.jar拷贝到替换后的jre的lib目录下,重启 ...
- Drupal常用的模块
CCK (Content Construction Kit ) : 添加字段模块 Views:生成列表 Tinymce:(Wysiwyg Editor) 常用的编辑器之一 Ajax Form Buil ...
- node的webserver模板
const express = require('express'); const swig =require('swig'); const fs = require('fs'); //创建服务器 c ...
- 51nod——2487小b和环
dp[ i ][ 0 ] : 第i个位置不取 dp[ i ][ 1 ] : 第i个位置取 这样就可以得到状态转移方程: dp[i][0]=max(max(dp[i][0],dp[i-1][1]),dp ...