She sounds like me.
I take out all my frustrations on my loved ones. It's not okay. For me it's always been easier to let it out on the people I feel 'safe' with - the result being they are no longer safe with me.
I'm manipulative, impulsive, and deeply unhappy at times and I always push people away as a result of it.
Everyone else is right - you deserve to be treated with respect and it's not okay for the person you love to take out every frustration and feeling on you.
That being said - 3 years is a long time and talking to her honestly about this may be the best path forward. Time and again that failed with me, but knowing that I lost my best friend forever because of my own asshole behavior makes me hope I'll be better in the future.
There is often a reason behind the scenes for this kind of reaction though. Other people have mentioned cheating, but I never cheated and it wasn't guilt that made me act the way I did. It was always just anger at other things that I couldn't express clearly.
Best of luck and remember that the ones like her (and me) probably aren't worth any more of your time if nothing ever changes.