适合存储用户会话的数据库?
关系型数据库或文档型数据库都适合存储用户会话。
因为用户会话一般包括用户登录信息、浏览历史、购物车信息等,这些信息需要以结构化的方式存储。
关系型数据库具有ACID特性,能够保证数据的完整性和一致性;而文档型数据库则能更好的处理复杂的数据结构和嵌套的数据类型,具有更好的扩展性和灵活性,适合处理用户未知的数据结构。
此外,云数据库也是现在存储用户会话的流行选择之一,例如AWS RDS、阿里云RDS等云数据库服务,它们具有高可用性、灵活的配置选项以及数据备份、恢复、监控等一系列的服务,在用户会话存储方面具有广泛的应用场景。
memcache与redis有何区别,redis有哪些优势呢?
首先,Memcached和Redis都是著名的、广泛使用的Nosql数据库。
1. Memcached简介
Memcached 免费开源、高性能、分布式内存对象缓存系统,主要用于作为关系数据库缓存,用来加速应用程序的访问,减轻主数据库的压力。Memcached 是一个内存key-value存储,主要存储字符串或者小的对象等数据库调用,API调用或者页面渲染结果的数据。Memcached立足于简单、快速部署可以解决大型数据库缓存的各种问题。
Memcached同时又非常强大,支持包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang, Lua等语言调用。Memcached在业界广泛应用,除了开发者LiveJournal自己外还有Wikipedia、Flickr、Bebo,WordPress.com,Craigslist、 Mixi也在使用。
2. Redis简介
Redis同样是一个免费开源的key-value存储系统。可以用做数据库,缓存和消息 *** 使用。Redis支持比较多的数据类型,包括:字符串、哈希 表、链表、 *** 、有序 *** 。
Redis使用C语言开发,支持绝大多数类Unix系统,在Linux,BSD、Unix,OS X等符合POSIX的系统下无需任何依赖就能使用。官方建议在线上应用的话更好在Linux下部署。在Windows下有非官方微软自己开发和维护的的Redis。
Redis和Memcached对比
1、性能对比
由于Redis广泛使用的版本只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis也升级新版本3.0以上支持多核,但是3.0以上版本除了增加很多功能外,性能还不如老版本。
这是是相关性能测试对比图:
2、内存使用效率对比
使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
3、Redis支持服务器端的数据操作
Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached 里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了 *** IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的 GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
4、Redis的持久化和主从架构
Redis虽然内存的存储系统,但是支持内存数据持久化,而且提供两种主要的持久化策略:RDB快照和AOF日志。使得Redis可以保存比较重要的数据不怕断电后数据丢失,同时基于数据持久化的分布式主从架构也提升了Redis的可用性和性能问题。
作为对比,虽然memecached的虽然也支持通过客户端的分布式存储架构。
关于memcached的命中率
缓存的命中率命中:直接从缓存中get读能取到想要的数据。 不命中:缓存中没有想要的数据,还需要到数据库进行一次查询才能读取到想要的数据。
所以命中率的高低会直接影响memcached性能。那么要如何进行优化,提高命中率呢?
优化设置项目:
1、默认单个item更大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576 进行控制,它是默认的slab大小
2、要根据实际业务情况预估一些参数大小,适当的调整内存页大小和增长因子。
设定参数:
-f:chunk增长因子,默认1.25。
-n:指定最小chunk的key+suffix+value大小。
Item (no cas) 48,Item(cas) 56。
当指定-C选项时,最小chunk为-n指定大小+48;当没有-C选项时,最小chunk为-n指定大
3、极端情况下,你可以禁止LRU(最近最少使用算法)试试。通过“-M”参数可以禁止LRU。