redis

redis

redis-server.exe redis.windows.conf

redis-cli.exe -h 127.0.0.1 -p 6379

set myKey abc

get myKey

redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库
redis是一个开源的使用ANSI C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value数据库,并提供多种语言的API.

BSD是Berkeley Software Distribution 伯克利软件发行版

nosql数据库在以下的这几种情况下比较适用
1.数据模型比较简单
2.需要灵活性更强的IT系统
3.对数据库性能要求较高
4.不需要高度的数据一致性
5.对于给定key,比较容易映射复杂值的环境

redis与其他key-value缓存产品有以下三个特点
1.redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
2.redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.redis支持数据的备份,集群等高可用功能。

make MALLOC=libc

make PREFIX=/usr/local/redis install

cp redis.conf /usr/redis

less -mN redis.conf

redis默认不是以守护进程启动

daemonize yes

bind 127.0.0.1

databases 16

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename dump.rdb

dir ./

masterauth master-password

requirepass foobared

maxclients 128

maxmemory

redis内存溢出处理方案
1.为数据设置超时时间

2.lru算法将不用的数据删除

./bin/redis-server ./redis.conf

ps -ef | grep -i redis

redis-cli -h host -p port -a password

./bin/redis-cli shutdown 正常关闭 会进行持久化

kill -9 pid

del ccc

dump ccc

expire ccc 10

ttl ccc

pttl ccc

pexpire ccc 10

//将快要过期的key设置为永久有效
persist bbb

set users:1 a
set users:2 b
set users:3 c

keys users:?

select 0

select 1

rename aaa aaaa

//将ccc移动到数据库1中
move ccc 1

type ccc

redis支持5种数据类型

string hash list set zset

//给不存在的key赋值,解决分布式锁方案之一
setnx ccc 1111111

getrange ccc 0 2

//getset命令用于设置指定key的值,并返回key的旧值,当key不存在时,返回nil
getset

//返回key所存储的字符串值的长度
strlen key

incr topic:num

decr topic:num

incrby topic:num 10

decrby topic:num 10

hset h1 name zhangsan

hget h1 name

hmset users:1 id 1 name zhangsan age 22

hmget users:1 id name age

hgetall users:1

hkeys users:1

hlen users:1

hdel users:1 age


hmset users:2 id 1 name zhangsan age 22

hincrby users:2 age 10

//age字段是否存在
hexists users:2 age

//查看已经开放的端口
firewall-cmd --list-ports

firewall-cmd --zone=public --add-port=6379/tcp --permanent

firewall-cmd --reload

