key里面存储filed-value的map类型

redis数据结构

字符串类型

散列类型(Hash)

列表类型

集合类型

有序集合类型

key不要太长,最好不要超过1024个字节,但也别太短,要有一个统一的命名规范。value存储最长的字长是512M。

int 普通字符串不能用incrincrby没有的key则会帮忙创建int类型,还可自定义加减。decr , decrby

string 还可以进行拼接,append key1 key2

Hash 存储复杂数据,命令

设置value值 :hset myhash username zhangsan

査filed-value值:hgetall myhash

设置多值:hmset myhash addr beijing iphone 13213213213(hmset key value filed2 value2 ......给hash的key添加多个值)

取value值:hget key field

取多个值:hget key fileds

获取key的多个值:hgetall key

删除value:hdel key filed

删除整个list:del key

增加命令:hincrby key field increment

判断某个key是否存在:hexist key field

获取key包含field的数量:hlen key

获取所有的key:hkeys key

获取所有的value : hvals key

list数据类型

两端插入数据:lpush key values ,如果没有对应 的key就创建对应的空链。

在尾部添加元素 : rpush key values

查询范围内:lrange key start end (-1是最后一个元素,-2是倒数第二个元素)

左端弹出:lpop key

右端弹出:rpop key

获取列表中元素个数:llen key

向list左面插入,没有就不插:lpushx key value

向list右面插入,没有就不插:rpushx key value

删除count个值为value的元素:lrem key count value.count大于零从头到尾遍历,count小于零从尾至头遍历。

删除所有数字value : lrem key 0 value

设置链表index下标的值 :lset key index value (链表不存在则抛异常)

在pivot前或者后插入值 : linsert key before|after pivot value

将链表尾部的值弹出并插入头部:rpoplpush resource destination。 resource尾巴给了destination

rpoplpush resource resource :自己弹插自己。(可使用在消息队列场景)

set数据类型

set数据类型不允许出现重复数据类型

添加/删除元素:sadd key values/srem key members

获得集合中的元素:smembers key

判断集合中指定指定成员是否在set中,在返回1,不在或者不存在返回0.

集合的差集运算:sdiff key1 key2(返回的是key1 -key2的结果,与key的循序有关)

集合的交集运算:sinter key1 key2 key3

集合的并集运算:sunion key1 key2 key3

获取set中成员数量:scard key

随即返回set中的一员:srandmember key

将key1 key2相差的元素存储在destination上:sdiffstore destination key1 key2

将key1 key2交集存储在destination上:sinterstore destination key1 key2

将key1 key2并集存储在destination上:sunionstore destination key1 key2

使用场景:可以根据set的唯一性应用在ip地址上,或者购买某一个电子产品的用放在一起。

存储sortedset

sorted-set和set类型极其相似,他们都是字符串的集合都不允许出现在同一个set之中。sortedset每一个成员都有一个分数关联来给成员排序。分数 是可以重复的,

添加元素:zadd key score member score1 member1 score2 member2

返回指定成员元素:zscore key member

获取集合中成员数量:zcard key

删除元素:zrem key members (移除集合中指定的成员,可以使多个成员)

范围查询:zrange key start end [withscores] 顺带返回分数

按照分数从大到小的循序防返回所以从start到stop之间的元素:zrevrange key start stop

按照排名范围删除元素:zremrangebyrank key start stop

按照分数范围删除元素:zremrangebyscore key min max

返回分数在【min max】的成员按照分数从低到高排序,【withscores】显示分数 【limit offset count】offset 表明从脚标为offset的元素开始返回count个成员 : zrangebyscore key min max[withscores] [limit offset count]

设置指定成员增加的分数:zincrby key increment member

获取分数在【min, max】之间的成员:zcount key min max

返回成员在集合中的排名从小到大:zrank key member

返回成员在集合中的排名 :zrevrank key member

可以应用于大型在线游戏的积分排名,排名,topN等等内容

keys的通用操作

获取所有与pattern匹配的keys, 表示任意一个或者多个。?表示一个:keys /keys my?

删除指定的key : del key1 key2

判断key是否存在:exists key 存在返回1,不存在返回0

为当前key重命名:rename key newkey

为key设置过期时间 : expire key

获取key所剩的时间:ttl key

获取指定key的类型,并以字符串的形式返回,不存在返回none:type key

jedis

jedis.jar的本质就是用java语言操作redis.

创建配置文件properties文件,方便后期管理

