千锋教育redis笔记
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笔记相关推荐
- PyEcharts学习笔记整理,基于B站千锋教育
目录 1. PyEcharts:初始化配置.全局配置项(标题配置.缩放配置) 2. PyEcharts:全局配置项(图例配置项.视觉映射配置项.提示框配置项.坐标轴配置项) 3. PyEcharts: ...
- 千锋Django学习笔记
千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...
- HTML5从入门到精通(千锋教育)免费电子版+PDF下载
本书是HTML5初学者极好的入门教材之一,内容通俗易懂.由浅入深.循序渐进.本书内容覆盖全面.讲解详细,其中包括标签语义化.标签使用规范.选择器类型.盒模型.标签分类.样式重置.CSS优化.Photo ...
- 千锋教育python2104期总结day2
千锋教育python2104期总结day2 第一次总结: 基础语法和变量 目录 更改基础设置, 写出第一句代码 基础语法 输入和输出函数 变量 正文 1. 更改基础设置,写出第一句代码 1)设置pyc ...
- 千锋教育python2104期总结day14
千锋教育python2104期总结 第十三次总结: 常用系统模块和文件操作 目录 time模块 datetime模块 hashlib模块 文件操作 读写操作 数据存储操作 作业 正文 1.time模块 ...
- 千锋Flask学习笔记
千锋Flask学习笔记 文章目录 千锋Flask学习笔记 写在前面 1. Flask介绍 2. Views 3. Request 4. Response 5. 会话技术 6. 模型和模板 7. 数据传 ...
- 千锋教育-加百利 web
千锋教育-加百利:https://space.bilibili.com/31452330?spm_id_from=333.788.b_765f7570696e666f.2 cHM6Ly9ibG9nLm ...
- 千锋教育python2104期总结day5
千锋教育python2104期总结 第四次总结: 循环练习和语法 目录 1.复习 2.认识列表 3.添加元素 4.第一周作业(零基础) 5.周末作业-循环练习题 正文 1. 复习 for循环 for ...
- 千锋教育Web前端——PC端企业类型整页制作
千锋教育Web前端--PC端企业类型整页制作 文章目录 千锋教育Web前端--PC端企业类型整页制作 一.PC端的布局 二.源码 1.CSS源码 2.HTML源码 三.运行结果 一.PC端的布局 通栏 ...
最新文章
- Repeater控件
- 查看.Net程序的框架版本的方法
- linux设备和驱动注册,Linux驱动第五篇-----驱动注册和生成设备节点
- java 字符串 1_java 字符串操作大全1
- simulink 得到任意想要的 PWM 波形
- iOS 移动端生成工具开发
- 学计算机的副部级,中国31所副部级大学排名
- TranslateAnimation类:位置变化动画类
- from scipy import special, optimize, from ._nnls import nnls ImportError: DLL load failed: 找不到指定的模块。
- 计算机毕业论文任务书模板,计算机毕业论文设计任务书范文计算机系毕业论文任务书上的方法写.doc...
- UML建模与软件开发设计(三)——UML常用开发工具
- 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论
- APIO2014 连珠线
- 现在梦三国2服务器不稳定,《梦三国2》拒绝卡顿 从自我电脑优化开始
- C3P0 连接池时报 TimeoutException 的解决方法
- !!! 格式塔原理及应用
- 夏敏捷2008科研成果
- (精华)2020年8月7日 微信小程序 实时音视频通话
- 永宏B1系列PLC是否有电池?
- #MH370失联五周年# 从马航失联五周年看航空安全