package cn.tedu;public class RedisDemo {public static void main(String[] args){//连接池 redis 基本配置信息JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(5);//最大连接数poolConfig.setMaxIdle(1);//最大空闲数String host = "192.168.21.129";int port = 6379;JedisPool pool = new JedisPool(poolConfig, host, port);Jedis jedis = pool.getResource();jedis.auth("123456");System.out.println(jedis.ping());}
 /*** 测试字符串string* Redis中有哪些命令,Jedis中就有哪些方法*/@Test
public void t1(){Jedis jedis = new Jedis("192.168.21.130",6379);jedis.auth("123456");jedis.set("strName", "字符串的名称");String strName =jedis.get("strName");System.out.println(strName);jedis.close();
}public void t2(){Jedis jedis = new Jedis("192.168.21.130",6379);jedis.auth("123456");String key = "applicationName";if(jedis.exists(key)){String result =jedis.get(key);System.out.println(result);}else{String result ="微信";jedis.set(key, result);System.out.println(result);}}}

yum -y install gcc automake autoconf libtool make


config set protected-mode “no”

这个是可以跑通的

public class RedisDemo {public static void main(String[] args){String host = "192.168.21.128";int port = 6379;Jedis jedis = new Jedis(host,port);System.out.println(jedis.ping());}/*** 测试字符串string* Redis中有哪些命令,Jedis中就有哪些方法*/@Testpublic void t1(){Jedis jedis = new Jedis("192.168.21.128",6379);//jedis.auth("121121");jedis.set("strName", "字符串的名称");String strName =jedis.get("strName");System.out.println(strName);jedis.close();}@Testpublic void t2(){Jedis jedis = new Jedis("192.168.21.128",6379);String key = "applicationName";if(jedis.exists(key)){String result =jedis.get(key);System.out.println("redis数据库中查询到的:"+result);}else{String result ="微信";jedis.set(key, result);System.out.println("mysql数据库中查询到的:"+result);}}}

package cn.tedu;public class RedisDemo {public static void main(String[] args){JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(5);poolConfig.setMaxIdle(1);String host = "192.168.21.128";int port = 6379;JedisPool pool = new JedisPool(poolConfig,host,port);Jedis jedis = pool.getResource();System.out.println(jedis.ping());}/*** 测试字符串string* Redis中有哪些命令,Jedis中就有哪些方法*/@Testpublic void t1(){Jedis jedis = new Jedis("192.168.21.128",6379);jedis.auth("121121");jedis.set("strName", "字符串的名称");String strName =jedis.get("strName");System.out.println(strName);jedis.close();}@Testpublic void t2(){Jedis jedis = RedisPoolUtil.getJedis();String key = "applicationName";jedis.auth("121121");if(jedis.exists(key)){String result =jedis.get(key);System.out.println("redis数据库中查询到的:"+result);}else{String result ="微信";jedis.set(key, result);System.out.println("mysql数据库中查询到的:"+result);}RedisPoolUtil.close(jedis);}}
package cn.tedu;public class RedisPoolUtil {private static JedisPool pool;static {// 连接池 redis 基本配置信息JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(5);// 最大连接数poolConfig.setMaxIdle(1);// 最大空闲数String host = "192.168.21.128";int port = 6379;pool = new JedisPool(poolConfig, host, port);}public static Jedis getJedis() {Jedis jedis = pool.getResource();return jedis;}public static void close(Jedis jedis) {jedis.close();}}

@Testpublic void t3(){Jedis jedis = RedisPoolUtil.getJedis();jedis.auth("121121");String key = "users";if(jedis.exists(key)){Map<String,String> map = jedis.hgetAll(key);System.out.println(map.get("id")+" "+map.get("name")+","+map.get("age")+" "+map.get("remark"));}else{String id = "1";String name = "宋";jedis.hset(key, "id", id);jedis.hset(key, "name", name);jedis.hset(key, "age", "20");jedis.hset(key, "remark", "这是备注");System.out.println("这是从数据库中查出来的结果:"+id+"\t"+name);}    }

@Testpublic void t4(){Jedis jedis = RedisPoolUtil.getJedis();jedis.auth("121121");int id =1;String key = User.getKeyName()+id;if(jedis.exists(key)){Map<String,String> hash = jedis.hgetAll(key);//System.out.println(hash);User u = new User();u.setId(Integer.parseInt(hash.get("id")));u.setName(hash.get("name"));u.setPassword(hash.get("password"));u.setUsername(hash.get("username"));u.setAge(Integer.parseInt(hash.get("age")));System.out.println("redis数据库:"+u);}else{User u = new User();u.setId(id);u.setUsername("往往");u.setPassword("123123");u.setAge(22);u.setName("lailai");Map<String,String> hash = new HashMap<String,String>();hash.put("id", u.getId()+"");hash.put("name", u.getName()+"");hash.put("age",u.getAge()+"");hash.put("username", u.getUsername()+"");hash.put("password", u.getPassword());jedis.hmset(key, hash);System.out.println("mysql数据库:"+u);}}

ctrl + t

https://redisdesktop.com/download

string JAVA中的字符串

hash JAVA中的bean对象

list JAVA语言中的LinkedList类型

list类型

lpush l1 a b c d e f g
lrange l1 0 -1

rpush l2 1 2 3 4 5
lrange l2 0 -1

lpush l1 h

lpushx l2 -1

lrange l1 -3 -1

llen l1

lindex l1 1

lpop l1

rpop l1

blpop l1 500

brpop l3 1000

ltrim l1 1 3

lset l1 1 a

linsert l2 BEFORE c B //在c的前面插入B

rpoplpush l1 l2 将l1最右端元素添加到最左端

rpoplpush l1 l1

set 相当于java中的hashtable集合

sadd s1 a b c d e

scard s1

smembers s1

sismember s1 a

srandmember s1

srandmember s1 3

srem s1 a f g //删除语法

spop s1 2 //随机删除2个

sadd s2 1 2 3

smove s1 s2 d //将s1中的d移动到s2中

//差集
sadd s3 1 2 3 a b c d
sadd s4 3 a e f

sdiff s3 s4
结果//1 2 b c d

sinter s1 s2

sunion s1 s2

sdiffstore s5 s3 s4

zset//有序 不重复

zadd z1 99 java 80 html 100 database

zadd z1 88 ui 65 test 30 ps

zcard z1

zrange z1 0 -1

zrange z1 0 1

zcount z1 0 60

zcount z1 60 80

zcount z1 80 100

zrank z1 database //排名

zrevrange z1 0 -1

zrem z1 ps ps1

ZREMRANGEBYRANK z1 0 1 //根据排名删

ZREMRANGEBYSCORE z1 0 30 //根据分数范围删

subscribe cctv5

publish cctv5 cctv-nba

select 0
select 1
select 15
mv gradeName 1

flushdb //清除当前数据库的所有key

flushall //清除整个redis的数据库所有key

缓存预热

exec

redis事务命令

multi

set account:a 80
set account:b 100

get account:a
get account:b

decrby account:a 50
incrby account:b 50

exec


multi

set account:a 80
set account:b 100

get account:a
get account:b

decrby account:a 30
incrby account:b 30

discard


事务的错误处理

如果执行的某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚。

队列中的某个命令出现了报告错误,执行时整个的所有队列都会被取消


multi

set hello hello

sdfasdfsdf//不被识别的命令

exec


会报错,不会被执行


multi
get account:a
get account:b

incrby account:a 100
decrby account:b 100//同时在另外一个窗口操作set account:a 20000

exec


结果会发现account:a以20000计算

watch命令

watch account:b
multi

get account:a
get account:b
decrby account:b 100//同时在另一个窗口操作set account:b 2000000

exec

//执行结构nil

redis持久化

rdb
./bin/redis-cli shutdown
save 900 1
save 300 10
save 60 10000

aof

redis和mysql一致性

缓存雪崩

缓存穿透

触发器

高可用
高并发

redis主从复制

./bin/redis-server ./redis.conf --port 6380 --slaveof 127.0.0.1

./bin/redis-cli -p 6380 -a 121121

变为主: slaveof on one //不是任何从

变为从: slaveof ip地址 端口号

redis集群
bind 192.168.21.128
port 7000
daemonize no
pidfile /var/run/redis_7001.pid
cluster-enabled yes
cluster-config-file nodes-6379.conf

cp -r ./src /usr/local/redis_cluster/7001

./7001/src/redis-server ./7001/redis.conf

ps -ef | grep -i redis

redis-trib.rb

cp redis-trib.rb /usr/local/bin

redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis

先安装rvm ,再把ruby版本提升

gpg --keyserver hkp://keys.gnupg.net --recv-keys
409B6B1796C275462A1703113804BB82D39DC0E3
7D2BAF1CF37B13E2069D6956105BD0E739499BDB

千锋教育redis笔记相关推荐

  1. PyEcharts学习笔记整理,基于B站千锋教育

    目录 1. PyEcharts:初始化配置.全局配置项(标题配置.缩放配置) 2. PyEcharts:全局配置项(图例配置项.视觉映射配置项.提示框配置项.坐标轴配置项) 3. PyEcharts: ...

  2. 千锋Django学习笔记

    千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...

  3. HTML5从入门到精通(千锋教育)免费电子版+PDF下载

    本书是HTML5初学者极好的入门教材之一,内容通俗易懂.由浅入深.循序渐进.本书内容覆盖全面.讲解详细,其中包括标签语义化.标签使用规范.选择器类型.盒模型.标签分类.样式重置.CSS优化.Photo ...

  4. 千锋教育python2104期总结day2

    千锋教育python2104期总结day2 第一次总结: 基础语法和变量 目录 更改基础设置, 写出第一句代码 基础语法 输入和输出函数 变量 正文 1. 更改基础设置,写出第一句代码 1)设置pyc ...

  5. 千锋教育python2104期总结day14

    千锋教育python2104期总结 第十三次总结: 常用系统模块和文件操作 目录 time模块 datetime模块 hashlib模块 文件操作 读写操作 数据存储操作 作业 正文 1.time模块 ...

  6. 千锋Flask学习笔记

    千锋Flask学习笔记 文章目录 千锋Flask学习笔记 写在前面 1. Flask介绍 2. Views 3. Request 4. Response 5. 会话技术 6. 模型和模板 7. 数据传 ...

  7. 千锋教育-加百利 web

    千锋教育-加百利:https://space.bilibili.com/31452330?spm_id_from=333.788.b_765f7570696e666f.2 cHM6Ly9ibG9nLm ...

  8. 千锋教育python2104期总结day5

    千锋教育python2104期总结 第四次总结: 循环练习和语法 目录 1.复习 2.认识列表 3.添加元素 4.第一周作业(零基础) 5.周末作业-循环练习题 正文 1. 复习 for循环 for ...

  9. 千锋教育Web前端——PC端企业类型整页制作

    千锋教育Web前端--PC端企业类型整页制作 文章目录 千锋教育Web前端--PC端企业类型整页制作 一.PC端的布局 二.源码 1.CSS源码 2.HTML源码 三.运行结果 一.PC端的布局 通栏 ...

最新文章

  1. Repeater控件
  2. 查看.Net程序的框架版本的方法
  3. linux设备和驱动注册,Linux驱动第五篇-----驱动注册和生成设备节点
  4. java 字符串 1_java 字符串操作大全1
  5. simulink 得到任意想要的 PWM 波形
  6. iOS 移动端生成工具开发
  7. 学计算机的副部级,中国31所副部级大学排名
  8. TranslateAnimation类:位置变化动画类
  9. from scipy import special, optimize, from ._nnls import nnls ImportError: DLL load failed: 找不到指定的模块。
  10. 计算机毕业论文任务书模板,计算机毕业论文设计任务书范文计算机系毕业论文任务书上的方法写.doc...
  11. UML建模与软件开发设计(三)——UML常用开发工具
  12. 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论
  13. APIO2014 连珠线
  14. 现在梦三国2服务器不稳定,《梦三国2》拒绝卡顿 从自我电脑优化开始
  15. C3P0 连接池时报 TimeoutException 的解决方法
  16. !!! 格式塔原理及应用
  17. 夏敏捷2008科研成果
  18. (精华)2020年8月7日 微信小程序 实时音视频通话
  19. 永宏B1系列PLC是否有电池?
  20. #MH370失联五周年# 从马航失联五周年看航空安全

热门文章

  1. redis的使用总结
  2. 设置环境变量永久生效和临时生效 export PS1
  3. linux 修改微秒时间,linux 获取当前时间到微秒
  4. 小程序连接 域名不合法
  5. 暑期实践总结_李冰华
  6. seaborn boxplot 箱线图
  7. Mysql ACID详解
  8. 入校以来现实表现三段式
  9. excel根据某列拆分数据表
  10. 百里挑一的试题库管理系统以及考试答题小程序