//获取properties文件方式,更灵活
ResourceBundle re = ResourceBundle.getBundle("properties文件名");
//有zh_CN就读zh_CN 没有就读默认的。
maxTotal=Integer.parseInt(re.getString("key");)----------------------------------------------private static JedisPciolConfig;private static host;private static port;private static maxTotal;private static maxWaitMillis;static{jc=new JedisPciolConfig();//获取properties中的配置数据ResourceBundle:re = ResourceBurdle. ge tBundle("jedis");maxTotal=Integer . parseInt(re. getString("maxTotal"));maxWaitMillis=:Long . parseLong(re . getString( "maxWaitMillis"));host = re.getString("host" );port = Integer .parseInt(re.getString("port"));//创建Jedis池pool=new JedisPool(jc, host, port); I
}   //静态代码块不能调用非静态的数据,所以要定义成静态字段,静态方法。
public static Jedis getJedis(){return pool.getResource();
}
//硬编码的方式
@Test
public void testJedisPool(){//1获得连接池配置对象,设置配置项
JedisPoolConfig config = new JedisPoolConfig();
// 1.1最大连接数
config. setMaxTotal(30);
// 1.2最大空闲连接数
config. setMaxIdle(10);
//2获得连接池
JedisPool jedisPool = new JedisPool(config, "192.168.137.128", 6379);
//3获得核心对象
Jedis jedis = nu1l;
try {jedis = jedisPool. getResource();
//4设置数据
jedis . set("name", "itcast");
//5获得数据
String name = jedis.get("name");//name是key-value中的key
System. out. println(name);
} catch (Exception e) {e.printStackTrace();
} finally{if(jedis != nu1l){jedis.close();
//虚拟机关闭时,释放pool资源
if(jedisPool != null){jedisPool. close();
}

redis的特性

多数据库:redis和mysql一样允许多数据库。

订阅与发布消息:subscribe mychat ,订阅mychat频道

向指定的频道发布消息:publicsh mycaht ' ############ '

redis事务

nosql也支持四五级制,但是是伪事务

  1. 事务中的命令都会被串行执行,不会为其他的客户端提供任何服务,从而保证原子性
  2. redis一条命令执行失败,其他的命令还是会执行成功
  3. mutil表明开启事务,exec/discard表明提交和回滚事务,
  4. 如果任务队列在执行过程中被断电请情况打断,后面的命令将不会被执行。如果网络中断发生在客户端执行exec之前则所有命令都会被执行。
  5. 当使用appendonly模式时,redis会通过调用系统函数将本次所有写操作写入硬盘,发生宕机会写一半,redis会在重启时执行一致性检查,我们需要利用redis-check-aof工具,该工具帮助我们定位不一致的错误。

redis持久化

将内存中的数据同步到硬盘中的过程叫持久化,

rdb持久化:默认支持在指定间隔时间将数据集快照写入硬盘

aof持久话:以日志的形式记录服务器所处理的每一个写操作,redis重启就会重构数据库,保证完整。

无持久化:就相当于与一个memcached

redis可以同时使用rdb和aof

RDB

优势

  1. 一个数据库就一个文件
  2. 可以转移到其他服务器上进行解压
  3. 持久花是异步进行避免集中的io操作
  4. 相比aof如果数据量很大,rdb会有很高效率

劣势

  1. 如果想保证数据的高可用,应该避免数据的丢失
  2. 因为数据库是通过fork一个子进程进行io,如果数据量大会导致服务停止数秒。

配置说明Snapshotting

save900 1 #每900秒(15分钟)至少有1个key发生变化,则dump内存快照。 save300 10 #每300秒(5分钟)至少有10个key发生变化,则dump内存快照 save 60 10000 #每60秒(1分钟)至少有10000个key发生变化,则dump内存快照

AOF

优势

  1. 有更高的数据安全性,提供每秒同步,每次修改同步,和不同步,每次修改同步是效率最低的
  2. 因为是采用append模式,每次写入都是不会破坏以前的内容,如果发生数据一致性问题,可以使用工具来帮助姜茶
  3. append模式会自动启用rewirite机制,在对老文件修改的同时,也会创建新文件来记录哪些命令被修改。

劣势

  1. 相同数量aof通常会大于rdb
  2. 根据同步策略不同,aof在运行效率上玩玩慢于rdb,每秒同步效率很高,禁用同步的效率和rdb同样高

配置AOF

5.3.3.1配置信息 always #每次有数据修改发生时都会写入AOF文件 everysec #每秒钟同步- -次,该策略为AOF的缺省策略 no #从不同步。高效但是数据不会被持久化,

重写AOF:若不满足重写条件时,可以手动重写,命令:bgrewriteaof

redis key命名规范_redis简介相关推荐

  1. redis key命名规范_Redis几个实战经验积累

    redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列 ...

  2. redis key命名规范_公司内部 Redis 使用规范

    前言 在业务中,会经常使用 Redis 作为后端缓存.存储.如果结构规划不合理.命令使用不规范,会造成系统性能达到瓶颈.活动高峰系统可用性下降,也会增大运维难度.为了避免出现因 Redis 使用不当, ...

  3. Redis的key命名规范

    一.键值设计 1. key名设计 [建议]: 可读性和可管理性         1) 建议全部⼤写         2) key不能太长也不能太短,键名越长越占资源,太短可读性太差         3 ...

  4. json key 命名规范_jsonapi

    JSON API 规范 本文定义了一个标准的 JSON API规范,即一个应用于 Web 前后端 Ajax 数据交互规范,用以定义客户端如何获取与修改资源,以及服务器如何响应对应请求. JSON AP ...

  5. Redis常用命令及命名规范

    redis命令用于在redis服务上执行操作,要在redis服务上执行命令,需要一个redis客户端 del key,该命令用于在key存在时删除key,可以删除多个key dump key,查看某个 ...

  6. BEM 命名规范简介

    1.什么是 BEM 命名 BEM 是一个简单又非常有用的命名约定.让你的前端代码更容易阅读和理解,更容易协作,更容易控制,更加健壮和明确,而且更加严密.这篇文章主要介绍了CSS BEM 命名规范简介. ...

  7. redis 查看key的有效期_redis key的过期时间

    设置redis key的生存过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 命令用于将键key 的生存时间设置为tt ...

  8. Java命名规范简介

    1.类命名规范: 1-1.类名必须使用有意义的名字. 1-2.类名的每个单词的首字母必须大写-帕斯卡命名法. 1-3.类名不能使用数字 除了_和$之外的任何符号,中间不能添加空格,不能使用java关键 ...

  9. Java 命名规范(非常全)

    欢迎关注方志朋的博客,回复"666"获面试宝典 在本文中,将从大到小,从外到内,总结Java编程中的命名规范.文中将会涉及到日常工作中常见的命名示例,如包命名,类命名,接口命名,方 ...

最新文章

  1. IC/FPGA 技术交流
  2. 获得焦点时选择文本框的所有内容(Vanilla JS或jQuery)
  3. 改变单选或者复选框的样式
  4. Win7 解决宽带错误691的办法
  5. [云炬创业基础笔记]第九章企业的法律形态测试3
  6. TCPDUMP for Android(抓TCP数据包工具)
  7. [JavaScript] DOM操作技术
  8. Dynamics版本历史演进及Dynamics 365重要功能介绍
  9. docker-compose下载慢_编写Docker Compose时要注意的五大常见错误
  10. 英语笔记:词组句子:0906
  11. .net core 文件流保存图片_如何将图片打包成PDF文件进行保存?
  12. 体验QQ2011Beta3带来的变化和惊喜
  13. 图形界面组件实验的一点总结
  14. 微信公众号留言功能开通流程
  15. 学习笔记(04):程序员的数学:微积分-常用导数(一):最常用到的技巧
  16. 如何利用物联网关实现智慧路灯杆组网通信
  17. php 修改pdf文件内容,pdf中怎么擦掉某些内容
  18. BottomNavigationView 动态切换Icon且保留原图颜色
  19. 国产哈希算法WJLHA(六):自定义哈希长度的WJLHA3开源(JAVASCRIPT)
  20. 笔记本电脑连接wifi后突然上不了网解决方法汇总

热门文章

  1. 算法导论4--求最大和数组
  2. codeforces 471B. MUH and Important Things 解题报告
  3. Esfog_UnityShader教程_UnityShader语法实例浅析
  4. 纯css实现DIV以及图片水平垂直居中兼容多种浏览器(实现过程)
  5. 4地形编辑插件_SketchUp高效建模插件
  6. 差分进化算法python_差分进化算法Python实现
  7. keil5函数 默认返回值_Python列表有什么内置函数可以使用,怎么使用这些函数
  8. 删除同域名所有cookies_Namesilo域名解析DNS设置教程
  9. html字符串长度函数,最常用的20个javascript方法函数
  10. python人工智能是什么意思_人工智能和python有什么关系?