redis没有表结构,数据结构是 key - vlaue,
用内存缓存数据,IO性能比硬盘好
单线程,非阻塞执行
安装redis
上传到linux系统 root目录,解压
tar -xvf redis安装包名
src存放redis源代码,编译后可以安装redis
安装gcc编译器
yum install gcc -y
进入redis解压目录,安装redis
cd redis目录
make
cd src
make install
修改redis.conf配置
69 bind 0.0.0.0 任何IP都可访问
88 protected-mode no 关闭保护模式
136 daemonize yes 后台进程运行
507 requirepass abc123456 设置访问密码
启动redis程序
chmod u+x ../redis.conf 添加执行权限
./redis-server ../redis.conf 启动 redis 服务
启动 redis 客户端
./redis-cli 无密码
./redis-cli -a abc123456 有密码
进入redis 客户端
127.0.0.1:6379>auth 'abc123456' 输入密码
127.0.0.1:6379>set user bob 添加key-vlaue格式数据
127.0.0.1:6379>get user 获取
127.0.0.1:6379>del user 删除
让远程可以访问redis
1. 关闭selinux
2. 开启防火墙端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
安装RDM图形客户端,远程访问 redis 服务
关闭 redis 服务
redis-cli -a abc123456 shutdown
用 RDM 远程连接 redis ,打开命令行窗口
set kill_num 50 设置库存为50
watch kill_num kill_user 监视要操作的数据
multi 开启一个事务
decr kill_num 库存-1
rpush kill_user 9502 添加秒杀成功用户ID
exec 提交事务
取消事务(回滚)
discard
存储过程
1. 隐藏了SQL语句,外包公司只传入参数就可完成业务,保护了数据库隐私
2. 提高效率
3.没有返回值
根据部门名称,查询部门用户信息
SELECT
e.id,
e.ename,
e.sex,
e.married,
j.job
FROM
t_emp e
JOIN t_dept d ON e.dept_id = d.id
JOIN t_job j ON e.job_id = j.id
WHERE
d.dname = "零售部";
插入实习生数据,男生分配网商部,女生分配零售部
CREATE DEFINER = CURRENT_USER PROCEDURE `p1`
(IN `p_wid` varchar(20),
IN `p_ename` varchar(20),
IN `p_sex` char(1),
IN `p_married` tinyint(1),
IN `p_education` tinyint,
IN `p_tel` varchar(11))
BEGIN
declare dept_id int;
CASE
WHEN p_sex='女' THEN
SET dept_id=3;
ELSE
SET dept_id=4;
END CASE;
INSERT INTO t_emp(wid,ename,sex,married,education,tel,dept_id,
hiredate,job_id,`status`,is_deleted)
VALUES(p_wid,p_ename,p_sex,p_married,p_education,p_tel,dept_id,
CURDATE(),9,1,0);
END;
调用存储过程:
call p1(参数);
函数
有返回值
计算个人所得税
CREATE DEFINER = CURRENT_USER FUNCTION `计算个人所得税`(`salary` decimal) RETURNS decimal(10,2)
BEGIN
DECLARE temp DECIMAL;
DECLARE tax DECIMAL;
SET temp=salary-3500;
CASE
WHEN temp<=0 THEN
SET tax=0;
WHEN temp>0 AND temp<=1500 THEN
SET tax=temp*0.03-0;
WHEN temp>1500 AND temp<=4500 THEN
SET tax=temp*0.10-105;
WHEN temp>4500 AND temp<=9000 THEN
SET tax=temp*0.20-555;
WHEN temp>9000 AND temp<=35000 THEN
SET tax=temp*0.25-1005;
WHEN temp>35000 AND temp<=55000 THEN
SET tax=temp*0.30-2755;
WHEN temp>55000 AND temp<=80000 THEN
SET tax=temp*0.35-5505;
ELSE
SET tax=temp*0.45-13505;
END CASE;
RETURN tax;
END
在MySQL中创建函数时出现这种错误的解决方法:
set global log_bin_trust_function_creators=TRUE;
触发器
发生事件后执行的操作
t_dept
f1 : 更新部门ID后,更新部门表的员工部门ID
update t_emp set dept_id=NEW.id where dept_id=OLD.id;
f2:删除部门后,删除这个部门的员工记录
delete from t_emp where dept_id=OLD.id;
为什么要放弃存储过程、触发器和自定义函数?
因为在数据库集群的场景里,由于存储过程、触发器和自定义函数都是在本地数据库节点上运行,它们与数据库集群业务产生了冲突,所以为了顾全大局,放弃使用数据库本地编程,甚至连数据库本地生成主键的机制也都放弃了。
把存储过程发给 mycat,由于封装了类型,mycat不知道改发送给哪个数据库节点;
如何避免偷换交易中的商品信息?
B2B电商平台,通常采用保存历次商品修改信息、降低搜索排名
B2C电商平台,只需要保存历次商品修改信息即可
创建spu_old表,添加spu_id字段,无符号,添加索引
创建sku_old表,添加old_id字段,无符号,添加索引
order_detail表,添加old_id字段,无符号,添加索引,
订单详情表,如果old_id不为空,修改过就可以进行表连接查询了