学习总结-Redis
一,简介
redis(Remote Dictionary Server)是一种Nosql技术,它是一个开源的高级kv存储和数据结构存储系统,它经常被拿来和Memcached相比较,但是Memcached不提供持久化的数据保存机制而redis可以将数据保存在磁盘中,redis不仅仅是能够存储key和value这种简单的键值对,还能存储例如集合、hash表、列表、字典等。redis在整个运行过程中,数据统统都是存储在内存中的,因此,性能是相当高的,由于此特性,redis对于内存的要求比较高,它会周期性的将内存中的数据写入在磁盘中,从而实现数据持久化的访问能力,但是这种存储只是保证redis在下次启动还有数据可以读取,而不是提供访问。redis是单线程服务的,只有一个线程。redis还支持主从模式以及支持通过lua脚本去编写扩展,并且支持高可用和分布式集群解决方案。
二,特点
1,运行在内存
2,持久化
3,主从(借助于sentinel实现一定意义上的HA)
4,Clustering(分布式存储)
5,数据机构服务器:支持存储string、list、hash、set、Sorted Set,Bitmap,HyperLoglogs
6,能够作为队列使用
三,Redis的组件
redis-server
redis-cli
redis-benchmark(压测工具)
redis-check-dump && redis-check-aof 能够去检测文件是否损坏两种格式RDB/AOF格式
四,redis在Linux上的安装
1,安装redis编译的c环境,yum install gcc-c++
2,将redis-3.0.0.tar.gz上传到Linux系统中
3,解压到/usr/local下 tar -xvf redis-3.0.0.tar.gz -C /usr/local
4,进入redis-3.0.0目录 使用make命令编译redis
5,在redis-3.0.0目录中使用make PREFIX=/usr/local/redis install命令安装redis到/usr/local/redis中
6,拷贝redis-redis-3.0.0中的redis.conf到安装目录redis的bin中
7,启动redis 在bin下执行命令redis-server redis.conf
后端启动Redis:
修改redis.conf配置文件,daemonize yes 以后端模式启动
启动:
关闭redis:
或者
8,如需远程连接redis,需配置redis端口6379在linux防火墙中开发
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save
五,jedis操作Redis
1,导入Jar
2,创建一个JedisTest类:
2,jedis的连接池使用
六,Redis常用操作
redis是一种高级的key-value的存储系统。
其中的key是字符串类型,尽可能满足如下几点:
1)key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低查找 效率
2)key不要太短,如果太短会降低key的可读性
3)在项目中,key最好有一个统一的命名规范(根据企业的需求)
其中value支持五种数据类型:
1)字符串型 string
2)字符串列表 lists
3)字符串集合 sets
4)有序字符串集合 sorted sets
5)哈希类型 hashs
1.存储字符串string
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M
1 |
set key value 设定key持有指定的字符串value,如果该key存在则进行覆盖操作。总是返回"OK |
2 |
get key 获取key的value。如果与该key关联的value不是String类型,redis将返回错误信息,因为get命令只能用于获取String value 如果该key不存在,返回null。 |
3 |
getset key value 先获取该key的值,然后在设置该key的值。 |
4 |
del key 删除指定key |
5 |
incr key 将指定的key的value原子性的递增1.如果该key不存在,其初始值为0,在incr之后其值为1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。 |
6 |
decr key 将指定的key的value原子性的递减1.如果该key不存在,其初始值为0,在incr之后其值为-1。如果value的值不能转成整型,如hello,该操作将执行失败并返回相应的错误信息。 如果不是数字则报错: |
7 |
incrby key increment 将指定的key的value原子性增加increment,如果该key不存在,器初始值为0,在incrby之后,该值为increment。 如果该值不能转成整型,如hello则失败并返回错误信息 |
8 |
decrby key decrement 将指定的key的value原子性减少decrement,如果该key不存在,器初始值为0,在decrby之后,该值为decrement。如果该值不能转成整型,如hello则失败并返回错误信息 |
9 |
append key value(拼接字符串)如果该key存在,则在原有的value后追加该值;如果该key不存在,则重新创建一个key/value |
2.存储hash
Redis中的Hashe类型可以看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
1 |
hset key field value为指定的key设定field/value对( 值对)。 |
2 |
hgetall key获取key中的所有filed-vaule |
3 |
hget key field 返回指定的key中的field的值 |
4 |
hmset key fields 设置key中的多个filed/value |
5 |
hmget key fields 获取key中的多个filed的值 |
6 |
hdel key fields 删除key中的多个filed的值 |
7 |
del key 删除整个Hash |
8 |
hexists key field 判断指定的key中的filed是否存在 |
9 |
hlen key 获取key所包含的field的数量 |
10 |
hincrby key field increment 设置key中filed的值增加increment,如:age增加20 |
11 |
hincrbyfloat key field increment 设置key中filed的值增加increment,如:age增加20.5 |
12 |
hkeys key 获取所有的key |
3.存储List
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
Redis列表命令:
序号 |
命令及描述 |
1 |
rpush key value 向列表右边增加元素 |
2 |
rpush key value1 [value2] 向列表右边增加一个或者多个元素 |
3 |
lrange key start stop 获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:"-1"代表最后边的一个元素。 |
4 |
lpop key lpop命令从列表左边弹出一个元素,返回弹出的内容 |
5 |
rpop key rpop命令从列表右边弹出一个元素,返回弹出的内容 |
6 |
Llen key 获取列表中的元素个数 |
7 |
Lrem key count value Lrem 命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同: 当count>0时, Lrem 会从列表左边开始删除。 当count<0时, Lrem 会从列表后边开始删除。 当count=0时, Lrem 删除所有值为value的元素。 |
8 |
Lindex key index 获得指定索引的元素值 |
9 |
Lset key index value 设置指定索引的元素值 |
10 |
Ltrim key start stop 只保留列表指定片段 |
11 |
Linsert key before|after pivot value 向列表中插入元素 该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。 |
12 |
rpoplpush source destination移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
13 |
4.存储Set
1 |
sadd key values 添加一个或者多个元素 |
2 |
srem key values 移除一个或者多个元素 |
3 |
smembers key 获取所有的元素 |
4 |
sismember key value 判断元素是否在集合中,存在返回1否则返回0 |
5 |
sdiff key1 key2 获的属于key1并且不属于key2的元素构成的集合 |
6 |
sinter key1 key2 获得属于key1并且属于key2的元素构成的集合 |
7 |
sunion key1 key2 获得属于key1或者属于key2的元素构成的集合 |
8 |
scard key 获得集合中的元素个数 |
9 |
spop key 从集合中弹出一个元素,由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出 |
10 |
5.存储Sortedset
Sortedset又叫zset
Sortedset是有序集合,可排序的,但是唯一。
Sortedset和set的不同之处,是会给set中的元素添加一个分数,然后通过这个分数进行排序。
1 |
zadd key score member[score member…] 向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。 |
2 |
zscore key member获取元素的分数 |
3 |
zrem key member[member…]删除一个或者多个成员,不存在的成员将被忽略。当key存在但不是有序集类型时,返回一个错误。 红色框里面是没有的成员 |
4 |
获得排名在某个范围的元素列表 1)zrange key start stop 按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素) 2)zrevrange key start stop 按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素) 如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数 |
5 |
获取元素的排名(排名从0开始) 1)zrank key member 从小到大获取排名 2)zrevrank key member 从大到小获取排名 |
6 |
zrangebyscore key min max [withscores] [limit offset count] 获得指定分数范围的元素,如果需要获得元素的分数的可以在命令尾部加上withscores参数 ,limit offset count 和mysql中的limit使用方式一样 |
7 |
zincrby key increment member 增加某个元素的分数,返回值的更改后的分数 |
8 |
zcard key 获得集合中元素的数量 |
9 |
zcount key min max 获得指定分数范围内的元素个数 |
10 |
zremrangebyrank key start stop 按照排名范围删除元素 |
11 |
zremrangebyscore key min max 按分数范围删除元素 |
12 |
6,redis常用命令
1 |
keys 返回满足给定条件的所有key |
2 |
exists 确认一个key是否存在 |
3 |
rename 从命名key |
4 |
type 返回key的类型 |
5 |
设置key的生存时间 redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。 expire key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除 ttl key 查看key剩余的生存时间(返回-2表示已经删除) persist key 清除生存时间 pexpire key milliseconds 生存时间设置单位为:毫秒 |
学习总结-Redis的更多相关文章
- 学习之Redis(一)
一.redis简介 一般学习,最好先去官网,之所以建议看官网,是因为这是一手的学习资料,其他资料都最多只能算二手,一手资料意味着最权威,准确性最高.https://redis.io/topics/in ...
- 学习之Redis(二)
Redis的对象和数据结构 一.字符串对象(请参考学习之Redis(一):https://www.cnblogs.com/wbq1994/p/12029516.html) 二.列表对象 列表对象的编码 ...
- 【转】Nginx学习---Nginx&&Redis&&hcache三层缓存架构总结
[原文]https://www.toutiao.com/i6594307974817120782/ 摘要: 对于高并发架构,毫无疑问缓存是最重要的一环,对于大量的高并发,可以采用三层缓存架构来实现,n ...
- redis学习笔记——Redis过期键的删除策略
Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ...
- python学习之-- redis模块基本介绍
数据缓存系统: 1:mongodb:是直接持久化,直接存储于硬盘的缓存系统 2:redis: 半持久化,存储于内存和硬盘 3:memcache:数据只能存储在内存里的缓存系统关于memcache 学习 ...
- Redis学习笔记——Redis的基本操作
之前介绍过如何在ubuntu安装Redis服务器:https://www.cnblogs.com/zifeiy/p/9062738.html 接下来,我们在Redis上进行一些基本的操作. 所县使用命 ...
- Redis学习:Redis的安装与配置
Redis是新兴的一种内存数据库技术,在数据高速读写方面有着明显的优势.前几天,Redis3.0正式版本发布,为我们带来了Redis集群功能.这一功能很早就投入了开发,直到现在才真正走进我们的视野.可 ...
- 大数据学习day31------spark11-------1. Redis的安装和启动,2 redis客户端 3.Redis的数据类型 4. kafka(安装和常用命令)5.kafka java客户端
1. Redis Redis是目前一个非常优秀的key-value存储系统(内存的NoSQL数据库).和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list ...
- Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现
回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis ...
- python 学习笔记 redis操作
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
随机推荐
- CSU 1554 SG Value (multiset/priority queue 思维题)
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 Description The SG value of a set (mult ...
- Python3.5自带venv创建虚拟环境
为每个程序单独创建虚拟环境可以保证程序只能访问虚拟环境中的包,保持全局解释器的干净整洁,使其只作为创建(更多)虚拟环境的源. windows下创建虚拟环境 Python3.5自带venv,只需执行py ...
- Repository模式--采用EF Fluent API使用EntityTypeConfiguration分文件配置Model映射关系
EF中类EntityTypeConfiguration是一个很有用的类,在nopCommerence中就使用这个类来分文件分文件配置Model映射关系.今天我就来谈谈Repository模式在Enti ...
- _exit和exit的区别
在linux的标准库函数中,有一套称作高级I/O的函数,我们熟知的printf .fopen .fread .fwrite都在此列,他们也被称作缓冲I/O.其特征是对应每一个打开的文件,都存在一个缓冲 ...
- poj1182食物链(三类并查集)
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...
- Gradient Vanishing Problem in Deep Learning
在所有依靠Gradient Descent和Backpropagation算法来学习的Neural Network中,普遍都会存在Gradient Vanishing Problem.Backprop ...
- HTML5基本标签<搬运>
HTML语言基本标签: 创建一个HTML文档<html></html> 设置文档标题以及其他不在WEB网页上显示的信息<head></head> 设置文 ...
- [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)
题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...
- <转载>面试官: 讲讲MySql表设计需要注意什么?
作者:孤独烟 出处: http://rjzheng.cnblogs.com/ 综述 近期由于复习了一下MySQL的内容看到一篇比较好的文章,转载分享一下.大家看完,其实能避开很多坑.而且很多问题,都是 ...
- asp.net ajax的使用
参考:https://www.cnblogs.com/acles/articles/2385648.html https://www.cnblogs.com/xujingyang/p/5560646. ...